Скрипт DynDNS для MikroTik V6 / dyndns mikrotik 6

Скрипт DynDNS MikroTik Router OS 6

Данный скрипт неактулен, так как DynDns стал платным и появился Mikrotik DDNS

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

:local username "USERNAME"
:local password "PASSWORD"
:global hostname "DYNDNS_ADDRESS" 

:global dyndnsForce
:global previousIP
:local resolvedIP [:resolve $hostname]

#print some debug
#:log info ("UpdateDynDNS: username = $username")
#:log info ("UpdateDynDNS: password = $password")
:log info ("UpdateDynDNS: hostname = $hostname")
:log info ("UpdateDynDNS: previousIP = $previousIP")
:log info ("UpdateDynDNS: resolvedIP = $resolvedIP")

# get the current IP address from the internet (in case of double-nat)
/tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
:local result [/file get dyndns.checkip.html contents]

# parse the current IP result
:local resultLen [:len $result]
:local startLoc [:find $result ": " -1]
:set startLoc ($startLoc + 2)
:local endLoc [:find $result "" -1]
:local currentIP [:pick $result $startLoc $endLoc]
:log info "UpdateDynDNS: currentIP = $currentIP"

# Remove the # on next line to force an update every single time - useful for debugging,
# but you could end up getting blacklisted by DynDNS!
# Edit: Not really needed anymore... the result is not equal... Update will happen.

#:set dyndnsForce true

# Determine if dyndns update is needed
# more dyndns updater request details http://www.dyndns.com/developers/specs/syntax.html
#This is where we check the DNS record against actual result. Thanks to jimstolz76
:if (($currentIP != $resolvedIP) || ($dyndnsForce = true)) do={
  :set dyndnsForce false
  :set previousIP $currentIP
  /tool fetch user=$username password=$password mode=http address="members.dyndns.org" \
  src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/dyndns.txt"
  :local result [/file get dyndns.txt contents]
  :log info ("UpdateDynDNS: Dyndns update needed")
  :log info ("Update Result: " . $result)
  :put ("Dyndns Update Result: " . $result)
} else= {
  :log info ("UpdateDynDNS: No dyndns update needed")
}
 Заходим в System / Scheduler и добавляем новое задание. 

1

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

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

Не ставьте интервал обновления больше 10 минут!

Иначе DynDNS может заблокировать вас.

Скрипт для no-ip.org

# Set needed variables

	:local username "@gmail.com"
	:local password "********"
	:local hostname "****.no-ip.org"
	:global systemname [/system identity get name]


	:if ($systemname = "Site1" ) do={

	:set hostname "*****.no-ip.org"

	}
	:global dyndnsForce

	:global previousIP

	# print some debug info

	## :log info ("UpdateDynDNS: username = $username")

	## :log info ("UpdateDynDNS: password = $password")

	## :log info ("UpdateDynDNS: hostname = $hostname")

	## :log info ("UpdateDynDNS: previousIP = $previousIP")

	# get the current IP address from the internet (in case of double-nat)

	/tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"

	:local result [/file get dyndns.checkip.html contents]

	# parse the current IP result

	:local resultLen [:len $result]

	:local startLoc [:find $result ": " -1]

	:set startLoc ($startLoc + 2)

	:local endLoc [:find $result "" -1]

	:local currentIP [:pick $result $startLoc $endLoc]

	:log info "UpdateDynDNS: currentIP = $currentIP"

	# get the previous IP address from saved file dyndns.txt

	:if (([/file find name=dyndns.txt]) != "") do={

	:local result [/file get dyndns.txt contents]

	# parse the previous IP result

	:local resultLen [:len $result]

	:local startLoc [:find $result "\_" -1]

	:set startLoc ($startLoc + 1)

	:local endLoc $resultLen

	:global previousIP [:pick $result $startLoc $endLoc]

	:log info "UpdateDynDNS: previousIP = $previousIP"

	} else={

	:set previousIP "0.0.0.0"

	}

	# Remove the # on next line to force an update every single time - useful for debugging,

	# but you could end up getting blacklisted by DynDNS!

	:set dyndnsForce true

	## :log info ("Debug - previousIP: ".$previousIP)

	## :log info ("Debug - currentIP: ".$currentIP)

	## :log info ("Debug - dyndnsForce: ".$dyndnsForce)

	# Determine if dyndns update is needed

	# more dyndns updater request details available at http://www.dyndns.com/developers/specs/syntax.html

	:if (($currentIP != $previousIP) || ($dyndnsForce = true)) do={

	:set dyndnsForce false

	:set previousIP $currentIP

	/tool fetch user=$username password=$password mode=http address="no-ip.com" src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/dyndns.txt"

	:local result [/file get dyndns.txt contents]

	:log info ("UpdateDynDNS: Dyndns update needed")

	:log info ("UpdateDynDNS: Dyndns Update Result: ".$result)

	:put ("Dyndns Update Result: ".$result)

	} else={

	:log info ("UpdateDynDNS: No dyndns update needed")

	}

