写了个脚本在 openwrt 上使用 DNSPod 的动态域名

2015-07-28 11:27:24 +08:00
 mind3x
OpenWRT的ddns更新都是通过发HTTP GET请求,在URL里嵌入账号和域名信息,例如 http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]

而DNSPod的API基于HTTP POST,不能直接在openwrt上配置。虽然已经有很多现成的第三方实现,可以定时检查IP并调用DNSPod API来更新域名记录,但我还是希望能利用OpenWRT内建的ddns支持,这样WAN重连时域名能立刻更新。

所以写了个简单的脚本 https://gist.github.com/rlei/93a46b8b2c55fd67ad0e

使用步骤:

1. 确认已经在DNSPod上你的域名下面建好了要用作动态域名的子域名
2. 路由上用opkg安装python和python-openssl
3. 将上面的脚本保存到路由上,确认 chmod +x
4. 编辑脚本,提供你自己的DNSPod账号及域名信息 (注意 SUB_DOMAIN 只写二级域名,不包含主域名)
5. 在路由上试运行dnspod-ddns.py,如果账号和域名信息正确,假设你的DOMAIN是suchwow.com,SUB_DOMAIN是doge,应该有如下输出:

DNSPod account: your@email
Domain: "http://suchwow.com" id 104xyzabc
Sub domain: "doge.suchwow.com" id 11xyzabcde

Sat Jul 25 12:28:51 2015 Server Starts - 0.0.0.0:2080

6. 用浏览器或curl访问 http://你的路由IP:2080,应该有类似如下输出:
{"status":{"code":"1","message":"Action completed successful","created_at":"2015-07-25 12:34:44"},"record":{"id": 11xyzabcde,"name":"doge","value":"your.public.ip.addr"}}
这表示动态域名已经成功更新。
7. 在路由上^C中止脚本,改用 dnspod-ddns.py & 放到后台运行
8. 修改/etc/rc.local (也可以在LuCI里改),在exit 0前加入一行:
/path/to/dnspod-ddns.py &

9. 在LuCI里配置Dynamic DNS,Service选--Custom--,Update URL写http://localhost:2080,Save & Apply即可。
892 次点击
所在节点    OpenWrt
3 条回复
LazyZhu
2015-07-28 12:02:38 +08:00
有shell版,lua版
bianzhifu
2015-07-28 14:44:43 +08:00
@mind3x 给你一个成熟的lua版本 不需要安装python wan重连可以更新
https://github.com/rssnsj/network-feeds/tree/master/dnspod-utils
mind3x
2015-07-28 15:29:33 +08:00
@bianzhifu 现有的实现我基本上找过一圈,自己写的原因是想利用已有的openwrt ddns,在LuCI里直接配置,而不是自己去做hotplug

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/208851

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX