记录一次使用 ddclient 进行 DDNS 更新

安装

这里使用的是debian系统,可以直接从apt安装:

sudo apt install ddclient

如果是其他系统,可以在项目README中查找支持状态。

配置

唯一的文档在这里:ddclient -help | less,而且写得很烂,所以下面踩的坑很多,也不保证最终是正确的。

安装时会有初始化配置的GUI,选择你的服务商,随便输入占位值跳过即可。我使用Cloudflare托管域名,接下来也会以此为例。

首先,打开/etc/ddclient.conf文件:

sudo vi /etc/ddclient.conf
# or easier
sudo nano /etc/ddclient.conf

基本配置项

你会看到安装时初始化的内容,下面重点讲解重要的配置项:

理论上可以配置多个protocol,但是我没测试过。

在一个protocol中,同时更新IPv4和IPv6可能会出现错误,至少在Cloudflare的条件下会出现。

验证身份

Cloudflare 支持三种验证方式,具体如下:

# 截取自文档

  ## single host update using a global API key
  protocol=cloudflare,                                         \
  zone=dns.zone,                                               \
  login=my-cloudflare.com-login,                               \
  password=my-cloudflare-global-key                            \
  myhost.com

  ## single host update using an API token
  protocol=cloudflare,                                         \
  zone=dns.zone,                                               \
  login=token,                                                 \
  password=cloudflare-api-token                                \
  myhost.com

  ## multiple host update to the custom DNS service
  protocol=cloudflare,                                         \
  zone=dns.zone,                                               \
  login=my-cloudflare.com-login,                               \
  password=my-cloudflare-global-api-key                        \
  my-toplevel-domain.com,my-other-domain.com

我选择的是第二种,通过API令牌验证。这种方法足以覆盖所有区域(域名),且安全行更强,不推荐使用全局令牌。

可以在管理面板侧边栏> 管理账户(最下方)> 账户API令牌> 创建令牌中申请账户级的令牌,或在此处申请用户级的令牌。

用户是账户的成员,一个账户可以包含多个用户,用户的令牌对其所在的所有账户生效。

两个令牌的申请步骤略有差别,下面分开说明。

账户令牌:点击新建后,在权限策略卡片的右上角,选择Edit zone DNS模板,可以调整以限制特定域名,完成后点击最下方的审核令牌

用户令牌:点击新建后,可以直接看到模板选项,选择编辑区域DNS,根据自身需求调整后一路继续

成功获取到令牌后,在配置文件中填入:

login=token
password=你的令牌

配置域名

ddclient不会帮你创建新的记录,所以使用前需要你手动去创建一个,保持和配置文件中的域名相同,写在protocol块的最后面,只能使用半角逗号,或空行分隔。

完整配置文件示例:

daemon=300
syslog=yes
ssl=yes

usev6=ifv6, ifv6=eth0

protocol=cloudflare
zone=example.com
login=token
password='abcdefg_hijklmn'

@.example.com
*.example.com
sub.example.com

结语

什么,还是报错?

sudo ddclient -file /path/to/config -daemon=0 --foreground -debug -verbose -noquiet

在白天找个时间看看吧,或者出门右转DDNS-GO,注意不要在晚上折腾。

祝好运。