RouterOS 利用 DNSPod 的API接口实现DDNS解析
ROS-----RouterOS 利用 DNSPod 的API接口实现DDNS解析
https://www.dnspod.cn/
===========================================
如果你家里的宽带有动态公网IP,就可以注册一个域名,通过DDNS功能把你的动态公网IP绑定到你的域名下,就可以通过域名来访问你家里的服务了,相当于家里的电脑就是一台云服务器。使用DDNS动态更新域名的IP,可以避免通过IP访问,IP变动后服务不可用的情况。
免费的域名又长,又不好记!还容易被杀毒软件等拦截、查杀;
还是自己 注册一个域名 来的方便,遇到活动一年才几块钱。
测试路由器的版本为:6.47(从RouterOS v6.43开始,可以将fetch命令的结果保存到变量中。低于v6.43版的可以用将fetch命令的结果保存到文件中的用法,自己改对应的语句。)
RouterOS 利用 DNSPod 的API接口实现DDNS解析
注意事项:首先到DNSPod官网添加需要动态解析域名的A记录,并选择“默认”路线,防止域名不存在,动态更新不成功!
生成 Token 号;参考网址:https://support.dnspod.cn/Kb/showarticle/tsid/227/
务必注意上图信息中的 ID 和 Token,需要用这两个字段来组合成一个完整的 Token,
组合方式为:"ID,Token"(用英文半角逗号分割),比如说本示例中,完整的 Token 为:
13490,6b5976c68aba5b14a0558b77c17c3932 。得到完整的 Token 之后,调用方式如下
通过winbox连接到ros,依次点击System→Scripts,点击➕号添加一个ddns脚本,填写一个名字,脚本填写在最下方空白格里,其他选项不用调整
dnspod-ddns脚本
修改脚本里以下四个参数成你自己的
1、pppoe参数填写ros里拨号上网的那个interface的name
2、token参数里的id,token两个值从DNSPOD平台获取,创建token参考密钥管理 - DNSPod 服务与支持
3、域名domain参数填写你的域名地址
4、子域名subdomain参数填写你要更新的域名前缀,如www,@等
#PPPoE :local pppoe "yourpppoe" #DNSPOD token :local token "id,token" #域名 :local domain "example.com" #子域名 :local subdomain "www" #dname不要动 :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") }
填写完成后保存,脚本就建好了,下面还需要创建一个定时调度任务,定时的去执行我们的ddns脚本,保证ip能及时更新 。点击System→Scheduler→➕加号,创建定时任务
Name随便起一个,interval参数是定时任务执行间隔,建议填写【00:01:00】,为一分钟执行一次,最下方空白处填写上我们刚才创建的脚本的名称,点击确定,这样定时任务就创建好了。
可以通过log查看定时任务的执行情况
你觉得文章内容怎么样