跳转至内容

动态域名系统

来自 ArchWiki

根据 维基百科

动态 DNS (DDNSDynDNS) 是一种自动更新 域名系统 (DNS) 中 名称服务器 的方法,通常是实时地将其配置的主机名、地址或其他信息更新为当前的 DDNS 配置。
该术语被用于描述两个不同的概念。第一种是“动态 DNS 更新”,指的是用于在无需手动编辑的情况下更新传统 DNS 记录的系统。这些机制在 RFC 2136 中有阐述,并使用 TSIG 机制来提供安全性。第二种动态 DNS 允许轻量级且即时的更新,通常使用更新客户端,并不使用 RFC2136 标准来更新 DNS 记录。这些客户端为经常更改位置、配置或 IP 地址 的设备提供了一种持久的寻址方法。

对于 RFC2136,可以使用来自 bindnsupdate(1)。对于动态 DNS 服务,有多个可用的软件包,请参阅 #更新客户端

路由器

如果需要 DDNS 的设备位于路由器后面,您应该首先检查路由器本身是否能更新任何 DDNS 服务。虽然可选的服务可能有限,但使用路由器有几个优点:设置可能更简单,几乎不需要维护,且没有停机时间(如果路由器宕机,您无论如何都无法连接互联网)。

更新客户端

请注意,某些动态 DNS 提供商不需要专用客户端,可以通过 cURL 进行更新。

多服务客户端

  • ddclient — 为许多动态 DNS 服务的账户更新动态 DNS 条目。
https://github.com/ddclient/ddclient || ddclient
  • inadyn — 支持 SSL/TLS 的动态 DNS 客户端。
https://troglobit.com/projects/inadyn/ || inadynAUR
  • inadyn-mt — 一个基于 inadyn 的小型简单动态 DNS 客户端。
https://inadyn-mt.sourceforge.net/ || inadyn-mtAUR
  • ndyndns — 支持 DynDNS 和 Namecheap。
https://github.com/niklata/ndyndns || ndyndnsAUR

单服务客户端

  • duckdns — 通过 systemd 在计算机上更新您的 DuckDNS.org 条目。
https://www.duckdns.org/ || duckdnsAUR, duckdns-ipv6AUR
  • hetzner_ddns — 用于 Hetzner DNS 的动态 DNS 守护进程
https://github.com/filiparag/hetzner_ddns || hetzner_ddnsAUR
  • noip — 用于 no-ip.com 服务的动态 DNS 客户端更新程序。
https://www.no-ip.com/downloads.php?page=linux || noipAUR

ddclient

ddclient 与许多 DDNS 服务兼容,如果您不能使用 路由器,它是推荐的 DDNS 更新工具。它包含对 systemd 的支持。

安装后,编辑配置文件 /etc/ddclient/ddclient.conf 来设置您的 DDNS 提供商(文件中包含许多示例)。然后 启用启动 ddclient.service

可以通过在前台运行 ddclient 来测试配置

# ddclient --foreground --debug --verbose

下面列出了一些兼容的服务,但您也可以查看 示例协议 以获取更多信息。

ddclient 兼容服务
服务 配置注意事项
Now-DNS 示例
ChangeIP 示例
Duck DNS 示例
FreeDNS 示例
No-IP 使用协议 noip,服务器 dynupdate.no-ip.com
nsupdate.info 使用协议 dyndns2
Dyn DNS 示例
Namecheap 示例
Dynu 示例
注意 no-ip 的免费用户需要每 30 天手动确认其域名。不过,增强版用户不需要确认域名。更多信息请参阅 为什么我的主机名处于待删除状态?

使用外部网站确定 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,您可以使用 cronsystemd/Timers 等工具将该过程自动化。

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.