二月 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={

  }
}

15 Responses to “RouterOS 動態更新IP到 No-IP”

  1. 阿樹 Says:

    您好:
    能否請教一下
    :local ddnscomment “RouterOS對外IP"
    RouterOS對外IP我要填上什麼,我是用hinet FTTB pppoe取得浮動ip的

  2. jason Says:

    to 阿樹:

    1.要先在PPPoE的連線上設定註解,讓script可以正確的抓到。
    如何設定,請看下圖。
    http://www.minitw.com/wp-content/uploads/2013/09/20130901_1.jpg

    2.接下來就是把你自己設定的名稱註解填上去script即可。

  3. 阿樹 Says:

    jason大大,照您的方法還是無法中,更新no-ip,不知還缺少什麼步驟

  4. jason Says:

    to 阿樹:

    可以查一下回傳值的內容,看看是那邊出了問題。

    回傳值預設會存在你ROS內的檔案中,把檔案拿出來後,用記事本開啟來看。

  5. 阿樹 Says:

    jason大大,請問回傳值是log那個選項嗎?

  6. jason Says:

    to 阿樹:

    檔案的位置可以參考下圖,會有個你要更新domain名稱的檔名。
    http://www.minitw.com/wp-content/uploads/2013/09/20130903_1.jpg

    如果找不到,表示你的script有問題,執行不成功,需要手動debug。

  7. 阿樹 Says:

    jason大大您好:我的files裡面找不到您說的檔案,只有我的備份檔,不知能否加入大大的skype或facebook,還有幾個問題都一直搞不定,VPN及開PORT
    之前使用RT-N16刷tomato這些設定都很簡單,最近改成RB450G,真是太困難的,一直都搞不定。

  8. jason Says:

    OK。我的Facebook:jokkson@gmail.com

    如果你方便的話,可以把你的ROS開個帳號密碼讓我連進去,簡單的事,我可以幫你處理掉。

    加FB再詳談吧~~

  9. 阿樹 Says:

    感謝,您是大好人,已加fb了,謝謝

  10. jason Says:

    測試結果是RouterOS 6.2版本有bug,請至少使用RouterOS 6.3的版本以上,此script就可以正常使用。

  11. Alan Says:

    您好, 在執行到行號27時就無動作了, 且在file處也沒有新生成檔案, 不知道是甚麼原因?

    測試在26行號後插入 :log info 每個變數都有在log顯示變數資料, 但此測試行插入到27行號後就沒反應了.

    謝謝您的回覆~~

  12. jason Says:

    to Alan:

    我今日早上測試(我的ROS的版本是 6.10),是正常的,請參考圖片
    http://www.minitw.com/wp-content/uploads/2014/04/20140403_1.jpg

    建議你可以用winbox裡面的 New Terminal 下指令直接執行(指令請參考上面的圖片),如果有問題的話,介面會停住,並跟你說指令碼那邊有問題。

  13. Alan Says:

    jason您好,
    執行的結果如下:
    while resolving ip: could not get answer from dns server

    依據上述嘗試解決問題, 發現挺好玩的現象, 由RB-450G /toosl ping 168.95.1.1 會time out, 但是從經由該路由器DHCP配發區網ip的PC去 ping 則一切正常, 看來問題是在這裡了, 但是不明白為甚麼, 不知道如何解決.

    另外我把 /ip dns server 內原本指定的 168.95.1.1 168.95.192.1 兩個都清除成無設定值, 發現PC開網頁的速度變快了.

    麻煩您了~~

    p.s. hinet 光纖 60m/15m

  14. jason Says:

    to Alan:

    1.先把ROS升級到最新版。
    2.看看firewall那邊的規則是否有設到什麼影響ros本體網路封包的規則。
    3.如果以上都沒用,請直接重置你的ROS,一個一個規則測試,看看是那個規則會影響到。

  15. Alan Says:

    由於無法確定原因, 已還原原廠狀態重寫一份新的規劃, 到目前Queue已完成, 最重要的是DDNS-NO-IP工作正常, 謝謝您的指導以及程式碼的分享.

留下評論