动态域名系统
根据 Wikipedia
- 该术语用于描述两个不同的概念。第一个是“动态 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。
可以通过运行带有 -noquiet 和 -debug 选项的 ddclient 来测试配置
# ddclient -daemon=0 -noquiet -debug
下面列出了一些兼容的服务,但您也可以查看 示例 和 协议 以获取更多信息。
| 服务 | 配置说明 |
|---|---|
| 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 等工具自动化该过程。