找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 7385|回复: 12

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

[复制链接]
本帖最后由 lonb427 于 2017-12-9 10:11 编辑


一般的话,实现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记录
接口地址: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,内容如下
  1. #!/bin/sh
  2. # wan ifup
  3. [ $ACTION = "ifup" -a $INTERFACE = "wan" ]
  4. wget --post-data="login_email=USER@MAIL.COM&login_password=YOUR_PASSWORD&format=json&domain_id=12345678&record_id=987654321&record_line=默认&sub_domain=what"  https://dnsapi.cn/Record.Ddns --no-check-certificate --output-document=/dev/null
复制代码


domain_id和record_id可以使用官方的客户端或使用域名api获取.dnspod ddns api可以不带ip数据,他会获取你的访问ip,正确设置好参数和post数据后,每次wan口打开就会执行脚本下的语句,实现A记录更新。


下面是在webshell中执行返回的结果,因为wegt不能验证dnspod的证书,所以要加上--no-check-certificate参数。




转贴者注:
可以使用login_token代替login_email和login_password,使用token鉴权更安全

我的恩山、我的无线 The best wifi forum is right here.
能再给个阿里的吗??

求打包好 DNSPOD和阿里DDNS
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

单独的命令可以成功更新.
我运行脚本无法更新什么原因?
反馈输出对比
成功
Length: 160 [text/html]
Saving to: '/dev/null'

/dev/null           100%[===================>]     160  --.-KB/s    in 0s

2016-11-25 11:12:50 (6.02 MB/s) - '/dev/null' saved [160/160]

失败
Length: unspecified [text/html]
Saving to: '/dev/null\r'

              [ <=>                ]      91  --.-KB/s    in 0s

2016-11-25 11:05:30 (1.66 MB/s) - '/dev/null\r' saved [91]

点评

试试用login_token代替login_email和login_password,我是用token更新的  详情 回复 发表于 2016-11-25 18:36
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 lonb427 于 2016-11-25 18:39 编辑
▓尐〖孩孒】 发表于 2016-11-25 11:15
单独的命令可以成功更新.
我运行脚本无法更新什么原因?
反馈输出对比

试试用login_token代替login_email和login_password,我是用token更新的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

点评

你试试 sh /etc/hotplug.d/iface/97-dnspod 返回什么值,贴出来我看看,还有你是什么机器啥固件?  详情 回复 发表于 2016-11-27 10:00
一样的,我token跟Email都试过,放在脚本里都不行,用命令都OK  详情 回复 发表于 2016-11-27 09:28
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
Mark.........
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

lonb427 发表于 2016-11-25 18:36
试试用login_token代替login_email和login_password,我是用token更新的

一样的,我token跟Email都试过,放在脚本里都不行,用命令都OK
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

lonb427 发表于 2016-11-25 18:36
试试用login_token代替login_email和login_password,我是用token更新的

你试试 sh /etc/hotplug.d/iface/97-dnspod
返回什么值,贴出来我看看,还有你是什么机器啥固件?

点评

文件里还有判断条件的,只有wan启动的时候才会执行命令,你直接执行命令能更新就行了  详情 回复 发表于 2016-12-9 18:40
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
▓尐〖孩孒】 发表于 2016-11-27 10:00
你试试 sh /etc/hotplug.d/iface/97-dnspod
返回什么值,贴出来我看看,还有你是什么机器啥固件?

文件里还有判断条件的,只有wan启动的时候才会执行命令,你直接执行命令能更新就行了

点评

搞定了,去掉中文就OK了  详情 回复 发表于 2016-12-10 14:10
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

lonb427 发表于 2016-12-9 18:40
文件里还有判断条件的,只有wan启动的时候才会执行命令,你直接执行命令能更新就行了

搞定了,去掉中文就OK了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

感谢分享,学习!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

这样并没有十分巧妙。反而隐含地把ip更新事件和wan口的状态变化绑定起来了。这意味着这样的绑定已经暗含了一个假设,那就是所有的路由器都是用的时候开,不用的时候关的。而实际情况是,大多数的路由器都是一旦打开,除非停电,一直运行。而无论是否一级路由,当ip发生变更时,wan口的状态也不会先down再up。把这两个时机关联在一起本身就很勉强,这只涵盖了ip变更场景中很小的一部分。这就是为什么许多ddns提供商的帮助文档和示例中都用crontab来运行ip更新的原因。虽然把检测频率提高可以降低ip更新的延迟,会略微增加一些系统负载,但整体来看,这样的开销非常非常小。而且相比于ip更新后整个dns系统那缓慢的刷新速度,这点延迟根本不能改变任何体验。当然,把ddns供应商的dns server设为首选dns服务器可以缓解这个问题,但一般情况下这不是个好主意,你最后还是会用114这样的server。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

为什么都喜欢用Dnspod 阿里云
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-28 06:16

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表