ROS使用ADSL上網時,每次撥號IP都會改變,導致外網訪問ROS服務器失敗,目前最常見的解決方案是使用DDNS這種動態域名工具,在撥號后(IP發生變化后)通知DDNS服務器更新IP,最終使用DDNS服務商提供的靜態域名即可永久訪問這台服務器。ROS官方僅支持changeip,但通過其它方法也可以實現支持花生殼,測試通過的腳本如下:
一、國外changeip的腳本,修改自changeip官方網站:
1 # Define User Variables 2 :global ddnsuser "user" 3 :global ddnspass "password" 4 :global ddnshost "xxxx.onmypc.org" 5 :global ddnsinterface "changkuan" 6 7 # Define Global Variables 8 :global ddnsip 9 :global ddnslastip 10 11 :if ([ :typeof $ddnslastip ] = nothing ) do={ :global ddnslastip "0" } 12 13 # Grab the current IP address on that interface. 14 :global ddnsip [ /ip address get [/ip address find interface=$ddnsinterface ] address ] 15 :log info $ddnsip 16 # Did we get an IP address to compare? 17 :if ([ :typeof $ddnsip ] = nil ) do={ 18 :log info ("DDNS: No ip address present on " . $ddnsinterface . ", please check.") 19 } else={ 20 21 :if ($ddnsip != $ddnslastip) do={ 22 23 :log info "DDNS: Sending UPDATE!" 24 :log info [ :put [/tool dns-update name=$ddnshost address=[:pick $ddnsip 0 [:find $ddnsip "/"] ] key-name=$ddnsuser key=$ddnspass ] ] 25 :global ddnslastip $ddnsip 26 27 } else={ 28 :log info "DDNS: No update required." 29 } 30 31 } 32 33 # End of script
二、國內花生殼的腳本,官方提供的腳本每次都會更新,根據上述changip腳本修改之,實現IP變化后才更新:
1 local server "http://ddns.oray.com" 2 local domain "xxxx.oicp.net" 3 local users "user" 4 local paswd "password" 5 local adslinterface "changkuan" 6 local ipaddr 7 :global lastipaddr 8 9 set ipaddr [/ip address get [/ip address find interface=$adslinterface] address] 10 :if ([ :typeof $ipaddr ] = nil ) do={ 11 :log info ("ORAY: No ip address present on " . $adslinterface . ", please check.") 12 } else={ 13 set ipaddr [:pick $ipaddr 0 ([len $ipaddr] -3)] 14 :log info $ipaddr 15 :if ($ipaddr != $lastipaddr) do={ 16 local par "/ph/update?&hostname=$domain&myip=$ipaddr" 17 :log info "ORAY: Sending UPDATE!" 18 :log info [:put [ /tool fetch url=($server . $par) mode=http user=$users password=$paswd ] ] 19 :global lastipaddr $ipaddr 20 21 } else={ 22 :log info "ORAY: No update required." 23 } 24 }
