Заходим в System / Scripts.  Добавляем новый скрипт. Назовем “dynv6”, название пригодится в планировщике.

https://gist.github.com/stargieg/1b11d3df9cc6f9cb934037e6c474d618

# Define User Variables
:global ddnspass "TOKEN"
:global ddnshost "HOSTNAME.dynv6.net"
#:global ddnspool "pool0"
#:global ddnsinterface "bridge"
#:global ddnsinterface "6to4-henet"
#:global ddnsinterface "pppoe-out1"
#:global ddnsinterface "ether1"

# Define Global Variables
:global ddnsip
:global ddnslastip
:if ([ :typeof $ddnslastip ] = nil ) do={ :global ddnslastip "0" }


# Define Local Variables
:local int

# Loop thru interfaces and look for ones containing
# default gateways without routing-marks
:if ([ :typeof $ddnsinterface ] != "str" ) do={
  :foreach int in=[ /ipv6 address find global ] do={
    :local testip [ /ipv6 address get $int address ]
    :if ($testip in "fe80::/10" || $testip in "fc00::/7") do={
    } else={
      :global ddnsip $testip
    }
  }
} else={
  :if ([ :typeof $ddnspool ] != "str" ) do={
    # Grab the current Global IP address on that interface.
    :foreach int in=[ /ipv6 address find interface=$ddnsinterface global ] do={
      :local testip [ /ipv6 address get $int address ]
      :if ($testip in "fe80::/10" || $testip in "fc00::/7") do={
      } else={
        :global ddnsip $testip
      }
    }
  } else={
    # Grab the current Global IP address on that interface from spec ip pool.
    :global ddnsip [ /ipv6 address get [ /ipv6 address find interface=$ddnsinterface  from-pool=$ddnspool ] address ]
  }
}

# Did we get an IP address to compare?
:if ([ :typeof $ddnsip ] = nil ) do={
   :log info ("DynDNS: No ip address present on please check.")
} else={
  :log info ("DynDNS: check IPv6 UPDATE " . $ddnsip)
  :if ($ddnsip != $ddnslastip) do={
    :log info "DynDNS: Sending IPv6 UPDATE!"
    :local str "api/update\?hostname=$ddnshost&ipv6=$ddnsip&token=$ddnspass"
    /tool fetch address="dynv6.com" host="dynv6.com" src-path="$str" mode=https dst-path=("/dynv6.".$ddnshost)
    :delay 1
    :local str [/file find name="dynv6.$ddnshost"];
    /file remove $str
    :global ddnslastip $ddnsip
  }
}

# legacy IPv4
# Define Global Variables
:global ddnsip4
:global ddnslastip4
:global ddnsinterface4
:if ([ :typeof $ddnslastip4 ] = nil ) do={ :global ddnslastip4 "0" }

# Loop thru interfaces and look for ones containing
# default gateways without routing-marks
:local intfinder ""
:foreach int in=[/ip route find dst-address=0.0.0.0/0 active=yes ] do={
  :set $intfinder [:tostr [/ip route get $int gateway-status]]
  :set $intfinder [:pick $intfinder ([:find $intfinder "via"]+5) [:len $intfinder]]
  :set $ddnsinterface4 $intfinder
}

# Grab the current IP address on that interface.
:set ddnsip4 [ /ip address get [/ip address find interface=$ddnsinterface4 ] address ]
:set ddnsip4 [:pick $ddnsip4 0 [:find $ddnsip4 "/"] ]

# Did we get an IP address to compare?
:if ([ :typeof $ddnsip4 ] = nil ) do={
  :log info ("DynDNS: No ip address present on " . $ddnsinterface4 . ", please check.")
} else={
  :log info ("DynDNS: check IPv4 UPDATE " . $ddnsip4)
  :if ($ddnsip4 != $ddnslastip4) do={
    :log info "DynDNS: Sending IPv4 UPDATE!"
    :local str "api/update\?hostname=$ddnshost&ipv4=$ddnsip4&token=$ddnspass"
    /tool fetch address="dynv6.com" host="dynv6.com" src-path="$str" mode=https dst-path=("/dynv6.".$ddnshost)
    :delay 1
    :local str [/file find name="DynDNS.$ddnshost"];
    /file remove $str
    :global ddnslastip4 $ddnsip4
  }
}

Где за место:

:global ddnspass “TOKEN”
:global ddnshost “HOSTNAME.dynv6.net”

Указываем ваш токен из настроек https://dynv6.com/users/edit:

И ваш созданный hostname: https://dynv6.com/hosts

:global ddnspass “s3VyFvtByyYRf4fZxVpynodArtFxx9”
:global ddnshost “nustromo.dynv6.net”

token dynv6

Пример добавления dynv6:

System / Scripts. Добавляем новый скрипт. Назовем “dyndns”

Заходим в System / Scheduler и добавляем новое задание.

 Заходим в System / Scheduler и добавляем новое задание.

Или в консоли вводим

/system scheduler add name=dynv6 interval=00:30 on-event="/system script run dynv6\r\n"

Не ставьте интервал обновления больше 10 минут!
Иначе dynv6 может заблокировать вас.

Один комментарий к “Mikrotik dynv6 scypt autoupdate hostname for DNS IPv4 and IPv6”
  1. Привет, извините, если текст неверен: я использую Google для перевода.
    Вывод моего журнала на Mikrotik:

    08:25:35 script,info DynDNS: check IPv6 UPDATE 2804:339c:7bf::2:4f2c/64
    08:25:35 script,info DynDNS: check IPv4 UPDATE 100.125.31.158
    08:25:35 script,info DynDNS: check IPv4 UPDATE 100.125.31.158
    08:25:38 firewall,info !LAN: input: in:ether1 out:(unknown 0)

    Скрипт правильно определяет IP: 2804: 339c: 7bf :: 2: 4f2c / 64
    Но когда я обновляю dynv6.com, появляется следующий вывод:

    Current status
    IPv4 Address 168.194.189.158
    IPv6 Prefix 2804:339c:7bf::
    Last update 1 minute ago

    Мой IPv6-адрес обрезается после символа “::”
    Вы когда-нибудь видели что-то подобное?
    С этого момента спасибо!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.