使用命令ntpdate查询 ntp 服务器时,我可以使用-u参数使源端口成为不受限制的端口(端口 1024 及以上)。
使用旨在在后台运行的 ntpd,我似乎找不到打开此选项的方法。所以源端口总是123。我的防火墙配置非常糟糕。
ntp.conf中是否有配置选项使其使用随机源端口?
听起来这不可能……请参阅ntp 故障排除页面:
如果要运行 ntpd,则需要修复网络/防火墙/NAT,以便 ntpd 可以在两个方向上完全不受限制地访问 UDP 端口 123。
如果这不可能,您可能需要在防火墙本身上运行 ntpd,以便它可以在两个方向上完全不受限制地访问 UDP 端口 123,然后让它为您的内部客户端提供时间。
如果这不可能,您唯一的其他选择可能是购买必要的硬件以连接到您自己的一台或多台计算机并运行您自己的 Stratum 1 时间服务器或购买预包装的 Stratum 1 时间服务器。
我设法通过用 OpenNTPD 替换官方 NTPD 来解决这个问题。虽然官方NTPD 固定为UDP 端口123,但OpenNTPD 使用非特权端口。
我以前遇到过这个问题,找不到解决方案。我最终只是在 crontab 中添加了一个每小时运行一次 ntpdate 的条目。这为我所做的任何事情提供了足够好的分辨率,因为我的时钟每小时漂移不超过 1 秒。
您可以在运行 ntpd 的主机上使用源 NAT 将 123 源端口替换为 1024 以上的端口号。
您不能更改 NTP 端口,但可以添加 iptables cmd 以通过 VPN 端口重定向它。
详情: http: //openvpn.net/archive/openvpn-users/2007-11/msg00223.html
正如@Andy_Whitfield 所写, ntpd 不能这样做。但也有OpenNTPD和Chrony等替代方案。AFAIK,Android 也使用 Chrony。
在我的设置中,我使用 chrony。它使用非特权端口来询问远程服务器。这种技术有更多的机会通过 NAT。顺便说一下,它也是ntpdate -q
用于查询服务器的相同机制,但仅在作为非特权用户调用时。
我认为,它有时不起作用的主要问题是许多路由器自己实现了 NTP 来设置其内部时钟。在这些设备上,端口正在使用中,因此无法进行 NAT。如果设备不响应 NTP 查询,甚至可能会出现这种情况。