Ubuntu

如何在 ubuntu 上設置沒有 Internet 訪問的本地 ntp 伺服器?

  • June 24, 2021

我已經嘗試了幾個關於如何在 ubuntu 上設置本地 ntp 伺服器的指南,但似乎沒有一個可以正常工作。由於某種原因,我的伺服器在時間上嚴重漂移,我必須保持它們的時間緊密相連,因為我執行需要這個的數據庫。

  • 我有 8 個 ubuntu 14.04 LTS 伺服器,沒有一個可以訪問網際網路
  • 我想在一個(或多個,如果更好的話)伺服器上執行一個 ntp 伺服器,並讓所有其他伺服器連接到 ntp 伺服器來設置時間

目前,我的伺服器(ip .24)執行這個/etc/ntp.conf:

server 127.127.1.0 prefer
fudge  127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
broadcastdelay 0.008

# Give localhost full access rights
restrict 127.0.0.1

# Give machines on our network access to query us
restrict 192.168.178.0 mask 255.255.255.0 nomodify notrap

broadcast 192.168.178.0

在“客戶”上:

# Point to our network's master time server
server 192.168.178.24 iburst
fudge 192.168.178.24  stratum 10

restrict default ignore
restrict ::1
restrict 127.0.0.1
restrict 192.168.178.24 mask 255.255.255.255 nomodify notrap noquery

driftfile /var/lib/ntp/drift

minpoll 4
maxpoll 5

注意:我使用 Multi-Tabbed Putty 將以下命令同時發送到所有 ntp 客戶端。 我已經停止了除伺服器之外的所有 ntp 服務,用於sudo ntpdate 192.168.178.24讓他們獲取日期並隨後重新啟動 ntp 服務。這成功了。命令完成後,所有伺服器都直接顯示相同的日期。然而,大約 10 分鐘後,我的伺服器顯示以下時間:

Fr 30. Sep 11:16:53 CEST 2016
Fr 30. Sep 11:15:33 CEST 2016 (server .24) 
Fr 30. Sep 11:16:50 CEST 2016
Fr 30. Sep 11:15:33 CEST 2016
Fr 30. Sep 11:17:05 CEST 2016
Fr 30. Sep 11:15:33 CEST 2016
Fr 30. Sep 11:15:33 CEST 2016
Fr 30. Sep 11:15:33 CEST 2016

如何讓它們正確同步到 ntp 伺服器?我怎樣才能降低輪詢時間?看起來我的伺服器快不同步了,所以我需要它們再次檢索“正確”的時間……

“正確”時間是指所有伺服器都相同的時間。它不一定需要是完全正確的世界時間(如果你這樣稱呼它)。


編輯:我已經嘗試了建議的配置設置。據我了解,這就是我的伺服器/客戶端配置的樣子。與此同時,我發現我的 .24 伺服器實際上正在走向更糟糕的時期。**.20 伺服器是最準確的伺服器,我現在使用 .20 伺服器來託管 ntp 伺服器。**對困惑感到抱歉。

伺服器配置:

# Use the local clock
server 127.127.1.0 prefer
fudge  127.127.1.0
driftfile /var/lib/ntp/drift
broadcastdelay 0.008

# Give localhost full access rights
restrict default

# Give machines on our network access to query us
restrict 192.168.178.0 mask 255.255.255.0 nomodify notrap

broadcast 192.168.178.0

對於客戶:

# Point to our network's master time server
server 192.168.178.20 iburst

restrict default

driftfile /var/lib/ntp/drift

minpoll 4
maxpoll 5

伺服器上的 ntpq -as 和 ntpq -pe:

ntpq -c as
ind assid status  conf reach auth condition  last_event cnt
===========================================================
 1 41906  963a   yes   yes  none  sys.peer    sys_peer  3
 2 41907  8811   yes  none  none    reject    mobilize  1

ntpq -c pe
    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*LOCAL(0)        .LOCL.           5 l   60   64  377    0.000    0.000   0.000
192.168.178.0   .BCST.          16 u    -   64    0    0.000    0.000   0.000

類似這樣的輸出的五倍(這些伺服器隨時間漂移):

