时间同步(NTP)Timed out及解决方法
背景
买了一台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优先的,首次链接即可同步时间。
至此,并没有彻底解决这个问题,但是解决了时间同步失败的问题。