背景

买了一台VPS,用于安放博客网站。安装Debian 11系统,使用systemd-timesyncd进行时间同步,即NTP服务。
目前这台VPS是在洛杉矶机房,三网接入AS9929,相比之前的MC机房,要快很多,丢包也几乎没有了,使用体验更加。IP属于 AfriNIC广播到本机上的,host使用 PVE 系统。

现象

在配置系统环境的时候,发现无法从NTP Server获取数据,报错如下:

systemd-timesyncd: Timed out waiting for reply from 162.159.200.1:123 (0.debian.pool.ntp.org).

已经做过的尝试

  • 临时从 HE.NET 隧道 IPv6 ,目前走 IPv6 可以正常链接 NTP Server 进行时间同步。
  • IDC/host 明确没有对网络做过任何限制。
  • 使用 golang 写了手动获取 NTP 数据的程序,在其他 VPS 上正常运行,在此 VPS 上无法正常工作,但能解析 NTPServer 对应的 IP 地址。
  • VPS跑了一个UDP Server,可以通过netcat连接,所以udp/123没有被禁。
  • 使用 netcat 查看 udp 是否能连接外网,发现是正常的,如下。

    nc -vz -u 8.8.8.8 443
    Connection to 8.8.8.8 443 port [udp/https] succeeded!
    nc -vz -u 0.hk.pool.ntp.org 123
    Connection to 0.hk.pool.ntp.org (45.125.1.20) 123 port [udp/ntp] succeeded!

可能的原因

端口和UDP都是正常的,其他表现也没有问题。那么大概率是上游机房设置的防火墙里面,禁止了NTP协议流量的流入。这个是无法解决的问题。

解决方法

使用HE.NET的IPv6隧道广播了一个IPv6地址到VPS上(点击查看教程),在systemd-timesyncd的配置文件/etc/systemd/timesyncd.conf中,将默认的空NTP地址修改为cloudflare的时间同步地址,即time.cloudflare.com

[Time]
NTP=time.cloudflare.com
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

这里改成cloudflare的服务是因为Debian默认的NTP服务地址(0.debian.pool.ntp.org)优先IPv4,会在尝试失败之后再使用IPv6链接。而cloudflare的是IPv6优先的,首次链接即可同步时间。

至此,并没有彻底解决这个问题,但是解决了时间同步失败的问题。

标签: ntp

添加新评论