2024-01-10

配置 Cloudflare 的动态域名

因为之前将域名管理切换到了 Cloudflare,导致之前配置的 Namecheap 的动态域名失效。但是,需要远程访问本地的服务器仍然需要配置一个动态域名,今天研究了一下配置办法,记录如下。

添加 NS Record

Cloudflare 的动态域名叫做 DDNS,我以为在域名的 DNS 配置页面中,添加一条记录后可以选择新记录类型为 DDNS,找了一圈发现并没有这个选项,而在 Cloudflare 的文档中也没有说明这个 DDNS 在哪里可以找到。后来想想,也许 Cloudflare 把所有动态修改的 DNS都叫做 DDNS。

于是我添加了一条A类记录,输入了子名称加上了一条随意的 IP 地址,反正之后会被自动修改掉。要注意的是 Proxy 状态要取消,因为 Cloudflare 的 Proxy 不会把 SSH 的流量转发,所以如果该条记录需要被 Proxy 的话,那么 SSH 登录将无法找到正确的服务器。

配置客户端

原来一直使用 DDClient 来更新 Namecheap 的动态域名,这次我也想继续用回 DDClient,在 DDClient 的 Github 页面上查找它是支持 Cloudflare 的,但是好像是要通过 Cloudflare 的 API 来实现,于是还需要创建一个 API token。

找到 Cloudflare 的域名的管理页面,可以在 Overview 里的右下角看到 Get your API token 的字样,点进去可以生成对应的 API token。要注意这个 API token 的权限需要包含有 Edit zone DNS。

DDClient 配置更新 Cloudflare 的 DDNS 的方法在网上找到了一篇署名为 David Schlachter 的人写的一篇文章 Configure DDClient for Cloudflare Dynamic DNS,这篇文章同时提到 DDClient 3.9.1 及其以下的版本都不支持 Cloudflare API Token。于是我查了一下我的服务器上的版本,正好是 3.9.1。好吧,我去 github.com 上找到了最新的 DDClient 3.11.2

在安装新版本的 DDClient 前要记得把系统里的 DDClient 删除掉。DDClient 的配置安装和一般的 Linux 开源项目一样,直接命令窗口执行:

1
./autogen && ./configure && make && sudo make install

在上文提到的文章中,有一个配置的范本,我拷贝到下方,注意修改 password 里的内容为上面提到的新生成的 API token 字符串。还有域名也需要做出对应的修改,其它的保持不变。

1
2
3
4
5
6
7
8
9
10
11
12
13
daemon=300 # check every 300 seconds
syslog=yes # log update msgs to syslog
pid=/var/run/ddclient.pid # record PID in file
ssl=yes # use TLS
use=web # get IP with website below
web='https://cloudflare.com/cdn-cgi/trace'
web-skip='ip=' # IP address above is after 'ip='

protocol=cloudflare, \
zone=mydomain.tld, \
ttl=1,
password='cloudflare-api-token',
mydomain.tld,subdomain.mydomain.tld

将 DDClient 加到自动启动组

  1. 执行命令先将原来的 DDClient 的启动项目清除:
1
sudo systemd unmask ddclient.service
  1. 编辑 DDClient 工程目录下的 sample-etc_systemd.service,将其中的执行路径修改成/usr/local/bin/ddclient,然后将这个文件拷贝至 /etc/systemd/system 目录下。

**注意,在 ddclient.service 这个文件里有一行内容为 PIDFile=/run/ddclient.pid,需要改为 PIDFile=/var/run/ddclient.pid,因为上面的配置中,DDClient 的 PID 文件写入的路径和默认的 systemd 的配置中指向的位置不同。

  1. 执行下方命令添加 DDClient 到系统启动组中,然后启动 DDClient。
1
sudo systemctl enable ddclient.service && sudo systemctl start ddclient.service
  1. 使用ps aux | grep ddclient来检查 DDClient 的进程是否被正确启动。

  2. DDClient 的执行结果可以通过下方命令查看文件 ddclient.cache 获得。

1
cat /usr/local/var/cache/ddclient/ddclient.cache
  1. 或者使用命令 journalctl -xn 来查看系统日志来了解 DDClient 的运行情况。

安全

如果暴露内部服务器的 ssh 服务,要记得把端口在路由上修改成为 22 以外的数字,然后禁止使用密码登录。否则会有大量的 ssh 攻击者会通过枚举 ssh 的登录密码来尝试登录。

MATTHEW
桂ICP备17005075号