Debian

使用主機作為 ntp-client 和 lxc-router 作為 ntp-server

  • October 22, 2017

我在我的 Debian 主機上安裝了 ntpd 以使硬體 RTC 保持“最新”狀態。通過共享系統時鐘,時間會自動傳播到所有已安裝的容器 (lxc)。其中一個容器執行我的路由器。

我想用這個路由器將它的時間傳播到我網路中所有感興趣的設備,所以它們自己不需要網際網路連接。我不想將主機用作伺服器(希望被禁用interface ignore all)。

如何在容器中安裝和配置純 ntp-server,它以系統時鐘為唯一參考?它永遠不會自己設置時鐘。

如何安裝和配置一個純 ntp 客戶端,它不接受來自其他對等方的傳入連接並洩漏盡可能少的資訊?

NTP 的配置與我所說的直覺不同。預設情況下,它會安裝一個客戶端,該客戶端讀取和寫入系統時鐘開始偵聽所有介面和網橋*,並*急切地使用它們來提供有關其狀態的資訊而無需身份驗證。

我很難收集所有資訊和文件來(希望)正確地做到這一點。甚至預設配置文件也包含一些手冊頁未涵蓋的語句。

在不提供過多資訊和服務的情況下,以下配置似乎可以正常工作。

這是要安裝在主機上以強制執行僅客戶端操作的配置:

>> 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 [::]:*

這是要安裝在路由器容器上以強制執行僅伺服器操作的配置(由系統時鐘作為時間源支持,感謝@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

…以及為本地網路提供服務的可理解的偵聽套接字列表。

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

引用自:https://serverfault.com/questions/879164