返回列表 發帖

【RouterOS】——Dynamic DNS

本帖最後由 角色 於 2013-3-9 21:05 編輯

Sources of information: http://wiki.mikrotik.com/wiki/Dy ... e_Script_for_dynDNS

for example: DynDNS

1) add a script called dynDNS:
  1. # Define User Variables
  2. :global ddnsuser "DYNDNSUSER"
  3. :global ddnspass "DYNDNSPASS"
  4. :global ddnshost "DYNDNSHOST"

  5. # Define Global Variables
  6. :global ddnsip
  7. :global ddnslastip
  8. :if ([ :typeof $ddnslastip ] = nil ) do={ :global ddnslastip "0" }

  9. :global ddnsinterface
  10. :global ddnssystem ("mt-" . [/system package get system version] )

  11. # Define Local Variables
  12. :local int

  13. # Loop thru interfaces and look for ones containing
  14. # default gateways without routing-marks
  15. :foreach int in=[/ip route find dst-address=0.0.0.0/0 active=yes ] do={
  16.   :if ([:typeof [/ip route get $int routing-mark ]] != str ) do={
  17.      :global ddnsinterface [/ip route get $int interface]
  18.   }
  19. }

  20. # Grab the current IP address on that interface.
  21. :global ddnsip [ /ip address get [/ip address find interface=$ddnsinterface ] address ]

  22. # Did we get an IP address to compare?
  23. :if ([ :typeof $ddnsip ] = nil ) do={
  24.    :log info ("DynDNS: No ip address present on " . $ddnsinterface . ", please check.")
  25. } else={
  26.   :if ($ddnsip != $ddnslastip) do={
  27.     :log info "DynDNS: Sending UPDATE!"
  28.     :local str "/nic/update?hostname=$ddnshost&myip=$ddnsip&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"
  29.     /tool fetch address=members.dyndns.org src-path=$str mode=http user=$ddnsuser \
  30.         password=$ddnspass dst-path=("/DynDNS.".$ddnshost)
  31.     :delay 1
  32.     :local str [/file find name="DynDNS.$ddnshost"];
  33.     /file remove $str
  34.     :global ddnslastip $ddnsip
  35.   }
  36. }
複製代碼
2) Add a scheduler entry to run every minute
  1. /system scheduler add name=dynDNS interval=00:01 on-event="/system script run dynDns\r\n"
複製代碼

是否有人用过MikroTik的DNS呢?怎样用都不成功。

TOP

我用這個的。
  1. # Set needed variables
  2. :local username "ddns_username"
  3. :local password "ddns_password"
  4. :local hostname "ddyns.hostname"

  5. :global dyndnsForce
  6. :global previousIP

  7. # print some debug info
  8. :log info ("UpdateDynDNS: username = $username")
  9. :log info ("UpdateDynDNS: password = $password")
  10. :log info ("UpdateDynDNS: hostname = $hostname")
  11. :log info ("UpdateDynDNS: previousIP = $previousIP")

  12. # get the current IP address from the internet (in case of double-nat)
  13. /tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
  14. :delay 1
  15. :local result [/file get dyndns.checkip.html contents]

  16. # parse the current IP result
  17. :local resultLen [:len $result]
  18. :local startLoc [:find $result ": " -1]
  19. :set startLoc ($startLoc + 2)
  20. :local endLoc [:find $result "</body>" -1]
  21. :local currentIP [:pick $result $startLoc $endLoc]
  22. :log info "UpdateDynDNS: currentIP = $currentIP"

  23. # Remove the # on next line to force an update every single time - useful for debugging,
  24. # but you could end up getting blacklisted by DynDNS!

  25. #:set dyndnsForce true

  26. # Determine if dyndns update is needed
  27. # more dyndns updater request details http://www.dyndns.com/developers/specs/syntax.html

  28. :if (($currentIP != $previousIP) || ($dyndnsForce = true)) do={
  29.    :set dyndnsForce false
  30.    :set previousIP $currentIP
  31.    :log info "$currentIP or $previousIP"
  32.    /tool fetch user=$username password=$password mode=http address="members.dyndns.org" \
  33.       src-path="nic/update?system=dyndns&hostname=$hostname&myip=$currentIP&wildcard=no" \
  34.       dst-path="/dyndns.txt"
  35.    :delay 1
  36.    :local result [/file get dyndns.txt contents]
  37.    :log info ("UpdateDynDNS: Dyndns update needed")
  38.    :log info ("UpdateDynDNS: Dyndns Update Result: ".$result)
  39.    :put ("Dyndns Update Result: ".$result)
  40. } else={
  41.    :log info ("UpdateDynDNS: No dyndns update needed")
  42. }
複製代碼

TOP

如果我用Version 3.x, 而bubblestar就用Version 5.x。而我的routerOS就是5.22,那么应该用Version 5.x比较适合。

TOP

如果我用Version 3.x, 而bubblestar就用Version 5.x。而我的routerOS就是5.22,那么应该用Version 5.x比较适合。

TOP

回復 3# bubblestar

都是不能update DDNS。

怎样加呢?

1) 用edit把script做成一个DynDNS-5x.txt,然后ftp到router。
2) 在router, /file print能看到DynDNS-5x.txt, 输入适当的credential
3) /system add script DynDNS-5x.txt,
4)  /system run 0 (where 0 is given by /system script print)

TOP

不知是否RouterOS 本身的問題,DDNS update 後,雖然見到新IP資料,但我差不多等了15分鐘左右,才能使用解決NAT loopback 問題,即是從local network,在Browser 內直接打 DDNS_Hostname 進入自己網內的NAS 資源。

感覺上RouterOS 的Update 沒有像一般Router一樣能即時反影新的設定。

TOP

但用SSL 方式,https://XXX.XXX.XXX:443 就可以馬上進入NAS 的資源,真不明所以。
而普通用 http://xxx.xxx.xxx:8080 用了一會又很容易斷掉 connection.。

TOP

假如是Dual Wan or Multiple Wan,如何把不同IP update 指向同一位址呢?

TOP

解决未呀?

TOP

现在还没有成功,因为没有时间。

TOP

DDNS可以啦!

要确定係NEW TERMINAL度可以ping通域名
(这个经mrandrewchan CHING指导,原来係IP>DNS依度加8.8.8.8,唔好入去STATIC里面加)
行SCRIPT一定要搞掂依个,因为佢係透过DNS搵地址来UPDATE

其它,可以参照:
http://www.telecom-cafe.com/foru ... amp;extra=#pid32082

角色CHING可以update吓D教材啦!嘻嘻

TOP

本帖最後由 角色 於 2013-3-28 21:47 編輯

回復 3# bubblestar

bubblestar兄这个也可以。但是是取最前面的WAN口的IP (WAN 1 IP),而不是Routerbaord的WAN IP (WAN 2 IP)。如果只有Routerboard自己,那么最前的WAN IP就是RouterBoard的WAN IP。这个script使用RouterBoard在最前面。

还有这个都是一样,第一先建立一个文件,把新的IP address记下来,下次的IP个这个IP不一样,就做一次update。如果一样就是bypass,根据不去dyndns的server check一下,是否与本身的IP address是一样?如果一样,不update,不一样就update。

图一:多个Routers


图二:只有一个RB
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP

刚才再看这张thread,问题是那个script,放在哪里呢?

TOP

回復 14# 角色

放在System -> Scripts裏.
Welcome to my TaoBao shop: http://mandymak520.taobao.com/

TOP

返回列表