我注意到这一点已经有一段时间了,但对我来说从来没有任何意义:
为什么ntpd
需要监听这么多地址?
例如,一台 Debian 机器:
$ 网络统计 Proto Local Address Foreign Address 程序名称 udp 0.0.0.0:123 0.0.0.0:* ntpd udp 127.0.0.1:123 0.0.0.0:* ntpd udp [局域网]:123 0.0.0.0:* ntpd udp [IPv4]:123 0.0.0.0:* ntpd udp6 :::123 :::* ntpd udp6 ::1:123 :::* ntpd udp6 [链接本地] :::* ntpd udp6 [IPv6] :::* ntpd
此(编辑过的)netstat
列表显示nptd
了对 IPv4 和 IPv6 的广播、本地、LAN 和全局地址的侦听。
为何ntpd
如此滥交?
它一点也不滥交。它只是绑定到 ipv4 和 ipv6 协议上的接口 IP 地址和本地主机。如果你认为它不应该听其中的一些,只需
listen
按照手册中的说明更改配置(这可能适用于你正在使用的不同版本):在其他一些版本中,您需要更改
ntpd
守护程序本身的选项以更改要侦听的协议/接口(选项如-4
,-6
,-I
)从我对这个页面的阅读来看,ntp 似乎并没有完全使用 INADDR_ANY
0.0.0.0
地址,部分原因是出于安全原因,部分原因是出于身份验证原因。第一个端口 123,低于 1024,因此被认为是特权端口,只有 root 可以绑定到该端口。Ntp 通常设置为在启动后放弃特权。据我从邮件列表和文章中了解到,一旦权限被删除,就无法打开套接字以从正确的源端口 123 进行回复,因此 ntp 在删除权限之前为每个分配的地址打开套接字。
据我了解,ntp 的一些身份验证机制基本上要求源端口和目标端口为 123,仅此而已。
这件事还不完全清楚。请参阅有关通配符地址
0.0.0.0
的部分,它出于某种原因由 ntpd 打开,但从评论来看,实际不应使用,除非在某些特殊的罕见情况下可能会出现,开发人员并不完全确定,但是,他们不不想取下插座,以防它们损坏东西。我认为您问题的主要答案在上面的评论中。