将主机用作ntp-client和lxc-router作为ntp-server

我在我的Debian主机上安装了ntpd,以保持硬件RTC“最新”。 通过共享系统时钟,时间会自动传播到所有安装的容器(lxc)。 其中一个容器运行我的路由器。

我想用这个路由器把时间传播给我的networking中所有感兴趣的设备,所以他们不需要自己的互联网连接。 我不想使用主机作为服务器(希望由interface ignore all禁用)。

如何在一个容器中安装和configuration一个纯粹的ntp-server,将系统的时钟作为唯一的参考? 它永远不会自行设置时钟。

我如何安装和configuration一个纯粹的ntp客户端,它不接受来自其他对等方的传入连接,并泄漏尽可能less的信息?

只需添加本地时钟作为服务器,并禁用所有的服务器。 忽略优先级,所以如果有人把你的主机作为服务器,他们不认为你正在运行,primefaces钟。 这是我用于我的服务器的configuration:

 # Fallback to local clock if all else fails server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10 

为了防止服务时间使用限制条款。

 restrict 192.168.0.0 mask 255.255.0.0 notrap nomodify nopeer noserve 

文档位于ntp.org 。

NTP的configuration偏离了我所说的直观。 它默认安装一个读写系统时钟的客户端, 开始监听所有的接口和网桥, 急切地使用它们来提供关于其状态的信息,而不需要validation。

我很难收集所有的信息和文件来获得这个(希望)是正确的。 即使是默认的configuration文件也包含几个不包含在man-pages中的语句。

下面的configuration似乎工作正常,没有提供过多的信息和服务。

这是要在主机上安装以强制执行仅客户端操作的configuration:

 >> my-host:/etc/ntp.conf # stop listening for incoming connections an all interfaces including 0.0.0.0 and [::] interface ignore all interface ignore wildcard # only allow listening on the interface used to contact the time servers interface listen 10.2.20.2 # your pools or servers pool 0.debian.pool.ntp.org iburst pool 1.debian.pool.ntp.org iburst pool 2.debian.pool.ntp.org iburst pool 3.debian.pool.ntp.org iburst # by default drop all incoming connections on all interfaces restrict default ignore # unrestriced control for local connections restrict 127.0.0.1 restrict ::1 # Needed for adding pool entries restrict source notrap nomodify noquery 

重新启动服务给了我们一个可以理解的监听套接字列表。 ( my-host:ntp无法避免,因为NTPd的工作方式。)

 my-host:# netstat -a|grep ntp udp 0 0 my-host:ntp 0.0.0.0:* udp 0 0 localhost:ntp 0.0.0.0:* udp6 0 0 localhost:ntp [::]:* 

这是要安装在路由器容器上的configuration,以强制执行纯服务器操作(由系统的时钟作为时间源支持,感谢@BillThor):

 >> router:/etc/ntp.conf # don't update the system's clock disable kernel # local clock as preferred and only source server 127.127.1.0 prefer # stop listening for incoming connections an all interfaces including 0.0.0.0 and [::] interface ignore all interface ignore wildcard # whitelist addresses to listen on for NTP clients interface listen 10.1.2.1 interface listen 10.2.2.2 interface listen 10.3.2.3 interface listen 10.4.2.4 interface listen 10.5.2.5 # set "serve" as the only permission given to all listening interfaces per default restrict default kod notrap nomodify nopeer noquery limited # unrestriced control for local connections restrict 127.0.0.1 restrict ::1 # broadcast time (optional) broadcast 10.1.255.255 broadcast 10.2.255.255 broadcast 10.3.255.255 broadcast 10.4.255.255 broadcast 10.5.255.255 

重新启动服务会使我们将本地时钟作为首选源,并提供一个(可选)广播目标列表

 router:# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *LOCAL(0) .LOCL. 5 l 16 64 3 0.000 0.000 0.000 10.1.255.255 .BCST. 16 B - 64 0 0.000 0.000 0.000 10.2.255.255 .BCST. 16 B - 64 0 0.000 0.000 0.000 10.3.255.255 .BCST. 16 B - 64 0 0.000 0.000 0.000 10.4.255.255 .BCST. 16 B - 64 0 0.000 0.000 0.000 10.5.255.255 .BCST. 16 B - 64 0 0.000 0.000 0.000 

…以及用于服务本地networking的可听的套接字列表。

 router:# netstat -a|grep ntp udp 0 0 router-lan5:ntp 0.0.0.0:* udp 0 0 router-lan4:ntp 0.0.0.0:* udp 0 0 router-lan3:ntp 0.0.0.0:* udp 0 0 router-lan2:ntp 0.0.0.0:* udp 0 0 router-lan1:ntp 0.0.0.0:* udp 0 0 localhost:ntp 0.0.0.0:* udp6 0 0 localhost:ntp [::]:* 

disable kernel (感谢@PaulGear)禁止守护进程设置典型容器内不允许的系统时钟。 否则,它将洪泛日志:

 ntpd[1568]: adj_systime: Operation not permitted 

在启动时仍然有一些无害的故障,我不知道如何摆脱:

 ntpd[1568]: start_kern_loop: ntp_loopfilter.c line 1119: ntp_adjtime: Operation not permitted ntpd[1568]: set_freq: ntp_loopfilter.c line 1082: ntp_adjtime: Operation not permitted