让网维变得简单,快速,准确。拒绝浪费时间,解放出更多的时间陪陪家人。 注册 | 登陆

新建ROS的ALIDDNS脚本更新项目


本项目完全免费公开脚本源码。

服务语言环境:golang

ROS的ALIDDNS脚本更新:
1.可对接
阿里云的DDNS进行更新。
2.一个脚本可以支持IPV4和IPV6的DDNS更新。
3.检测子域名不存在时自动创建。
4.支持域名使用V4+V6双栈,2个IP共用一个域名。
5.支持更新不同线路的记录值。

6.支持自定义TTL记录值。
7.支持接口状态回显,方便调试错误。
8.支持对单域名解析多IP的DDNS更新,实现域名形式的负载平衡,并且支持按不同运营商分配负载平衡。(仅限IPV4,本站接口不限制负载均衡的IP个数,但是可能会受到上级接口的规则限制。)

使用条件:
1.必须在阿里云开通AccessKey功能,获取AccessKey ID和密匙
2.必须将域名托管到阿里云DNS。
3.也兼容其他系统使用get提交。(id必填,secret必填,domain必填,IP选填,line选填,renew选填)
4.支持123.ros6.com这样的2级域名,不支持123.456.ros6.com这样的更多级域名,也不支持更新ros6.com这样的顶级域名

