脚本

:delay 30s
/tool fetch http-method=post mode=https url="https://dnsapi.cn/Record.Ddns"  keep-result=yes dst-path=ddns.txt http-data="请替换这里"

使用方法

  • 使用dnspod管理界面随便添加一条A记录
  • 使用dnspod个人中心的“秘钥管理”中添加一个秘钥并将生成的id和token保存起来
  • 使用https://dnsapi.cn/Record.List这个官方接口先查询需要更新的域名的record_id,使用postman 添加post请求,在body里面使用from-data编辑请求数据,创建login_token format domain 三个参数,其中login_token为之前秘钥管理创建的id,token,format填写json,domain填写你的域名例如rinvay.cc,send一下,就可以得到你想要的数据返回。
  • 在数据返回中找到你刚刚添加到域名例如:test.rinvay.cc那么返回参数中name就是test,就找test的id,记录下来,现在我们得到了更新接口所需要的全部参数。
  • DDNS更新接口https://dnsapi.cn/Record.Ddns需要参数是login_token=“上一步使用到的参数”&format=json&domain=“你的域名”&record_id=“上一步保存下来的ID”&sub_domain=“需要更新的name”&record_line_id=0
  • 完整的参数例子:login_token=1000000,500000000000000000000&format=json&domain=rinvay.co&record_id=404972730&sub_domain=test&record_line_id=0
  • 将组装好的这一段参数写到postman里面测试一下,首先填写上一步的接口,选择post请求,然后body采用raw,把组装好的参数丢进去,再然后在在headers中创建一个Content-Type参数为application/x-www-form-urlencoded,send一下试试,看看返回里面存在"Action completed successful"表示更新成功
  • 刷新一下你的DdnPod就可以看到IP地址已经被更新为你的IP地址了
  • 现在在ROS中使用Wxinbox,打开ppp/profiles,点击添加name命名为例需要更新的名称或者你自定义,scripts里面填写文章开头的脚本,替换内容为上文中的拼凑好的参数,保存
  • 然后点击interface找到你的拨号连接,在dial out中的profile选择你刚刚命名的脚本例如:test.rinvay.co
  • 尝试断开拨号重新拨号,重新获取一次IP,在30S后,dnspod将会被刷新,同时files中会出现一个ddns.txt的文件,拖出来查看可以得到上面postman演示中的返回信息,提示更新成功,大功告成

有感而发

  • 有人肯定会问,网上有很多脚本可以一步到位实现,为什么我还要用这样的方式呢?
  • 脚本是可以实现,但是我们要知道其中的原理的核心在什么地方,这是一篇关于DDNS脚本的推导视频,旨在记录脚本更新DDNS的方法同时也记录一个思路
  • 大多数人的帖子是给大家一个脚本使用计划任务实现,而我这个方式核心是使用拨号时候直接实现,这样延迟低一点,当然了没有什么优劣之分,感谢那些大神们的付出才有这么多脚本可以给我们小白使用

后续关于ROS的计划

  • 单线多播PCC负载均衡
  • 多线静态地址接入同网段下的负载均衡
  • 阿里云DDNS解析及PHP源代码以及自建解析接口
  • L2TP构建畅通内网
  • 简单防火墙
  • 也许会鸽很久,敬请期待