找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3187|回复: 2

[脚本] changeip,DDNS更新脚本,涵盖各个版本,没有2.9.x的。我是来炒冷饭的。。。。。

[复制链接]
发表于 2011-11-14 23:48:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 host2318 于 2011-11-14 23:50 编辑

没在使用2.9.X的了。所以。。。
注意事项:
1.ip dns set里面必须设置DNS服务器IP
2.域名解析需要时间生效,数十秒到几分钟不等
3.域名解析调度时间间隔建议5分钟以上(changeip有设置更新频率过高加入黑名单的,好像是5分钟解析300次的!)
4.start time 是可以设置为开机即启动的。。。。





测试过5.6可用的PPPOE拨号

  1. :local ddnsuser "用户"
  2. :local ddnspass "密码"
  3. :local theinterface "端口"
  4. :local ddnshost "域名"
  5. :local ipddns [:resolve $ddnshost];
  6. :local ipfresh [ /ip address get [/ip address find interface=$theinterface ] address ]
  7. :if ([ :typeof $ipfresh ] = nil ) do={
  8.    :log info ("DynDNS: No ip address on $theinterface .")
  9. } else={
  10.    :for i from=( [:len $ipfresh] - 1) to=0 do={
  11.       :if ( [:pick $ipfresh $i] = "/") do={
  12.     :set ipfresh [:pick $ipfresh 0 $i];
  13.       }
  14. }

  15. :if ($ipddns != $ipfresh) do={
  16.     :log info ("DynDNS: IP-DynDNS = $ipddns")
  17.     :log info ("DynDNS: IP-Fresh = $ipfresh")
  18.    :log info "DynDNS: Update IP needed, Sending UPDATE...!"
  19.    :log info [ /tool dns-update name=$ddnshost address=$ipfresh key-name=$ddnsuser key=$ddnspass ]
  20.     :global ipddns $ipfresh
  21.   :log info "DynDNS: IP updated to $ipfresh!"
  22.     } else={
  23.      :log info "DynDNS: dont need changes";
  24.     }
  25. }
复制代码
固定IP3.30,自动识别端口,不需要指定.已测试,可用

  1. :global ddnsuser "用户"
  2. :global ddnspass "密码"
  3. :global ddnshost "域名"
  4. :global ddnsip
  5. :global ddnslastip
  6. :if ([ :typeof $ddnslastip ] = nil ) do={ :global ddnslastip "0" }
  7. :global ddnsinterface
  8. :global ddnssystem ("mt-" . [/system package get system version] )
  9. :local int
  10. :foreach int in=[/ip route find dst-address=0.0.0.0/0 active=yes ] do={
  11.   :if ([:typeof [/ip route get $int routing-mark ]] != str ) do={
  12.      :global ddnsinterface [/ip route get $int interface]
  13.   }
  14. }
  15. :global ddnsip [ /ip address get [/ip address find interface=$ddnsinterface ] address ]
  16. :if ([ :typeof $ddnsip ] = nil ) do={
  17.    :log info ("DDNS: No ip address present on " . $ddnsinterface . ", please check.")
  18. } else={
  19.   :if ($ddnsip != $ddnslastip) do={
  20.     :log info ("DDNS: IP-CHANGEIP = $ddnslastip")
  21.     :log info ("DDNS: IP-Fresh = $ddnsip")
  22.     :log info "DDNS: Update IP needed, Sending UPDATE...!"
  23.     :log info [ :put [/tool dns-update name=$ddnshost address=[:pick $ddnsip 0 [:find $ddnsip "/"] ] key-name=$ddnsuser key=$ddnspass ] ]
  24.     :global ddnslastip $ddnsip
  25.   } else={
  26.     :log info "DDNS: dont need changes"
  27.   }
  28. }
  29. #end
复制代码
pppoe拨号,自动获取默认路由的端口,版本运行待考证

  1. :global ddnsuser "用户名"
  2. :global ddnspass "密码"
  3. :global ddnshost "你的域名"
  4. :global ddnsinterface [/ip route get [/ip route find dynamic=yes static=yes active=yes] interface]
  5. :global ddnslastip

  6. :global ddnsip [ /ip address get [/ip address find dynamic=yes interface=$ddnsinterface ] address ]
  7. :if ( [:typeof $ddnslastip]="nothing" ) do={ :global ddnslastip 0.0.0.0/0 }
  8. :if ( [:typeof $ddnsip]="nothing" ) do={
  9.   :log info ("DDNS: No ip address present on " . $ddnsinterface . ", please check.")
  10. } else={
  11.   :if ($ddnsip != $ddnslastip) do={
  12.     :log info "DDNS: Sending UPDATE!"
  13.     :log info [ /tool dns-update name=$ddnshost address=[:pick $ddnsip 0 [:find $ddnsip "/"] ] key-name=$ddnsuser key=$ddnspass ]
  14.     :global ddnslastip $ddnsip
  15.   }
  16. }
复制代码
多线PPPOE更新IP(每条线路都有域名,这样即使不指定哪条线进,哪条线回。也不怕默认路由改变导致不能登录了)
X 的值,就是线路数。域名格式为 name1.3-a.net name2.3-a.net.在域名前缀输入对应的域名前缀,不含数字

  1. :local ddnsuser "用户"
  2. :local ddnspass "密码"
  3. :local status
  4. :local x
  5. :set x 2
  6. :for i from=1 to=$x do={
  7. :local status [/interface get [/interface find  name=("pppoe-out" . $i)] running]
  8. :if ($status!=true) do={
  9. :set i ($i+1)}
  10. :local ddnsinterface ("pppoe-out" . $i)
  11. :local ddnshost ("域名前缀". $i .".3-a.net")
  12. :local ddnslastip [:resolve $ddnshost]
  13. :if ([ :typeof $ddnslastip ] = nil ) do={ :local ddnslastip "0" }
  14. :local ddnsiph [ /ip address get [/ip address find interface=$ddnsinterface ] address ]
  15. :local ddnsip [:pick $ddnsiph 0 [:find $ddnsiph "/"]]
  16. :if ($ddnsip != $ddnslastip) do={
  17. /tool dns-update name=$ddnshost address=$ddnsip key-name=$ddnsuser key=$ddnspass
  18. :log info ( $ddnshost . "  Sending UPDATE!")
  19.   }
  20. }

复制代码
routeros
发表于 2011-11-15 01:31:53 | 显示全部楼层
超多範例, 謝謝提供測試中...
routeros
回复

使用道具 举报

发表于 2011-11-15 06:51:43 | 显示全部楼层
感謝 , 多學習
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-5-2 22:48 , Processed in 0.060396 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表