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重连时域名能立刻更新。
所以写了个简单的脚本
使用步骤:
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即可。