我前面有文章《RouterOS利用DNSPOD的API接口实现DDNS动态解析》写过通过PHP服务器更新DNSPOD解析的域名IP,但是更多的是带来安全问题,所有这次写了一个RouterOS(以下简称ROS)的原生脚本来实现域名的动态解析。
脚本说明:
1. 不存在的记录,不会自动添加,需要手动在DNSPOD添加记录,线路为默认,不支持单记录多线路解析。
2. 只支持IPv4,不支持IPv6
3. 脚本中需要自己修改的信息
pppoe,拨号连接的名称,如pppoe-out1
token,dnspod的token。id和token之间用半角逗号连接(英文状态下的逗号)
domain,域名
subdomain,主机记录
版本更新:
1.0 beta by 2019/11/13
1. 测试版本,有任何问题请留言。
2. 为什么不加自动了添加域名之类的,因为一次添加永久有效,所以脚本中不添加自动了。节省ROS性能(我懒)
脚本代码:
#PPPoE :local pppoe "ADSL-PPPoE" #DNSPOD token :local token "xxxxx,xxxxxxxxxxxxxxxxxxx" #域名 :local domain "myxzy.com" #域名主机名 :local subdomain "www" #以下不是专业人士请不要修改 #domain :local dname ($subdomain.".".$domain) #获取pppoe拨号ip :local ipaddr [/ip address get [/ip address find interface=$pppoe] address] :set ipaddr [:pick $ipaddr 0 ([len $ipaddr] -3)] #获取域名列表 :local record [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$token&format=json&domain=$domain&sub_domain=$subdomain&record_type=A" as-value output=user] #获取id和ip :set record ($record->"data") :set record [:pick $record [:find $record "\"records\":"] [:len $record]] :local recordid [:pick $record ([:find $record "\"id\":\""]+6) [:find $record "\",\"ttl"]] :local recordip [:pick $record ([:find $record "\"value\":\""]+9) [:find $record "\",\"en"]] #更新ip地址 :if ($recordip!=$ipaddr) do={ /tool fetch url="https://dnsapi.cn/Record.Ddns" http-data="login_token=$token&format=json&domain=$domain&sub_domain=$subdomain&record_id=$recordid&record_line_id=0&value=$ipaddr" :log info ("[".$dname."] ip update") } else={ :log info ("[".$dname."] ip not update") }
目前有 29 条评论
tian 2021-02-22 20:1914楼
我也出现了很多错误,应该是版本不对,我ROS6.48评论
星之宇 2021-02-22 20:21
@tian:不行。就http://www.myxzy.com/dnspod-api-php.html回复
游客1032645464 2020-11-05 05:1713楼
大佬,你这脚本在ROS上运行了一下错误好多,本人使用的RB952版本6.40.9评论
游客2045686515 2020-10-08 09:0612楼
最近两天失效了,不知道什么原因 log也没任何消息评论
星之宇 2020-10-08 09:07
@游客2045686515:一般不提供技术支持,因为只要稍微变了点,这个就失效。回复
游客249362100 2020-10-06 16:0511楼
我想问一下这个脚本什么版本的ros适用呢?评论
星之宇 2020-10-06 16:06
@游客249362100:新的应该适用,但是不保证100%能用,能行就能行不能行请自己修改脚本。回复
游客2005316765 2020-06-10 04:1610楼
感谢大神分享,终于解决问题了!用你的代码非常有效用,设置好立马解决问题!评论
游客2005316765 2020-06-10 04:149楼
非常感谢大神,来到你这里真的能学到非常好用的ROS设置,终于解决问题了,成分感谢!评论
游客1903659199 2020-05-29 11:408楼
感谢大佬分享 想知道有没有断网自动重连更换IP的脚本评论
星之宇 2020-05-29 16:00
@游客1903659199:你定时disable pppoe再enable就好了。回复
游客1786140984 2020-05-19 15:317楼
想问一下大佬,aliyun有没有类似的原生方案呢评论
星之宇 2020-05-19 15:32
@游客1786140984:没有,ros的脚本本来就弱。回复
游客1786140984 2020-05-19 21:38
@星之宇:可以理解为,dnspod的API比Aliyun的易用对吧回复
星之宇 2020-05-20 07:14
@游客1786140984:是的,主要是鉴权方面回复
游客2936750170 2020-03-13 03:226楼
:local record [/tool fetch url="https://dnsapi.cn/Record.List" http-data="login_token=$token&format=json&domain=$domain&sub_domain=$subdomain&record_type=A" as-value output=user]
这条语句在ROS5.25里报错评论
星之宇 2020-03-13 05:12
@游客2936750170:因为不支持ROS5.25,要支持5.25请自己修改脚本。回复
游客2936750170 2020-03-12 23:515楼
大神,我看了之前你那篇,现在又看到这篇,有个地方请教一下:
假设我的域名是text.top,前面没有www,是不是直接用一个“@”来表示?
我确实不知道这个记录名应该填什么,麻烦大神告知一下评论
星之宇 2020-03-13 05:11
@游客2936750170:是@回复
游客659363151 2020-02-23 20:474楼
大佬你好,用了这个脚本成功解析了域名,但是现在有个问题就是并不会自动更新ip呀,每次地址变化之后都需要手动再运行一次脚本,有什么解决办法么评论
星之宇 2020-02-23 20:49
@游客659363151:加到scheduler即可。设置时间间隔为1分钟。回复
游客659363151 2020-02-23 21:03
@星之宇:好的嘞,感谢感谢回复
游客1780842390 2020-01-09 12:393楼
大佬,请问有支持IPv6的脚本吗评论
星之宇 2020-01-09 13:56
@游客1780842390:IPv6原生的没制作,可以使用我制作的第三方的dns解析来实现。回复
游客3027407672 2019-11-24 20:482楼
谢谢大神,问题解决了,不过代码还有待改进,期待大神代码开源,进一步学习谢谢!评论
星之宇 2019-11-24 20:48
@游客3027407672:这个已经开源啊,你可以看到github的连接。回复
游客3027407672 2019-11-24 20:51
@星之宇:哦,已经开源了啊,好的,马上去看下,看到大神之前的ros脚本后我找到了我脚本里面的错误。回复
游客3027407672 2019-11-24 20:171楼
大神您好,根据你的ros脚本思路,我自己补上了php的代码,不过中间遇到个问题,想跟您请教下。
更新ip部分:通过http-data把参数传到服务器后,服务器接收到http-data的参数,您是用什么方法接收的呢?我尝试用$_GET变量来接收,发现该变量只支持网页传输变量,形如http://xxxxx.xxxxx.xxx/xxxx.php?value=192.168.1.1的url在网页中运行是可以实现更新ip,可是在php命令行或者ros脚本中传完参数后,返回要么是参数无效,要么是格式不对。特此请教大神望答复,谢谢。评论
星之宇 2019-11-24 20:18
@游客3027407672:http://www.myxzy.com/dnspod-api-php.html我有接口和代码,你自己去看。回复