动态 DNS
根据维基百科
- 该术语用于描述两个不同的概念。第一个是“动态 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 等工具自动化该过程。