OpenWrt Hotplug脚本 + Dnspod api 实现ms级延迟的DDNS记录更新

一般的话,实现DDNS就是直接使用openwrt的DDNS插件

这里介绍一个更简便快速的方法

OpenWrt中的Hotplug脚本

Hotplug,直译就是热插拔。在OpenWrt中,无论何时一个设备从系统中增删,都产生一个“热插拔事件”。

每次网络接口启动(up)或者关闭(down)的时候,所有在/etc/hotplug.d/iface/目录中的脚本都会以字母顺序执行。根据一个不成文的规则,会在每个脚本的前面加上一个数字前缀来设置正确的运行顺序。这就是为什么脚本名称都像:/etc/hotplug.d/iface/nn-scriptname的原因。

在iface hotplug脚本中有三个主要的环境变量:

变量名称描述
ACTION“ifup” 或者 “ifdown”
INTERFACE网络接口的名称,如”wan”
DEVICE物理设备的名称,如”br-lan”

利用hotplug脚本可以在网络接口启动或关闭时执行相应的动作

Dnspod api

更新动态DNS记录

接口地址:

  • https://dnsapi.cn/Record.Ddns

HTTP请求方式:

  • POST

请求参数:

  • 公共参数

  • domain_id 或 domain, 分别对应域名ID和域名, 提交其中一个即可

  • record_id 记录ID,必选

  • sub_domain 主机记录,如 www

  • record_line 记录线路,通过API记录线路获得,中文,比如:默认,必选

  • record_line_id 线路的ID,通过API记录线路获得,英文字符串,比如:‘10=1’ 【record_line 和 record_line_id 二者传其一即可,系统优先取 record_line_id】

  • value IP地址,例如:6.6.6.6,可选

响应代码:……

注意事项:

  • 如果1小时之内,提交了超过5次没有任何变动的记录修改请求,该记录会被系统锁定1小时,不允许再次修改,所以在开发和测试的过程中,请自行处理IP变动,仅在本地IP发生变动的情况下才调用本接口。

  • 如何理解没有任何变动的记录修改请求?比如原记录值已经是 1.1.1.1,新的请求还要求修改为 1.1.1.1。

如此,利用上两项就可以实现ms级延迟的DDNS记录更新

/etc/hotplug.d/iface下新建30-dnspod.sh,内容如下

#!/bin/sh
# wan ifup
if [ $ACTION = "ifup" -a $INTERFACE = "wan" ]
then
    wget -q -O - --post-data="login_token=36797,805e5d4cfecebe40eeafc7758590ace2&format=json&domain_id=60560160&record_id=317740618&record_line_id=0&sub_domain=home"  https://dnsapi.cn/Record.Ddns --no-check-certificate  > /dev/null
fi

domain_id和record_id可以使用官方的客户端或使用域名api获取

dnspod ddns api可以不带ip数据,他会获取你的访问ip,如此正确设置好参数和post数据后,每次wan口打开就会执行脚本下的语句,实现A记录更新

openwrt下的wegt不能验证dnspod的证书,所以要加上--no-check-certificate参数


本文章由作者:佐须之男 整理编辑,原文地址: OpenWrt Hotplug脚本 + Dnspod api 实现ms级延迟的DDNS记录更新
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