Среда, 08.05.2024, 11:35
Приветствую Вас Гость | RSS
Мой сайт
Главная
Регистрация
Вход
Форма входа

Меню сайта

Категории раздела
Об ОС Windows [137]
В категории размещаются статьи, касающщиеся операционных систем от Microsoft.
Об ОС *Nix [198]
В данной категории собраны статьи об ОС семейства Unix/Linux/FreeBSD/...
Справочные материалы [351]
Справка по всему разделу.
Виртуализация и Облака [46]
Networks & Routing [86]
DataBases [22]

Наш опрос
Оцените мой сайт
Всего ответов: 209

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » Статьи » Системное администрирование » Об ОС *Nix

Mikrotik Dynamic DNS Update Script for dynDNS

Dynamic DNS Update Script for dynDNS

in order to support dyndns i took some parts from the changeip script and made it work for.

1) add a script called dynDNS:

# Define User Variables
:global ddnsuser "DYNDNSUSER"
:global ddnspass "DYNDNSPASS"
:global ddnshost "DYNDNSHOST"

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

:global ddnsinterface
:global ddnssystem ("mt-" . [/system package get system version] )

# Define Local Variables
:local int

# Loop thru interfaces and look for ones containing
# default gateways without routing-marks
:foreach int in=[/ip route find dst-address=0.0.0.0/0 active=yes ] do={
  :if ([:typeof [/ip route get $int routing-mark ]] != str ) do={
  :global ddnsinterface [/ip route get $int interface]
 }
}

# Grab the current IP address on that interface.
:global ddnsip [ /ip address get [/ip address find interface=$ddnsinterface ] address ]

# Did we get an IP address to compare?
:if ([ :typeof $ddnsip ] = nil ) do={
  :log info ("DynDNS: No ip address present on " . $ddnsinterface . ", please check.")
} else={
  :if ($ddnsip != $ddnslastip) do={
  :log info "DynDNS: Sending UPDATE!"
  :local str "/nic/update?hostname=$ddnshost&myip=$ddnsip&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
  :local str [/file find name="DynDNS.$ddnshost"];
 /file remove $str
  :global ddnslastip $ddnsip
 }
}

2) Add a scheduler entry to run every minute

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

There is a thread for further questions.

Getting it to work with 4.XX

# Set needed variables
:local username "YourUsername"
:local password "YourPassword"
:local hostname "nohostset"
:global systemname [/system identity get name]

:if ($systemname = "Site1" ) do= {
:set hostname "yourdomain1.dyndns.org"
}
:if ($systemname = "Site2" ) do= {
:set hostname "yourdomain2.dyndns.org"
}
:if ($systemname = "Site3" ) do= {
:set hostname "yourdomain3.dyndns.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 "</body>" -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!

#:set dyndnsForce true

# Determine if dyndns update is needed
# more dyndns updater request details 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="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 ("UpdateDynDNS: Dyndns Update Result: ".$result)
  :put ("Dyndns Update Result: ".$result)
} else={
  :log info ("UpdateDynDNS: No dyndns update needed")
}

If have problems to run these scripts, try it:


:local ddnsuser "your user name"
:local ddnspass "your password"
:local theinterface "device to renove IP"
:local ddnshost "yourhost.dyndns.org"
:local ipddns [:resolve $ddnshost];
:local 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...!"
  :local 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
  :local 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";
 }
} 

Reference: MikroTik Forum



Источник: http://wiki.mikrotik.com/wiki/Dynamic_DNS_Update_Script_for_dynDNS
Категория: Об ОС *Nix | Добавил: admin (09.06.2011)
Просмотров: 5682 | Комментарии: 1 | Теги: mikrotik, route, dyndns | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Copyright MyCorp © 2024