二月 25

原本用的好好的ChangeIP.com,今天突然出問題,

進RouterOS上一看,Log一直出現ddns error Blacklisted。

查了一下google,找到這篇官方文章Blacklisted IP Address

說是我更新太頻繁。等了3個小時,也不見自動解鎖,一樣的錯誤訊息。
(註:今天晚上看到新聞,大樓機房起火 是方電訊數百客戶網路遭殃,也許是這個事件的關係)

好吧,免錢的。也不能要求太多,換一個吧。

因為dynDNS也要收錢了,所以No-IP(免費的有3個hostname可以用),就是你了。

設定完下面的Script,記得要再設定Schedual,設定可以參考RouterOS 動態更新IP到 ChangeIP.com

#Script在RouterOS 5.23中測試過
#Date:2013/02/25
#Script Name:ddnsUpdate(for no-ip)

#no-ip的帳號
:local ddnsuser "yourNOIPAccout"
#no-ip的密碼
:local ddnspass "yourNOIPPassword"
#要更新的no-ip domain 名稱
:local ddnshost "abcdefg.zapto.org"
#要更新的網路介面IP。使用該網路介面的註解文字來尋找,使用前請先把該網路介面的註解說明加上去
:local ddnscomment "RouterOS對外IP"
##################################
####以上是需要修改資料的部份######
##################################
:global ddnslastipRouterOS
:global ddnsipRouterOS [ /ip address get [/ip address find interface=[/interface get [/interface find comment=$ddnscomment] name]] address ]
#舊的IP有存在就用舊的,不存在就建0.0.0.0/0
:if ([:typeof [:global ddnslastipRouterOS]] = nil ) do={ :global ddnslastipRouterOS 0.0.0.0/0 } else={ :set ddnslastipRouterOS $ddnslastipRouterOS }
:if ([:typeof [:global ddnsipRouterOS]] = nil ) do={
  :log info ("DDNS: No ip address present on " . $ddnscomment . ", please check.")
} else={
  :if ($ddnsipRouterOS != $ddnslastipRouterOS) do={
    :log info "DDNS: Update DDNS! (CHT:開始更新DDNS_Host)"
#轉換IP為no-ip可接受的格式
    :local ipFormat [:pick $ddnsipRouterOS 0 [:find $ddnsipRouterOS "/"]];
    :local NOIPUpdateString "/nic/update?hostname=$ddnshost&myip=$ipFormat"
    :log info ([/tool fetch address=dynupdate.no-ip.com mode=http user=$ddnsuser password=$ddnspass src-path=$NOIPUpdateString dst-path=("/DDNS-".$ddnshost)] . "CHT:更新IP:" . $ddnsipRouterOS)
    :log info ($ddnshost . "  更新回傳值--" . [/file get "DDNS-$ddnshost" contents])
    :global ddnslastipRouterOS $ddnsipRouterOS
  } else={

  }
}




四月 11

這篇文章主要是針對RouterOS更新到DynDNS上所寫的

如果你要更新到ChangeIP.com的話,請參考RouterOS 動態更新IP到 ChangeIP.com

請先到RouterOS 動態更新IP到 ChangeIP.com看一下其他的相關的設定
再把主要的Script換成本文的Script即可。

相關的Script如下

#Script在RouterOS 5.0rc11中測試過
#Date:2010/04/11
#Script Name:DynDNSUpdate
#Script Describe:更新IP到DynDNS上面去

#定義使用者相關的變數,請於下面自行輸入
:local ddnsuser "你的DynDNS帳號"
:local ddnspass "你的DynDNS密碼"
:local ddnshost "你的完整網址名(例如:abcd.ath.cx)"
:local ddnsinterface "要更新的介面名稱(例如:pppoe-out1)"

#定義IP變數
:global ddnsipADSL1
:global ddnslastipADSL1
:if ([ :typeof $ddnslastipADSL1 ] = nil ) do={ $ddnslastipADSL1 "0" }

#取得介面的IP位置
:set ddnsipADSL1 [ /ip address get [/ip address find interface=$ddnsinterface ] address ]
#去掉IP的網段
:set ddnsipADSL1 [:pick $ddnsipADSL1 0 [:find $ddnsipADSL1 "/"]]

#判斷是否需要進行更新
:if ([ :typeof $ddnsipADSL1 ] = nil ) do={
   :log info ("DynDNS: " . $ddnsinterface . "介面上沒有IP,請確認")
} else={
  :if ($ddnsipADSL1 != $ddnslastipADSL1) do={
    :log info ("DynDNS:" . $ddnsinterface . "更新IP" . $ddnsipADSL1)
	:local str "/nic/update?hostname=$ddnshost&myip=$ddnsipADSL1&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"
    /tool fetch address=members.dyndns.org src-path=$str mode=http user=$ddnsuser password=$ddnspass dst-path=("/DynDNS.".$ddnshost)
	:delay 1
    :local str [/file find name="DynDNS.$ddnshost"];
    /file remove $str
#更新後把IP設為最新的IP
    :global ddnslastipADSL1 $ddnsipADSL1
  }
}

參考資料:
MikroTik RouterOS: DynDNS Update Script
DynDNS Perform Update