1. 程式人生 > >RouterOS之DDNS(動態域名)

RouterOS之DDNS(動態域名)

新版ROS的IP選單下有個Cloud,其實就是支援動態域名的,將此功能使能後,過一會兒就Public Address和DNS Name中就會顯示出內容,前都為你的外網IP地址,後者為自動建立域名,以後使用這個域名訪問就行了。


如果要使用國內的DDNS服務,如花生殼(xxx.wicp.net)或pubyun(xxx.f3322.net),則需要使用指令碼程式了。建立指令碼:System-->Scripts-->新建(就是那個+號),在對話方塊中的Name項輸入DDNS,把所用的複選框打上構,下面的文字框是用來輸出指令碼程式的。以下是f3322.net的DDNS更新IP的指令碼程式(測試OK),根據自己的情況修改紅色加粗的內容,uuu表示動態域名的使用者名稱,ppp表示動態域名的密碼,xxx表示動態域名名稱

,pppoe-out表示拔號連線的名稱。

:local ednsuser "uuu"
:local ednspass "
ppp"
:local ednshost "
xxx.f3322.net"
:local ednsinterface "
pppoe-out"
:local members "http://members.3322.net/dyndns/update?system=dyndns"
:local status
:local status [/interface get [/interface find name=$ednsinterface] running]
:if ($status!=false) do={
:local ednslastip [:resolve $ednshost]
:if ([ :typeof $ednslastip ] = nil ) do={ :local ednslastip "0" }
:local ednsiph [ /ip address get [/ip address find interface=$ednsinterface ] address ]
:local ednsip [:pick $ednsiph 0 [:find $ednsiph "/"]]
:local ednsstr "&hostname=$ednshost&myip=$ednsip"
:if ($ednslastip != $ednsip) do={/tool fetch url=($members . $ednsstr) mode=http user=$ednsuser password=$ednspass
:delay 2
:local result [/file get $ednshost contents]
:log info ($ednshost . " " .$result)
/file remove $ednshost;
}


}

此指令碼程式的工作內容:檢查當前的IP地址和域名xxx.f3322.net指向的IP是否相同,如果不同則向動態域名伺服器提交請求更新IP。


指令碼程式編寫好後,需要定時執行,因此需要建立一個計劃任務:System-->Scheduler-->新建(就是那個+號),將對話方塊中的Interval設定為:00:01:00,表示1分鐘執行一次,在On Event文字框中輸入DDNS,其它的預設值即可。


另外要注意,如果電信拔號上網分配到的IP是100.開頭的,則意味著你是通過電信的內網NAT上網的,沒有直接連到外網,無法通過埠對映實現外網訪問內部的伺服器。那就打個電話給電信客戶要求使用外網IP即可。