RouterOS 動態更新IP到 No-IP

原本用的好好的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 thoughts on “RouterOS 動態更新IP到 No-IP

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

  2. to 阿樹:

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

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

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

    1. OK。我的Facebook:jokkson@gmail.com

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

      加FB再詳談吧~~

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

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

    謝謝您的回覆~~

  5. 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

  6. to Alan:

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

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *