標籤:
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 ddnslastip10 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 $ddnsip16 # 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 $ddnsip26 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 $ipaddr15 :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 $ipaddr20 21 } else={ 22 :log info "ORAY: No update required."23 }24 }
ROS的DDNS指令碼