为什么 ntpd 监听这么多端口/地址?

Abr*_*egh 18 linux debian ntp ntpd

我已经注意到这一点一段时间了,对我来说从来没有任何意义:

为什么ntpd需要监听这么多地址?

例如,一台 Debian 机器:

$ netstat
原始本地地址外地址程序名称
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这么滥交?

cor*_*ump 17

它根本不是混杂的。它只是在 ipv4 和 ipv6 协议上绑定到接口 IP 地址和本地主机。如果您认为它不应该听其中的一些,只需listen按照手册中的说明更改配置(这可能适用于您正在使用的不同版本):

 listen on address
         Specify a local IP address or a hostname the ntpd(8) daemon
         should listen on. If it appears multiple times, ntpd(8) will
         listen on each given address. If the exact string '*' is given as
         an address, ntpd(8) will listen on all local addresses. Other-
         wise, address can be followed by an asterisk ('*') and a UDP port
         number to listen on instead of the default 123. ntpd(8) does not
         listen on any address by default. For example:

               listen on *
               listen on 127.0.0.1
               listen on ::1
Run Code Online (Sandbox Code Playgroud)

在其他一些版本中,您需要更改ntpd守护程序本身的选项以更改要侦听的协议/接口(选项如-4, -6, -I


Zor*_*che 15

从我对本页的阅读来看,ntp 似乎不完全使用 INADDR_ANY0.0.0.0地址,部分是出于安全原因,部分是出于身份验证原因。

第一个端口 123,低于 1024,因此被认为是特权端口,只有 root 可以绑定到该端口。Ntp 通常设置为在启动后删除权限。根据我从邮件列表中了解到的情况,并且文章一旦删除权限就无法打开套接字以从正确的源端口 123 进行回复,因此 ntp 在删除权限之前为每个分配的地址打开套接字。

从我读过的一些 ntp 身份验证机制来看,基本上要求源端口和目标端口为 123,仅此而已。

事情并不完全清楚。请参阅有关通配符地址 的部分0.0.0.0,由于某种原因,它被 ntpd 打开,但从评论来看,实际上永远不应使用,除非在某些特殊的罕见情况下可能,开发人员并不完全确定,但是,他们不不想拆下插座,以防万一他们弄坏了东西。

请注意,通常 ntpd 不应该接受通配符地址上的数据包,因为如果这样做会出现许多问题,包括在与发件人请求的地址不同的地址上发送返回数据包。DannyMayer - 2009 年 4 月 27 日

我认为您的问题的主要答案在此处的上述评论中。