在bash中使用DNSPod的API接口实现DDNS客户端
- 2012-03-12更新
判断DNSPOD API返回值为空的情况,这种情况每天会出现2-3次,这种情况不退出程序,而是继续等待; - 2012-03-11更新
- 调整了部分正则表达式的写法;
- 增加了错误判断功能。
- 2012-03-10 更新
支持多域名多记录。- 多域名使用数组定义,每个元素代表一个域名的一组要更新的子记录;
- 仅支持A记录的更新,因为其他类型的记录可能有重名的情况出现;
- 每一组记录,以空格分隔域名和子域名;
- 第一个空格前为主域名,后面用空格分离多个子域名;
- 如果使用泛域名,必须用
\*
转义。
以下为要更新的域名范例:
1domainList[0]='domain1.com \* @'
2domainList[1]='domain2.com www subdomain1 subdomain2'
使用方法:
- 配置domainList数组,详细内容见上方;
- 配置delay的值,多长时间检测一次ip变化,单位是秒。
我一直想买购买 github 的付费服务,但7美刀的价格算起来比一个月的电费(下面有计算)还要贵许多。因此决定使用DDNS来实现自己的git服务器。
设备和网络的情况是这样的:
- 10M电信光纤网络;
- 使用2008年购买的HP mini-note 2133做服务器;
- 操作系统为ArchLinux。
服务器情况如下:
- VIA C7-M 1.5G单核;
- DDR2 667 2G内存;
- 5400RPM 160GB硬盘;
- 实测功耗20W,月耗电约7-8元,比7美刀要便宜多了;
- 不但可以架设git服务器,还可以客串http、ftp、mysql……。
电信的光纤网络也是使用PPPOE拨号,但电信似乎有连接过长时间后自动断线的功能,所以希望用拨号后不下线的方式实现”伪固定IP“是不现实的,必须使用DDNS来实现解析。
原来我一直用老牌的 花生壳 来实现DDNS,花生壳集成在TP-link路由器中,使用起来还算方便。但花生壳的web界面的体验和功能比 DNSPod差了太多,且有各种各样的限制,让人非常的不爽。
DNSPod提供了全功能的API ,完全可以使用它来实现DDNS。于是乎,我使用初学的bash,来实现了这样一个DDNS客户端。
我实现的思路是这样的:
- 访问DNSPod的API,获得要实现DDNS的域名的当前对应ip;
- 访问一个外部网站,获取本机的外网ip;
- 比较外网ip和DNSPod保存的ip,若不相同,就更新DNSPod上的ip地址;
- 每5分钟重复2-3。
注意事项:
- DNSPod在检测到5分钟内登录错误30次后,会禁用该账号的登录。所以必须在每次调用API的时候,都检测返回代码;
- 不要过多的调用DNSPod的API,尽量使用缓存。
将dnspodsh复制到/usr/bin下,并在/etc/rc.local中加入下面一行即可实现你自己的免费DDNS:
1/usr/bin/dnspodsh dnspod_name dnspod_passwaord &>/dev/null
如果遇到错误,可以查看/var/log/dnspodsh.log。
dnspodsh下载:https://gist.github.com/1822396
- 文章ID:1524
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/dnspod-client-write-by-bash/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。