Criei este post pois fiz muitas buscas tanto aqui quanto na internet e não encontrei algo que me ajudasse.
Retirei o Script abaixo da Wiki-Mikrotik e ajustei apenas o que era necessário. Testei em RBS V6.5 e V5.22.
Mude o que esta em vermelho para seus dados.
:global ddnsuser "seu.ddns.com.br"
:global ddnspass "suasenhadodominio"
:global theinterface "InterfacedaInternet"
:global ddnshost seu.ddns.com.br *-aqui não tem aspas*
: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 [nick $ipfresh 0 $i];
}
} *ali onde esta members.ddns.com.br só server para os DDNS da winco. Não se esqueça de apagar os comentários em azul.*
: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.ddns.com.br 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";
}
}
###############################################
#Este Script é para atualização via Interface ou http - DynDns, No-Ip e ChangeIP
#Acho sempre mais interessante usa-lo via Http porque normalmente não dá erros. O que estiver em azul apague e em #vermelho mude para sua realidade. - Só Lembrando que retirei da Wiki-Mikrotik.
:local username "your username"
:local password "your password"
:local hostname "subdomain.yourprovider.net"
#availabe options: "http" or "iface"
# - http: Consulta servidor externo para descobrir o IP (Usado atrás de NAT)
# - iface: Nesta opção pega o IP da Interface de Internet (Nem sempre funciona direito)
:local discoverBy "iface" *Aqui você define se quer por http ou interface - deixe iface ou http*
# interface used to get ip address from (only if discoverBy = iface)
:local iface "public-dsl" *Aqui só será usado se você escolher pela interface, se sim coloque o nome da sua interface de internet, se não deixe como esta.*
# Serviços disponiveis: "dyndns", "noip" and "changeip"
:local service "changeip" *Aqui você altera para o serviço que estiver utilizando*
# Numero de dias para forçar mudança de IP
:local forceUpdate 15
#************************************************************************************************
# Daqui em diante não faça mudanças, a menos que saiba.
#************************************************************************************************
:local force
:global lastUpdate
:local currentIP
:if ($discoverBy="http") do={
/tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
:local result [/file get dyndns.checkip.html contents]
:local resultLen [:len $result]
:local startLoc [:find $result ": " -1]
:set startLoc ($startLoc + 2)
:local endLoc [:find $result "</body>" -1]
:set currentIP [:pick $result $startLoc $endLoc]
} else={
:set currentIP [ /ip address get [find interface=$iface disabled=no] address ]
:for i from=( [:len $currentIP] - 1) to=0 do={
:if ( [:pick $currentIP $i] = "/") do={ :set currentIP [:pick $currentIP 0 $i] }
}
}
#get IP from DynDNS for our hostname
:local resolvedIP [:resolve $hostname]
# get current date in format mm/DD/YYYY
:local date [ /system clock get date ]
# convert to YYYYMMDD
:local months ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
:local month [ :pick $date 0 3 ]; :local day [ :pick $date 4 6 ]; :local year [ :pick $date 7 11 ];
:local mm ([ :find $months $month -1 ] + 1);
:if ($mm < 10) do={ :set month ("0" . $mm); } else={ :set month $mm; }
:set date ($year . $month . $day);
:if ([ :typeof $lastUpdate ]=[:nothing] || (($date-$lastUpdate) >= $forceUpdate && $forceUpdate > 0)) do={
:set force true
}
:put ("Current IP: $currentIP ($discoverBy), Last update: $lastUpdate")
# Determine if dyndns update is needed
:if (($currentIP != $resolvedIP) || ($force = true)) do={
:if ($service = "dyndns") do={
/tool fetch user=$username password=$password mode=http address="members.dyndns.org" \
src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/output.txt"
}
:if ($service = "noip") do={
/tool fetch user=$username password=$password mode=http address="dynupdate.no-ip.com" \
src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/output.txt"
}
:if ($service = "changeip") do={
/tool fetch user=$username password=$password mode=http address="nic.changeip.com" \
src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/output.txt"
}
:local result [/file get output.txt contents]
:log info ("dynamic-dns-updater: Service = $service, Hostname = $hostname")
:log info ("dynamic-dns-updater: CurrentIP = $currentIP, Resolved IP = $resolvedIP")
:log info ("dynamic-dns-updater: Update result: ".$result)
/ip dns cache flush
:set lastUpdate $date
}