原文:http://maoyuanrun.com/2015/10/05/openwrt-ddns-dnspod/
在OpenWrt Chaos Calmer之前,其原生的 ddns-scripts 并不支持 DNSPod 的域名解析服务,很多方案都是要安装 sddns 以提供支持。但从 CC 15.05 开始,ddns-scripts 加入了 update_script 这一选项,这让我们得以通过编写脚本使其支持DNSPod的服务。
获取域名和记录ID
首先,需要给OpenWrt安装cURL:
$ sudo opkg update
$ sudo opkg install curl
然后前往 DNSPod 的后台创建一个login_token,并通过 DNSPod 的 API 获取域名列表 和 记录列表 分别取得域名ID(DOMAIN_ID)和记录ID(RECORD_ID),记下这两个ID,相关请求如下:
# 获取域名ID curl -X POST https://dnsapi.cn/Domain.List -d 'login_token=LOGIN_TOKEN&format=json' # 获取记录ID curl -X POST https://dnsapi.cn/Record.List -d 'login_token=LOGIN_TOKEN&format=json&domain_id=DOMAIN_ID'
若提示类似下面的错误
curl: (77) Error reading ca cert path /etc/ssl/certs - PolarSSL: (-0x2900) X509 - Read/write of file failed
可以试着安装ca-certificates后重试
opkg install ca-certificates
新建一个脚本文件,例如 update_script.sh,放入root目录,脚本内容大致如下:
#!/bin/sh IP=$(ifconfig pppoe-wan | awk '/inet addr/{print substr($2,6)}') URL='https://dnsapi.cn/Record.Modify' LOGIN_TOKEN='13490,6b5976c68aba5b14a0558b77c17c3932' DOMAIN_ID='2317346' # 域名ID RECORD_ID='16894439' # 记录ID SUB_DOMAIN='www' # 子域名 RECORD_TYPE='A' # A记录 RECORD_LINE='%e9%bb%98%e8%ae%a4' # 默认 DATA="login_token=${LOGIN_TOKEN}&format=json& domain_id=${DOMAIN_ID}&record_id=${RECORD_ID}& sub_domain=${SUB_DOMAIN}&value=${IP}& record_type=${RECORD_TYPE}&record_line=${RECORD_LINE}" curl -X POST ${URL} -d ${DATA}
在LuCi中添加计划任务,每15分钟更新一次,内容如下:
*/15 * * * * /root/update_script.sh &>/dev/null
SSH验证配置文件是否有效:
./update_dnspod_wdmhsh.sh
注意脚本的编码格式为UTF-8/Unix