Ott
07
Usare DynDns con RouterOs
Lo script sotto permette, a chi ha una routerboard Mikrotik o un sistema con caricato RouterOs di aggiornare gli indirizzi del proprio account su DynDns.org.
Lo script, per essere configurato, necessità del nome host da aggiornare, dello username e password del proprio account su DynDns e dell'interfaccia su cui vi è l'indirizzo dinamicamente assegnato dal provider.
Lo script seguente, se eseguito, aggiorna la propria configurazione
:global ddnsuser "YOUR_USERNAME"
:global ddnspass "YOUR_PASSWORD"
:global ddnshost "YOUR.DOMAIN.EXT"
:global ddnsinterface "THE_INTERFACE"
:global ddnsip [ /ip address get [/ip address find interface=$ddnsinterface] address ]
:global ddnslastip
:if ([:len [/interface find name=$ddnsinterface]] = 0 ) do={ :log info "DDNS: No interface named $ddnsinterface, please check configuration." }
:if ([ :typeof $ddnslastip ] = "nothing" ) do={ :global ddnslastip 0.0.0.0/0 }
:if ([ :typeof $ddnsip ] = "nothing" ) do={
:log info ("DDNS: No ip address present on " . $ddnsinterface . ", please check.")
} else={
:if ($ddnsip != $ddnslastip) do={
:log info "DDNS: Sending UPDATE!"
:local ddnsip1 [:pick $ddnsip 0 [:find $ddnsip "/"] ];
:local str "/nic/update?hostname=$ddnshost&myip=$ddnsip1";
/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
} else={
:log info "DDNS: No changes necessary."
}
}
Questo script può, ovviamente essere eseguito automaticamente, ogni ora o anche meno, usando lo scheduler.
Riporto qui sotto, per comodità, i comandi da incollare in una finestra del terminale del winbox, che aggiungono lo script sopra e uno scheduler che esegue lo script ogni 10 minuti
/system script
add name="DynDNS update" policy=\
ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive source="\
:global ddnsuser \"YOUR_USERNAME\"\r\
\n:global ddnspass \"YOUR_PASSWORD\"\r\
\n:global ddnshost \"YOUR.DOMAIN.EXT\"\r\
\n:global ddnsinterface \"THE_INTERFACE\"\r\
\n:global ddnsip [ /ip address get [/ip address find interface=\$ddnsinter\
face] address ]\r\
\n:global ddnslastip\r\
\n:if ([:len [/interface find name=\$ddnsinterface]] = 0 ) do={ :log info \
\"DDNS: No interface named \$ddnsinterface, please check configuration.\" \
}\r\
\n:if ([ :typeof \$ddnslastip ] = \"nothing\" ) do={ :global ddnslastip 0.\
0.0.0/0 }\r\
\n:if ([ :typeof \$ddnsip ] = \"nothing\" ) do={\r\
\n:log info (\"DDNS: No ip address present on \" . \$ddnsinterface . \", p\
lease check.\")\r\
\n} else={\r\
\n :if (\$ddnsip != \$ddnslastip) do={\r\
\n :log info \"DDNS: Sending UPDATE!\"\r\
\n\t:local ddnsip1 [:pick \$ddnsip 0 [:find \$ddnsip \"/\"] ];\r\
\n\t:local str \"/nic/update\?hostname=\$ddnshost&myip=\$ddnsip1\";\r\
\n /tool fetch address=members.dyndns.org src-path=\$str mode=http user\
=\$ddnsuser password=\$ddnspass dst-path=(\"/DynDNS.\".\$ddnshost)\r\
\n :delay 1\r\
\n :local str [/file find name=\"DynDNS.\$ddnshost\"];\r\
\n /file remove \$str\r\
\n :global ddnslastip \$ddnsip\r\
\n } else={ \r\
\n :log info \"DDNS: No changes necessary.\"\r\
\n }\r\
\n}"
/system scheduler
add comment="" disabled=no interval=1h name="Schedule DynDNS Update" \
on-event="/system script run \"DynDNS update\"" policy=\
reboot,read,write,policy,test,password,sniff,sensitive start-time=startup

























Ma lo script è scritto con Lua?
Rispondi
Emiliano Bruni Reply:
ottobre 8th, 2010 at 11:18 AM
No, è il linguaggio di scripting del RouterOs
Rispondi
ciao, vorrei chiederti come posso fare per implementare un log di notifica dyndns e farlo invuiare nella mia mail?
Rispondi