本帖最後由 fems 於 2015-1-7 19:21 編輯
一直用DNSexit,免费稳定,也支持顶级域名。
更新脚本参考http://forum.mikrotik.com/viewtopic.php?t=65013修改一下即可,需指定wan口。
ROS6.24
- #************************************************************************************************
- # Parameters
- #************************************************************************************************
- :local username "<your username>"
- :local password "<your password>"
- :local hostname "<subdomain.yourprovider.net>"
- #availabe options: "http" or "iface"
- # - http: will query an external server and discover you public ip (userful for NATted connections)
- # - iface: will use the ip address assigned to the $iface interface (see below)
- :local discoverBy "iface"
- # interface used to get ip address from (only if discoverBy = iface)
- :local iface "public-dsl"
- # current available services: "dyndns", "noip" and "dnsexit"
- :local service "dnsexit"
- # number of days to force an update if your IP did not change (helps keeping your account active)
- :local forceUpdate 15
- #************************************************************************************************
- # do not change below this unless you know what you are doing
- #************************************************************************************************
- :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 = "dnsexit") do={
- /tool fetch user=$username password=$password mode=http address="update.dnsexit.com" \
- src-path="/RemoteUpdate.sv?login=$username&password=$password&host=$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
- }
複製代碼 |