服务语言环境: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这样的顶级域名。
- #更新ALIDDNS脚本精简版#
- #定义更新的域名#
- :global ddns1 "www.ros6.com"
- #定义阿里云ID#
- :global id1 "16字节长度AccessKey ID"
- #定义阿里云Secret#
- :global secret1 "30字节长度的密匙"
- #下面内容请勿修改#
- #更新IPV4#
- :local results [/tool fetch url=("https://mail.ros6.com:6180/id=$id1&secret=$secret1&domain=$ddns1") check-certificate=no as-value output=user]
- :if ($results->"status" = "finished") do={
- :local result ($results->"data")
- :log warning $result
- }
- #更新ALIDDNS负载均衡#
- #定义更新的接口名#
- :local ddnsint1 pppoe-out1,pppoe-out2
- #定义更新的域名#
- :local ddns1 "ddns.ros6.com"
- #定义更新的线路类型(default,unicom,telecom,mobile)#
- :local ddnsline1 default,default
- #定义TTL参数#
- :local ttl1 600
- #定义阿里云ID#
- :local id1 "16字节长度AccessKey ID"
- #定义阿里云Secret#
- :local secret1 "30字节长度的密匙"
- #下面内容请勿修改#
- :global oldddnsip1
- #更新IPV4#
- :local ddnsips1 ""
- :local ddnsip1 ""
- :local ddnslines1 ""
- :local ddnscount 0
- :foreach ddnsints1 in=$ddnsint1 do={
- :if ([/ip address find interface=$ddnsints1] != "") do={
- :set ddnsip1 [/ip address get [find interface=$ddnsints1] address]
- :set ddnsip1 [:pick $ddnsip1 0 [:find $ddnsip1 "/"]]
- :set ddnsips1 ($ddnsips1.",".$ddnsip1)
- :set ddnslines1 ($ddnslines1.",".[:pick $ddnsline1 $ddnscount])
- :set ddnscount ($ddnscount +1)
- }}
- :set ddnsips1 [:pick $ddnsips1 1 [:len $ddnsips1]]
- :set ddnslines1 [:pick $ddnslines1 1 [:len $ddnslines1]]
- :if ($oldddnsip1 != $ddnsips1) do={
- :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]
- :if ($results->"status" = "finished") do={
- :local result ($results->"data")
- :set oldddnsip1 $ddnsips1
- :log warning ("ALIDDNS:IPV4 ".$result)
- }
- }
- #更新ALIDDNS脚本完整版#
- #定义更新的接口名#
- :global ddnsint1 "pppoe-out1"
- #定义更新的域名#
- :global ddns1 "www.ros6.com"
- #定义更新的线路类型(default,unicom,telecom,mobile)#
- :global ddnsline1 "default"
- #定义TTL参数#
- :global ttl1 600
- #定义更新接口对应的DNS#
- :global ddnsd1 114.114.114.114
- #获取更新域名对应的IP#
- :global ddnsres1
- :do {:set ddnsres1 [resolve $ddns1 server=$ddnsd1]} on-error={:set ddnsres1 ""}
- #定义阿里云ID#
- :global id1 "16字节长度AccessKey ID"
- #定义阿里云Secret#
- :global secret1 "30字节长度的密匙"
- #下面内容请勿修改#
- #更新IPV4#
- :global ddnsip1 [/ip address get [find interface=$ddnsint1] address]
- :set ddnsip1 [:pick $ddnsip1 0 [:find $ddnsip1 "/"]]
- :if ($ddnsres1 != $ddnsip1) do={
- :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]
- :if ($results->"status" = "finished") do={
- :local result ($results->"data")
- :log warning ("ALIDDNS:IPV4 ".$result)
- }
- #更新IPV6#
- :if ([/system package find name="ipv6" disabled=no] !="") do={
- :if ([/ipv6 dhcp-client find interface=$ddnsint1] !="") do={
- :global ddnsipv61 [/ipv6 dhcp-client get [/ipv6 dhcp-client find interface=$ddnsint1] prefix]
- :set ddnsipv61 [:pick $ddnsipv61 0 [:find $ddnsipv61 "/"]]
- :if ($ddnsipv61 !="") do={
- :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]
- :if ($results->"status" = "finished") do={
- :local result ($results->"data")
- :log warning ("ALIDDNS:IPV6 ".$result)
- }
- }}}
- }