4 комментария

  1. Месяца три уже не обновляется автоматически ip-адрес на dyndns.com после смены ip в роутере,
    скрипт работает, но не указывается
    UpdateDynDNS: previousIP= пусто.
    далее указывается:
    «UpdateDynDNS: currentIP = правильный ip в данный момент»
    «UpdateDynDNS: No dyndns update needed»

    При этом внешний ip определяется верно, но пока на самом сайте dyndns.com не привяжешь новый полученный ip в поле Your current location’s IP address is , то подключиься по днс не получается. Определяется старй ip.
    Подскажите как исправить…
    Спасибо

    1. Попробуйте вот этот скрипт

      :global ddnsuser "username"
      :global ddnspass "password"
      :global theinterface "internet-interface-name"
      :global ddnshost blabla.dyndns.org
      
      :global ipddns [:resolve $ddnshost];
      :global ipfresh [ /ip address get [/ip address find interface=$theinterface ] address ]
      :if ([ :typeof $ipfresh ] = nil ) do={
         :log info ("DynDNS: No ip address on $theinterface .")
      } else={
         :for i from=( [:len $ipfresh] - 1) to=0 do={ 
            :if ( [:pick $ipfresh $i] = "/") do={ 
          :set ipfresh [:pick $ipfresh 0 $i];
            } 
      }
       
      :if ($ipddns != $ipfresh) do={
          :log info ("DynDNS: IP-DynDNS = $ipddns")
          :log info ("DynDNS: IP-Fresh = $ipfresh")
         :log info "DynDNS: Update IP needed, Sending UPDATE...!"
         :global str "/nic/update\?hostname=$ddnshost&myip=$ipfresh&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"
         /tool fetch address=members.dyndns.org src-path=$str mode=http user=$ddnsuser \
               password=$ddnspass dst-path=("/DynDNS.".$ddnshost)
          :delay 1
          :global str [/file find name="DynDNS.$ddnshost"];
          /file remove $str
          :global ipddns $ipfresh
        :log info "DynDNS: IP updated to $ipfresh!"
          } else={
           :log info "DynDNS: dont need changes";
          }
      } 
  2.  RouterOS ver 6.9 ( ROS 6.x ) :

     

    :global ddnsuser "userdyndns"
    :global ddnspass "passworddyndns"
    :global theinterface "pppoe-out1"
    :global ddnshost hostname.dyndns.org
    :global ipddns [:resolve $ddnshost];
    :global ipfresh [ /ip address get [/ip address find interface=$theinterface ] address ]
    :if ([ :typeof $ipfresh ] = nil ) do={
    :log info ("dynDNS: $theinterface tidak memiliki IP Address.")
    } else={
    :for i from=( [:len $ipfresh] - 1) to=0 do={
    :if ( [:pick $ipfresh $i] = "/") do={
    :set ipfresh [:pick $ipfresh 0 $i];
    }
    }
    :if ($ipddns != $ipfresh) do={
    :log info ("dynDNS: IP-DynDNS $theinterface = $ipddns")
    :log info ("dynDNS: IP-Fresh $theinterface = $ipfresh")
    :log info "dynDNS: Pembaharuan diperlukan, Meminta Update IP ke DynDNS...!"
    :global str "/nic/update\?hostname=$ddnshost&myip=$ipfresh&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"
    /tool fetch address=members.dyndns.org src-path=$str mode=http user=$ddnsuser \
    password=$ddnspass dst-path=("/DynDNS.".$ddnshost)
    :delay 1
    :global str [/file find name="DynDNS.$ddnshost"];
    /file remove $str
    :global ipddns $ipfresh
    :log info "dynDNS: IP $theinterface berhasil diperbaharui menjadi $ipfresh!"
    }
    }

    вот этот стабильно заработал на самых последней версии 6.9

    1. Добрый день!
      Спасибо за советы. Извините за долгое отсутствие, потерял ссылку на сайт. Так что не получилось проверить Ваши скрипты на dyndns. Сейчас же, когда dyndns.com стал полностью платным, пробую тоже самое, только на noip.com.
      Скрипт для NOIP от автора почему-то вообще у меня не срабатывает, в логах пусто. Попробовал скрипт от Сержа, просто вставил в него данные от NOIP. Скрипт пишет что dns updated, пишет новый ip, но при этом на сайте noip.com ip остался прежний, . И ничего по DNS недоступно.
      Можете помочь?

      P.S.
      Кстати, при прошлом вопросе ставил чекбоксы:
      » Уведомить меня о новых комментариях по email.»
      «Уведомлять меня о новых записях почтой.»
      Но ничего не приходило.

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

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