MikroTik RouterOS 動態 DNS (Dynamic DNS - DDNS) 設定 IP 到 no.ip 間接連接網路 MikroTik RouterOS 動態 DNS (Dynamic DNS - DDNS) 設定 IP 到 no.ip 間接連接網路
  Mikrotik RouterOS       ez      2012-06-10

如果您的網路架構為下圖,RouterOS 間接連接網路,不是直接連接網路,是透過 NAT 取得內網 IP,才適合以下設定方式:

首先新增完 no.ip 帳號後,需要建立 DNS 名稱,登入帳號後選擇 Add a Host:

Hostname:輸入要新增的 DNS 名稱,並且選擇網址,例如:cscworm.no-ip.info

IP Address:輸入 IP 位址,可以隨便輸入,因為之後要透過 RouterOS 更新,例如:127.0.0.1

新增 DNS 完成:

使用 Winbox 登入 Router OS ,選擇選項 System > Scripts:

選擇 Scripts 分類項,按下 + 號 新增項目:

Name:輸入要對此 Script 的命名,例如:DDNS_no_ip。

Source:輸入 Script 程式碼,如下:

以下三個項目需要修改:

DDNSUser:改為您的 no.ip 帳號,例如:username

DDNSPassword:改為您的 no.ip 密碼,例如:password

DDNSHost:改為您申請的網址名稱,例如:cscworm.no-ip.info

#定義 no.ip 相關設定,以下自行修改:
#============================================================
:local DDNSUser "輸入no.ip帳號"
:local DDNSPassword "輸入no.ip密碼"
:local DDNSHost "輸入申請的網址名稱"
#============================================================

#以下程式如不了解,建議不要修改:
#------------------------------------------------------------------------------------------
#定義 IP 變數
:local DDNSIP
:global DDNSLastIP

#定義變數預設值
:if ([ :typeof $DDNSLastIP ] = nil ) do={ $DDNSLastIP "0.0.0.0" }

#利用HTTP查詢Public IP
/tool fetch address=checkip.dyndns.com src-path=/ mode=http dst-path=("PublicIP");
:delay 1;
#讀取檔案
:set DDNSIP [/file get PublicIP contents];
:set DDNSIP [:pick $DDNSIP 0 [:find $DDNSIP "</body>"]];
:set DDNSIP [:pick $DDNSIP ([:find $DDNSIP ":"]+2) 100];
#刪除檔案
/file remove PublicIP;

#判斷是否要更新 IP
:if ([ :typeof $DDNSIP ] = nil ) do={
	:log error ("DDNS no.ip: 網路未取得 IP 位址")
} else={
	:if ($DDNSIP != $DDNSLastIP) do={
#		更新 DDNS IP
		:local url "/nic/update?hostname=$DDNSHost&myip=$DDNSIP"
		/tool fetch address=dynupdate.no-ip.com src-path=$url mode=http user=$DDNSUser password=$DDNSPassword dst-path=("DDNS_no_ip")
		:delay 1

#		檔案內容
		:local filestr [ /file get "DDNS_no_ip" contents];

#		刪除檔案
		:local filename [ /file find name="DDNS_no_ip"];
		/file remove $filename

#		變更是否成功
		:if ( [ :find $filestr "good"] = "0" || [ :find $filestr "nochg"] = "0" ) do={
			:log warning ("DDNS no.ip: 網路更新 IP 位址 " . $DDNSIP)
			:set DDNSLastIP $DDNSIP
		} else={
			:log error ("DDNS no.ip: 網路更新 IP 位址失敗 " . $DDNSIP)
		}
	}
}
#------------------------------------------------------------------------------------------

儲存完畢後,選取剛剛新增的項目,按下 Run Script 就會執行指定項目。

新增完 Script 後,但不會定時執行,所以要將 Script 加入排程,才會在指定時間執行。 選擇選項 System > Scheduler:

按下 + 號 新增項目:

Name:輸入要對此排程的命名,例如:DDNS_no_ip。

Start Date:排程開始日期,例如:Jun/10/2012

Start Time:排程開始時間,例如:00:00:00

Interval:排程間隔執行時間,例如:00:01:00 表示 間隔 1分鐘 執行一次。

On Event:排程執行事件,輸入 Event 程式碼,如下:

將 run 後面的 DDNS_no_ip 改為您剛剛建立的 Script 名稱。

/system script run DDNS_no_ip

完成排程設定,經過 1分鐘 就會自動執行一次:

可以到 Log 查詢是否更新成功,選擇選項 Log:

Log 中有更新記錄,就表示設定成功了。


標籤:   Mikrotik RouterOS

我要留言