使用 IPv6 地址而不是 IPv4 的 NTP

使用 IPv6 地址而不是 IPv4 的 NTP

我有一台运行 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

相关内容