/dnspod-ddns

DDNS Script for [DNSPod](https://www.dnspod.cn/)

Primary LanguagePythonMIT LicenseMIT

DNSPod 配置 DDNS

使用方式

准备脚本

$ git clone git@github.com:jameszhan/dnspod-ddns.git
$ cd dnspod-ddns/

Bash实现

本脚本执行依赖于Python2 或 Python3

$ cp dnspod_ddns.sh /opt/bin/dnspod_ddns
$ sudo chmod +x /opt/bin/dnspod_ddns

Ruby实现

本脚本执行依赖于Ruby

$ gem install faraday
$ cp dnspod_ddns.rb /opt/bin/dnspod_ddns
$ sudo chmod +x /opt/bin/dnspod_ddns

Python实现

本脚本执行依赖于Python3

$ pip3 install requests
$ cp dnspod_ddns.py /opt/bin/dnspod_ddns
$ sudo chmod +x /opt/bin/dnspod_ddns

测试脚本

$ export DNSPOD_LOGIN_TOKEN=id,token
$ export DNSPOD_DOMAIN=your.domain.com
$ export DNSPOD_SUB_DOMAIN=@
$ /opt/bin/dnspod_ddns

也可以通过命令行方式指定参数

$ export DNSPOD_LOGIN_TOKEN=id,token
$ export DNSPOD_DOMAIN=your.domain.com
$ /opt/bin/dnspod_ddns '*'
$ export DNSPOD_LOGIN_TOKEN=id,token
$ /opt/bin/dnspod_ddns '*' 'yourdomain.com'
/opt/bin/dnspod_ddns '*' 'yourdomain.com' 'id,token'

配置定时任务

简单配置

$ crontab -e

进入编辑器,添加如下内容,每10分钟执行一次同步任务

*/10 * * * * /opt/bin/dnspod_ddns '@' 'yourdomain.com' 'id,token' > /dev/null

使用环境变量

如果要使用系统环境变量,可以把如下配置加入到/etc/environment

DNSPOD_LOGIN_TOKEN=id,token
DNSPOD_DOMAIN=your.domain.com
DNSPOD_SUB_DOMAIN=@
*/10 * * * * /opt/bin/dnspod_ddns > /dev/null

也可以直接把依赖的环境变量,配置在cron配置文件当中

DNSPOD_LOGIN_TOKEN=id,token
DNSPOD_DOMAIN=your.domain.com
DNSPOD_SUB_DOMAIN=@
*/10 * * * * /opt/bin/dnspod_ddns > /dev/null

同时配置多个任务

DNSPOD_LOGIN_TOKEN=id,token
DNSPOD_DOMAIN=your.domain.com
*/10 * * * * /opt/bin/dnspod_ddns '@' > /dev/null
*/10 * * * * /opt/bin/dnspod_ddns '*' > /dev/null

启用cron日志

$ sudo vim /etc/rsyslog.d/50-default.conf

去掉cron前面的注释(#)。

$ sudo systemctl restart rsyslog

检查cron进程状态和任务配置

$ sudo systemctl restart cron

$ sudo service cron status
#
$ sudo systemctl status cron

$ crontab -l

任务脚本工作详解

使用SHELL模拟脚本工作流程

$ export DNSPOD_LOGIN_TOKEN=id,token

# 查询目标DNS记录详情
$ curl -X POST https://dnsapi.cn/Record.List \
    -H "User-Agent: DNSPod-DDNS/1.0.0" \
    -d "login_token=${DNSPOD_LOGIN_TOKEN}&format=json&domain=zizhizhan.com&record_type=A&sub_domain=@" \
    | python3 -m json.tool

# 获取目标DNS记录ID
$ curl -X POST https://dnsapi.cn/Record.List \
    -H "User-Agent: DNSPod-DDNS/1.0.0" \
    -d "login_token=${DNSPOD_LOGIN_TOKEN}&format=json&domain=zizhizhan.com&record_type=A&sub_domain=@" \
    | python3 -c "import sys,json; ret=json.load(sys.stdin); print(ret.get('records', [{}])[0].get('id', ''))"

# 同步本地外网IP到DNSPod
$ curl -X POST https://dnsapi.cn/Record.Modify \
    -H "User-Agent: DNSPod-DDNS/1.0.0" \
    -d "login_token=${DNSPOD_LOGIN_TOKEN}&format=json&record_id=548361017&value=8.8.8.8&domain=zizhizhan.com&sub_domain=@&record_type=A&record_line=默认"

查询本机外网IP

$ telnet ns1.dnspod.net 6666
$ curl -i http://myip.ipip.net/
$ curl -i http://www.httpbin.org/ip
$ curl -i http://whatismyip.akamai.com
$ curl -i http://ipecho.net/plain
$ curl -i http://myip.dnsomatic.com