动态域名系统
根据 维基百科
- 该术语被用于描述两个不同的概念。第一种是“动态 DNS 更新”,指的是用于在无需手动编辑的情况下更新传统 DNS 记录的系统。这些机制在 RFC 2136 中有阐述,并使用 TSIG 机制来提供安全性。第二种动态 DNS 允许轻量级且即时的更新,通常使用更新客户端,并不使用 RFC2136 标准来更新 DNS 记录。这些客户端为经常更改位置、配置或 IP 地址 的设备提供了一种持久的寻址方法。
对于 RFC2136,可以使用来自 bind 的 nsupdate(1)。对于动态 DNS 服务,有多个可用的软件包,请参阅 #更新客户端。
路由器
如果需要 DDNS 的设备位于路由器后面,您应该首先检查路由器本身是否能更新任何 DDNS 服务。虽然可选的服务可能有限,但使用路由器有几个优点:设置可能更简单,几乎不需要维护,且没有停机时间(如果路由器宕机,您无论如何都无法连接互联网)。
更新客户端
请注意,某些动态 DNS 提供商不需要专用客户端,可以通过 cURL 进行更新。
多服务客户端
- ddclient — 为许多动态 DNS 服务的账户更新动态 DNS 条目。
- inadyn — 支持 SSL/TLS 的动态 DNS 客户端。
- inadyn-mt — 一个基于 inadyn 的小型简单动态 DNS 客户端。
- ndyndns — 支持 DynDNS 和 Namecheap。
单服务客户端
- duckdns — 通过 systemd 在计算机上更新您的 DuckDNS.org 条目。
- https://www.duckdns.org/ || duckdnsAUR, duckdns-ipv6AUR
- hetzner_ddns — 用于 Hetzner DNS 的动态 DNS 守护进程
- noip — 用于 no-ip.com 服务的动态 DNS 客户端更新程序。
ddclient
ddclient 与许多 DDNS 服务兼容,如果您不能使用 路由器,它是推荐的 DDNS 更新工具。它包含对 systemd 的支持。
安装后,编辑配置文件 /etc/ddclient/ddclient.conf 来设置您的 DDNS 提供商(文件中包含许多示例)。然后 启用 并 启动 ddclient.service。
可以通过在前台运行 ddclient 来测试配置
# ddclient --foreground --debug --verbose
下面列出了一些兼容的服务,但您也可以查看 示例 和 协议 以获取更多信息。
| 服务 | 配置注意事项 |
|---|---|
| Now-DNS | 示例 |
| ChangeIP | 示例 |
| Duck DNS | 示例 |
| FreeDNS | 示例 |
| No-IP | 使用协议 noip,服务器 dynupdate.no-ip.com |
| nsupdate.info | 使用协议 dyndns2 |
| Dyn DNS | 示例 |
| Namecheap | 示例 |
| Dynu | 示例 |
使用外部网站确定 IP 地址
如果 ddclient 无法检测到您的 IP 地址,您可以配置 ddclient 从外部网页(如 checkip.dyndns.org)获取您的 IP。当指定 use=web 时,默认使用此地址。同时建议增加检查间隔,以避免频繁请求 IP 检查服务
/etc/ddclient/ddclient.conf
daemon=900 # obtain IP address from web status page use=web
可以使用 web 键指定备选的 IP 检查服务
/etc/ddclient/ddclient.conf
daemon=900 # obtain IP address from web status page use=web, web=myonlineportal.net/checkip
使用本地脚本确定 IPv6 地址
ddclient 经常获取错误的 IPv6 地址或根本获取不到,但可以通过本地方式而非外部网站来确定 IPv6 地址。可以使用此脚本
/usr/local/bin/get-ip
#!/bin/sh
ip -6 -o addr show scope global | awk -F '[ \t]+|/' '$4 ~ /^[23]/ {print $4}'
将脚本设置为 可执行 并告知 ddclient 使用它
/etc/ddclient/ddclient.conf
# obtain IP address from script usev6=cmdv6,cmdv6='/usr/local/bin/get-ip'
使用 UPnP 或 NAT-PMP 确定外部 IPv4 地址
如果您的路由器支持 UPnP,请 安装 miniupnpc 并使用 external-ip 工具
/etc/ddclient/ddclient.conf
# obtain IP address from script usev4=cmdv4,cmdv4='/usr/bin/external-ip'
对于 NAT-PMP,请安装 libnatpmp 并创建一个包装 natpmpc 输出的脚本。
/usr/local/bin/get-ip
#!/bin/sh natpmpc | grep -oP 'Public IP address : \K\S+'
将脚本设置为 可执行 并告知 ddclient 使用它
/etc/ddclient/ddclient.conf
# obtain IP address from script usev4=cmdv4,cmdv4='/usr/local/bin/get-ip'
其他提供商
其他 DDNS 提供商与 ddclient 不兼容,因此使用它们更新 IP 可能需要专用工具或自定义脚本。请记住,如果该服务允许您使用命令行更新 IP,您可以使用 cron 或 systemd/Timers 等工具将该过程自动化。