关于ddclient

  • 🧰 ddclient 是一个用 Perl 编写的开源客户端,用来 自动更新动态 DNS 服务商上的 DNS 记录

  • 📡 它适用于公网 IP 经常变化的场景,比如家庭宽带、自建服务器等,让你的域名始终指向当前正确的 IP 。

  • 🔄 支持从多种方式获取当前 IP 地址:例如 Web 服务、网络接口、路由器状态页等。

  • 🌐 它兼容多家 DDNS 服务商和协议,包括 Cloudflare、GoDaddy、NameCheap 等。

  • 🔧 配置灵活,你可以定义更新间隔、日志输出、邮件通知、缓存机制等多种选项。

  • ⚠️ ① 旧版本可能不支持某些服务商的新 API;② 在开始用前需要先创建 DNS 记录,因为 ddclient 默认只更新已存在的记录。

GitHub地址: https://github.com/ddclient/ddclient

官网地址: https://ddclient.net

DockerHub地址: https://hub.docker.com/r/linuxserver/ddclient

配置cloudflare

  • 这里演示的域名服务商是cloudflare, 所以需要先在cloudflare域名中创建一个A记录, 用来DDNS动态更新

创建时, 关闭代理, IP地址可以先随意写一个, 后面会自动更新

image-20251112101618001

配置保存后, 如下

image-20251112101723966

部署ddclient

  • ddclient的部署方式很多, 可以使用系统自带应用, 可以二进制编译安装, 这里只演示一种最方便快捷的部署方式 –docker部署

配置文件准备

docker部署前需要预先准备配置文件, 配置文件根据自己使用的域名服务商来配置, 这里以cloudflare为例(请参考官方示例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
daemon=600                      # 每 300 秒检查一次
ssl=yes # 使用 SSL/TLS

## 通过 Web 状态页获取 IP(如果定义了代理的话也使用代理)
## 默认情况下,如果你使用 dyndns 协议,则会用 checkip.dyndns.org。
## 警告:如果你用 checkip 服务,建议将 daemon 时间设为至少 600 秒,否则可能被服务封禁。
use=web, web=https://ddns.oray.com/checkip, web-skip='IP Address' # 在 “IP Address” 后找到 IP


# CloudFlare (www.cloudflare.com)
protocol=cloudflare,\ # 选择dns服务商
zone=xxxx.top,\ # 你的主域名
ttl=1,\
login=token,\ # 如果你使用 **API Token**,请将其设为 “token”(不含双引号)。
password=_RRxxxxxL-u4njrxxxxxZHhxxxx\ # 这里填写的为:**全局 API Key** 或 **API Token**。
ddclient1.xxxx.top,ddclient2.xxxx.top # 你要更新的域名, 多个用逗号隔开

重点: 这里需要在 Cloudflare 上,生成一个 API 令牌(API Token),令其具有 “Zone → DNS → Edit” 的权限,这样镜像才能修改 DNS 记录

官方要求: 如果你使用的是 API Token,它必须具备权限 “Zone – DNS – Edit” 和 “Zone – Zone – Read”。并且 Zone 资源必须为 “Include – 所有区域”。

配置准备好之后, 保存在/opt/ddclient/config/ddclient.conf

1
2
3
4
5
6
7
8
9
10
11
12
cat /opt/ddclint/config/ddclient.conf 
daemon=600
# ssl=yes
use=web, web=https://ddns.oray.com/checkip, web-skip='IP Address'

# CloudFlare (www.cloudflare.com)
protocol=cloudflare,\
zone=xxxx.top,\
ttl=1,\
login=token, \
password=_RRxxxxxL-u4njrxxxxxZHhxxxx \
ddclient1.xxxx.top,ddclient2.xxxx.top

docker部署

  • 这里使用docker-compose部署

配置文件如下

1
2
3
4
5
6
7
8
9
10
11
services:
ddclient:
image: lscr.io/linuxserver/ddclient:latest
container_name: ddclient
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- /opt/ddclint/config:/config
restart: unless-stopped

部署后启动, 查看日志是否有报错, 如果没有报错, 等待域名更新即可

常见报错:

提示①: cannot set IPv4 to xxx.xxx.xxx.xxx: no ‘A’ record at Cloudflare, 是因为没事先创建A记录

提示②: curl cannot connect to https://checkip.dyndns.org, 公网IP地址解析有问题, 自行更换

常用地址如下, 先浏览器打开测试, 注意配置中的web-skip, 意思是IP地址在什么字符串后面:

1
2
3
4
5
http://checkip.dyndns.org
https://cloudflare.com/cdn-cgi/trace
https://ipinfo.io/ip
https://myip.ipip.net
https://ddns.oray.com/checkip

验证ddclient

ddclient启动后, 会自动更新cloudflare上的域名, 效果如下

image-20251112105456033