ntpq -c as
ind assid status  conf reach auth condition  last_event cnt
===========================================================
 1 62104  9024   yes   yes  none    reject   reachable  2


ntpq -c pe
    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
hadoop20.xx LOCAL(0)         6 u   27   64  377    0.151  63591.8 33407.0

對於兩個(最有可能?)工作客戶:

ntpq -c as
ind assid status  conf reach auth condition  last_event cnt
===========================================================
 1  7757  963a   yes   yes  none  sys.peer    sys_peer  3

ntpq -c pe
    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*hadoop20.xx LOCAL(0)         6 u   18   64  377    0.183    7.883   3.015

編輯2:

我已在所有客戶端上使用sudo service ntp stop, sudo ntpdate 192.168.178.20, 等待 ntpdate 完成。sudo service ntp start仍然只有 2 個成功的客戶和 5 個拒絕的客戶。

拒絕客戶端顯示此輸出。delay+值看起來很高,因為失敗的客戶端會隨著offset時間漂移。也許他們不相信伺服器會更新時間,因為延遲/偏移量太高了?

ntpq -c as
ind assid status  conf reach auth condition  last_event cnt
===========================================================
 1 20981  905a   yes   yes  none    reject    sys_peer  5

ntpq -c pe
    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
hadoop20.xx LOCAL(0)         6 u   34   64    3    0.166  18665.9 16201.3

我也嘗試過使用這個https://askubuntu.com/a/256004答案,它工作了大約 30 秒,然後狀態再次變為“拒絕”!對ntpdate -s 192.168.178.20. 這很可能與 ntp 客戶端拒絕伺服器的時間有關。有沒有辦法強迫他們改變時間?

不要這樣做。嚴重地。只是不要。人們不斷提出這樣的想法,即 NTP 旨在讓一堆機器都擁有相同的時間。它不是。它的設計非常謹慎,允許許多機器都擁有最接近正確時間的東西,這不是一回事。

如果您可以訪問一個視窗,您可以花大約 50 英鎊建造一個半像樣的第 1 層伺服器,或者花 100 英鎊建造一個不錯的伺服器。你會更好地建構類似的東西,然後將其他客戶指向它。正確的時間戳比僅僅自洽的時間戳要好得多,尤其是對於取證而言。

但是如果你絕對必須做你正在做的事情,那麼你需要意識到你在扭曲 ntpd,這將意味著理解你在做什麼。

在伺服器上

server 127.127.1.0 prefer
fudge  127.127.1.0 stratum 10

意思是“使用本地無紀律的時鐘,就好像它是權威的一樣”,這就是你想要的。不過,我不確定您為什麼要強迫它進入第 10 層;考慮刪除stratum 10, 並讓驅動程序提供其預設層 0。在客戶端上

server 192.168.178.24 iburst
fudge 192.168.178.24  stratum 10

完全沒有意義。 fudge 127.127.x.y保留用於強制使用各種本地時鐘驅動程序。給它任何其他地址是沒有意義的。從客戶端刪除fudge線路,並將它們指向伺服器。您還使用了封閉網路,因此請放棄所有安全性內容,直到您可以正常工作:

restrict default

如果這似乎仍然不起作用,我們需要在至少十分鐘的不間斷執行之後查看伺服器和行為不良的客戶端ntpq -c as的輸出。ntpq -c pe

編輯:您在下面的評論中寫道“我認為偏移/抖動非常高,因為失敗的客戶端會及時漂移”。

我想你可能是對的。 這個小伙子的部落格表明他有同樣的經歷:客戶端時鐘非常糟糕,以至於它欺騙了本地人ntpd認為伺服器不可靠。他寫了

巨大抖動的原因終於清楚了!我們的時鐘漂移如此之快,以至於通過我們的幾次測量,偏移量將上升幾秒鐘

鑑於您的客戶的時間過得最快而無法同步(將伺服器標記為“拒絕”),我認為您會看到相同的效果。他的解決方案是使用adjtimex手動調整核心時鐘(調整tick值)直到系統時鐘不那麼任性,此時 ntpd 有機會辨識伺服器正常,並與之同步。您可能應該首先在最差的客戶端上嘗試一下,看看它是否有幫助。

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