關於RouterOS 國內DDNS服務


雖然RouterOS 加入了cloud功能,但最近在配置RB2011的時候發現不好使,更新域名后無法正確解析到我的IP地址,雖然在cloud的public address中顯示了正確的公網ip地址,但解析分配的域名時老是錯誤,在官網論壇也有人反映這個問題,但沒有結果所以放棄了cloud。

RouterOS早期的DDNS推薦是changeip是國外網站,使用上有些不方便,所以最近找了下國內的DDNS站點pubyun.com的ddns域名更新,此類更新有所不同,使用的是http協議進行更新,所以需要使用fetch功能更新,首先申請了一個DDNS域名,當然申請的是免費域名,根據網站提供的更新說明做了一個DDNS動態更新的腳本,大致配置如下。

在pubyun.com站點選擇DDNS二級域名是f3322.org,申請完成后,需要設置更新密碼,這個很關鍵。
關於RouterOS DDNS - athlon_sds - YuSong的世界

如更新密碼為:0123456789

 如果是windows電腦可以下載客戶端更新軟件,同時pubyun.com站點在客戶端下載頁面提供了linux更新方法,使用lynx通過通過http 方式更新,如下:

lynx -mime_header -auth=用戶名:密碼 "http://members.3322.net/dyndns/update?system=dyndns&hostname=域名"

RouterOS沒有提供lynx,但提供了fetch功能,假設我的域名是"xxxx.f332.org",用戶名root,密碼0123456789,使用fetch更新腳本如下:

/tool fetch url="http://members.3322.net/dyndns/update?system=dyndns&hostname=xxxx.f3322.org"  mode=http user=root password=0123456789

在script先新建腳本內容如下:

:global ddnsnic "pppoe-out1"

:global ddnslastip

:global ddnsip [ /ip address get [/ip address find dynamic=yes interface=$ddnsnic ] address ]

 :if ( [:typeof $ddnslastip]="nothing" ) do={ :global ddnslastip 0.0.0.0/0 }

 :if ( [:typeof $ddnsip]="nothing" ) do={

   :log info ("DDNS: No ip address present on " . $ddnsnic . ", please check.")

 } else={

   :if ($ddnsip != $ddnslastip) do={

    :log info "DDNS: Sending UPDATE!"

    :log info [ /tool fetch url="http://members.3322.org/dyndns/update?system=dyndns&hostname=xxxx.f3322.org"  mode=http user=root password=0123456789

    :global ddnslastip $ddnsip

   } else={

     :log info "DDNS: No change"

 }

 }

剩下的操作就是放到計划任務中周期執行


上面的方法老是測試不通過,經過龔總的指點,更正如下:

:global str "dyndns/update\?system=dyndns&hostname=longii.f3322.net" (這里寫入你注冊的免費DDNS,我是longii.f3322.net)
 
:global ddnsnic "pppoe-out1"  (這里寫入你外網接口的接口名)
 
:global ddnslastip
 
:global ddnsip [ /ip address get [/ip address find interface=$ddnsnic ] address ]
 
 :if ( [:typeof $ddnslastip]="nothing" ) do={ :global ddnslastip 0.0.0.0/0 }
 
 :if ( [:typeof $ddnsip]="nothing" ) do={
 
   :log info ("DDNS: No ip address present on " . $ddnsnic . ", please check.")
 
 } else={
 
   :if ($ddnsip != $ddnslastip) do={
 
    :log info [ /tool fetch   user=root password=xxx(寫入你自己的密碼) mode=http  address="members.3322.net" src-path=$str dst-path=log.txt ]
 
    :log info ("DDNS: Sending UPDATE OK!" . $ddnsip )
 
    :global ddnslastip $ddnsip
 
   } else={
 
     :log info "DDNS: No change"
 
 }
 
 }



測試了下ROS輸出的path=log.txt 老不是當前的IP返回。不曉得為啥。不過看LOG是正確的。大家注意下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM