原文: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