我有一台运行 Linux 版本(3.12)的笔记本电脑。我已安装 ntpd 并配置为与 time.google.com 同步。我遇到的问题是,如果我插入仅提供 IPV4 地址的网络,则 ntp 的 dns 使用 ipv6 地址:
root@Node00b01973d6cc:~# ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
127.127.1.0 .LOCL. 10 l 7 64 1 0.000 0.000 0.002
ff0e::101 .MCST. 16 M - 64 0 0.000 0.000 0.002
2001:4860:4806: .INIT. 16 u - 64 0 0.000 0.000 0.000
现在,如果我强制 ntpd 仅使用带 -4 选项的 IPv4 DNS,则一切正常
root@Node00b01973d6cc:~# ntpq -pn 172.16.17.111
remote refid st t when poll reach delay offset jitter
==============================================================================
127.127.1.0 .LOCL. 10 l 60 64 1 0.000 0.000 0.002
216.239.35.12 .GOOG. 1 u 57 64 1 29.278 341.883 0.002
但我不想这样做,因为如果我进入一个只提供 IPv6 地址的网络,这将会失败。如果我的接口实际上有该系列中的 IP 地址,是否可以将 NTP 配置为仅使用 IPv4(或 IPv6)?
ntpd的版本是4.2.8p12。这是 ntp.conf 文件:
tinker panic 0
driftfile /usr/local/etc/ntp.drift
disable auth
# Update the realtime clock and override its default
# stratum of 0.
server time.google.com prefer #Real Time Clock
server 127.127.1.0 #Real Time Clock
server 127.127.1.0 #Real Time Clock
fudge 127.127.1.0 stratum 10
broadcast ff0e::101 iburst ttl 7
我已经找出了发生这种情况的根本原因。我最近在我的系统上禁用了 IPv6 转发。一旦我重新打开 IPv6 转发,NTP 就会按照我的预期开始使用 IPv4 地址。
为什么开启 ipv6 转发会出现这种情况?
默认情况下,系统启动时禁用 IPv6 转发。要打开它,在启动脚本之一中我有以下行:
sysctl -w net.ipv6.conf.all.forwarding=1
答案1
虽然这个问题是 2 年前的问题,但这个话题肯定不是。
根据RFC-3484:IPv6 的默认地址选择 操作系统会自动选择最佳的 IP 地址,即 IPv6 或 IPv4。
如果/etc/gai.conf
未更改并且您的 DNS 工作正常,那么 Linux(和许多其他操作系统)将更喜欢 IPv6 地址,否则它将选择 IPv4,以连接到例如 time.google.com。
您可以使用 来检查getent ahosts time.google.com
。每个软件都应该从顶部开始按顺序尝试该列表中的所有 IP 地址。
你的 Linux 从哪里获得时间服务器?如果是 DHCP,那么您的操作系统无法选择,因为它获得的是 IPv4 IP 地址,而不是 FQDN。 NTP 客户端可能会显示 IP 地址的反向 DNS 主机,而不是实际配置的 NTP 服务器“名称”。
/edit:我在 openSUSE 15.2 和 CentOS 7 上尝试使用 ntpd 4.2.8p15 和 ntpd 4.2.6p5:两个 ntpd 都不遵守 RFC 6742 (3484)。然而 chronyd 确实如此。
/edit2: 如果无法通过 IPv6 访问 NTP 服务器,chronyd (3.4) 似乎需要很长的时间才能使用 v4 地址;也许你自己试试。
答案2
localhost
从主机文件中删除或注释掉 IPv6 :
#::1 localhost6.localdomain6 localhost6