因为之前将域名管理切换到了 Cloudflare,导致之前配置的 Namecheap 的动态域名失效。但是,需要远程访问本地的服务器仍然需要配置一个动态域名,今天研究了一下配置办法,记录如下。
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 | daemon=300 # check every 300 seconds |
1 | sudo systemd unmask ddclient.service |
/usr/local/bin/ddclient
,然后将这个文件拷贝至 /etc/systemd/system 目录下。**注意,在 ddclient.service 这个文件里有一行内容为 PIDFile=/run/ddclient.pid
,需要改为 PIDFile=/var/run/ddclient.pid
,因为上面的配置中,DDClient 的 PID 文件写入的路径和默认的 systemd 的配置中指向的位置不同。
1 | sudo systemctl enable ddclient.service && sudo systemctl start ddclient.service |
使用ps aux | grep ddclient
来检查 DDClient 的进程是否被正确启动。
DDClient 的执行结果可以通过下方命令查看文件 ddclient.cache 获得。
1 | cat /usr/local/var/cache/ddclient/ddclient.cache |
journalctl -xn
来查看系统日志来了解 DDClient 的运行情况。如果暴露内部服务器的 ssh 服务,要记得把端口在路由上修改成为 22 以外的数字,然后禁止使用密码登录。否则会有大量的 ssh 攻击者会通过枚举 ssh 的登录密码来尝试登录。