ROS脚本(精简版)
  1. #更新ALIDDNS脚本精简版#    
  2. #定义更新的域名#    
  3. :global ddns1 "www.ros6.com"    
  4. #定义阿里云ID#    
  5. :global id1 "16字节长度AccessKey ID"    
  6. #定义阿里云Secret#    
  7. :global secret1 "30字节长度的密匙"    
  8. #下面内容请勿修改#    
  9. #更新IPV4#    
  10. :local results [/tool fetch url=("https://mail.ros6.com:6180/id=$id1&secret=$secret1&domain=$ddns1") check-certificate=no as-value output=user]  
  11. :if ($results->"status" = "finished"do={  
  12. :local result ($results->"data")  
  13. :log warning $result  

ROS脚本(负载均衡版)
  1. #更新ALIDDNS负载均衡#  
  2. #定义更新的接口名#  
  3. :local ddnsint1 pppoe-out1,pppoe-out2  
  4. #定义更新的域名#  
  5. :local ddns1 "ddns.ros6.com"  
  6. #定义更新的线路类型(default,unicom,telecom,mobile)#  
  7. :local ddnsline1 default,default  
  8. #定义TTL参数#  
  9. :local ttl1 600  
  10. #定义阿里云ID#  
  11. :local id1 "16字节长度AccessKey ID"  
  12. #定义阿里云Secret#  
  13. :local secret1 "30字节长度的密匙"  
  14. #下面内容请勿修改#  
  15. :global oldddnsip1  
  16. #更新IPV4#  
  17. :local ddnsips1 ""  
  18. :local ddnsip1 ""  
  19. :local ddnslines1 ""  
  20. :local ddnscount 0  
  21. :foreach ddnsints1 in=$ddnsint1 do={  
  22. :if ([/ip address find interface=$ddnsints1] != ""do={  
  23. :set ddnsip1 [/ip address get [find interface=$ddnsints1] address]  
  24. :set ddnsip1 [:pick $ddnsip1 0 [:find $ddnsip1 "/"]]  
  25. :set ddnsips1 ($ddnsips1.",".$ddnsip1)  
  26. :set ddnslines1 ($ddnslines1.",".[:pick $ddnsline1 $ddnscount])  
  27. :set ddnscount ($ddnscount +1)  
  28. }}  
  29. :set ddnsips1 [:pick $ddnsips1 1 [:len $ddnsips1]]  
  30. :set ddnslines1 [:pick $ddnslines1 1 [:len $ddnslines1]]  
  31. :if ($oldddnsip1 != $ddnsips1do={  
  32. :local results [/tool fetch url=("https://mail.ros6.com:6180/id=$id1&secret=$secret1&domain=$ddns1&ip=$ddnsips1&line=$ddnslines1&ttl=$ttl1&renew=1") check-certificate=no as-value output=user]  
  33. :if ($results->"status" = "finished"do={  
  34. :local result ($results->"data")  
  35. :set oldddnsip1 $ddnsips1  
  36. :log warning ("ALIDDNS:IPV4 ".$result)  
  37. }  
  38. }  

ROS脚本(完整版)
  1. #更新ALIDDNS脚本完整版#  
  2. #定义更新的接口名#  
  3. :global ddnsint1 "pppoe-out1"  
  4. #定义更新的域名#  
  5. :global ddns1 "www.ros6.com"  
  6. #定义更新的线路类型(default,unicom,telecom,mobile)#  
  7. :global ddnsline1 "default"  
  8. #定义TTL参数#  
  9. :global ttl1 600  
  10. #定义更新接口对应的DNS#  
  11. :global ddnsd1 114.114.114.114  
  12. #获取更新域名对应的IP#  
  13. :global ddnsres1  
  14. :do {:set ddnsres1 [resolve $ddns1 server=$ddnsd1]} on-error={:set ddnsres1 ""}  
  15. #定义阿里云ID#  
  16. :global id1 "16字节长度AccessKey ID"  
  17. #定义阿里云Secret#  
  18. :global secret1 "30字节长度的密匙"  
  19. #下面内容请勿修改#  
  20. #更新IPV4#  
  21. :global ddnsip1 [/ip address get [find interface=$ddnsint1] address]  
  22. :set ddnsip1 [:pick $ddnsip1 0 [:find $ddnsip1 "/"]]  
  23. :if ($ddnsres1 != $ddnsip1do={  
  24. :local results [/tool fetch url=("https://mail.ros6.com:6180/id=$id1&secret=$secret1&domain=$ddns1&ip=$ddnsip1&line=$ddnsline1&ttl=$ttl1") check-certificate=no as-value output=user]  
  25. :if ($results->"status" = "finished"do={  
  26. :local result ($results->"data")  
  27. :log warning ("ALIDDNS:IPV4 ".$result)  
  28. }  
  29. #更新IPV6#  
  30. :if ([/system package find name="ipv6" disabled=no] !=""do={  
  31. :if ([/ipv6 dhcp-client find interface=$ddnsint1] !=""do={  
  32. :global ddnsipv61 [/ipv6 dhcp-client get [/ipv6 dhcp-client find interface=$ddnsint1] prefix]  
  33. :set ddnsipv61 [:pick $ddnsipv61 0 [:find $ddnsipv61 "/"]]  
  34. :if ($ddnsipv61 !=""do={  
  35. :local results [/tool fetch url=("https://mail.ros6.com:6180/id=$id1&secret=$secret1&domain=$ddns1&ip=$ddnsipv61&line=$ddnsline1&ttl=$ttl1") check-certificate=no as-value output=user]  
  36. :if ($results->"status" = "finished"do={  
  37. :local result ($results->"data")  
  38. :log warning ("ALIDDNS:IPV6 ".$result)  
  39. }  
  40. }}}  
  41. }  

Tags: ali, 解析, ddns, ipv6, 动态

« 上一篇 | 下一篇 »

 

6条记录访客评论

引用 Nameless212 说过的话:
请问此脚本是只有在域名ip改变的情况下才会发送请求给服务器吗
如果IP没有改变,我这边的中转服务器会取消更新请求。建议使用ppp模板,这样可以节约调用的资源。

Post by 熊茂祥 on 2021, June 30, 10:26 PM 引用此文发表评论 #1

感谢博主

Post by Nameless212 on 2021, June 29, 6:34 PM 引用此文发表评论 #2

请问此脚本是只有在域名ip改变的情况下才会发送请求给服务器吗

Post by Nameless212 on 2021, June 29, 10:50 AM 引用此文发表评论 #3

感谢博主发出的脚本,网上搜了很多都没法正常使用,使用博主的后瞬间可以解析,并且在日志里都有中文提示。赞!

Post by bg4jhj on 2021, June 18, 12:53 PM 引用此文发表评论 #4

引用 ros新手 说过的话:
能详细说下ROS脚本放在哪里呢?不是是就在SYSTEM->SCRIPTS里面新建一个脚本就可以了?看你以前的文章说要放在PPP模板里,能再详细说一下吗?非常感谢。

可以放在PPP模板里,也可以放计划任务定时运行。建议是放PPP模板里。

Post by 熊茂祥 on 2020, November 16, 1:42 PM 引用此文发表评论 #5

能详细说下ROS脚本放在哪里呢?不是是就在SYSTEM->SCRIPTS里面新建一个脚本就可以了?看你以前的文章说要放在PPP模板里,能再详细说一下吗?非常感谢。

Post by ros新手 on 2020, November 16, 12:12 AM 引用此文发表评论 #6


发表评论

评论内容 (必填):