透過 NTP 進行時鐘同步

tonykorn97發表於2006-12-18
Contributed by Tom Hukins.
25.10.1 縱覽
  隨著時間的推移, 計算機的時鐘會傾向於漂移。 網路時間協議 (NTP) 是一種確保您的時鐘保持準確的方法。

  許多 Internet 服務依賴、 或極大地受益於本地計算機時鐘的準確性。 例如, web 伺服器可能會接收到一個請求, 要求如果檔案在某一時刻之後修改過才傳送它。 在區域網環境中,共享檔案的計算機之間的時鐘是否同步至關重要, 因為這樣才能使時間戳保持一致。 類似 cron(8) 這樣的程式,也依賴於正確的系統時鐘, 才能夠準確地執行操作。

  FreeBSD 附帶了 ntpd(8) NTP 伺服器, 它可以用於查詢其它的 NTP 伺服器,並配置本地計算機的時鐘, 或者為其它機器提供服務。


25.10.2 選擇合適的 NTP 伺服器
  為了同步您的系統時鐘, 需要首先找到至少一個 NTP 伺服器以供使用。 網路管理員, 或 ISP 都可能會提供用於這樣目的的 NTP 伺服器──請檢視他們的文件以瞭解是否是這樣。 另外,也有一個線上的 公開的 NTP 伺服器列表, 您可以從中選一個較近的 NTP 伺服器。 請確認您選擇的伺服器的訪問策略,如果需要的話, 申請一下所需的許可。

  選擇多個相互不連線的 NTP 伺服器是一個好主意, 這樣在某個伺服器不可達,或者時鐘不可靠時就可以有別的選擇。 這是因為, ntpd(8) 會智慧地選擇它收到的響應──它會更傾向於使用可靠的伺服器。

25.10.3 配置您的機器
25.10.3.1 基本配置
  如果只想在系統啟動時同步時鐘, 則可以使用 ntpdate(8)。對於經常重新啟動, 並且不需要經常同步的桌面系統來說這比較適合, 但絕大多數機器都應該執行 ntpd(8)。

  在引導時使用 ntpdate(8) 來配合執行 ntpd(8) 也是一個好主意。 ntpd(8) 漸進地修正時鐘, 而 ntpdate(8) 則直接設定時鐘, 無論機器的當前時間和正確時間有多大的偏差。

  要啟用引導時的 ntpdate(8), 需要把 ntpdate_enable="YES" 加到 /etc/rc.conf 中。 此外, 還需要透過 ntpdate_flags 來設定同步的伺服器和選項, 它們將傳遞給 ntpdate(8)。

25.10.3.2 一般配置
  NTP 是透過 /etc/ntp.conf 檔案來進行配置的, 其格式在 ntp.conf(5) 中進行了描述。 下面是一個例子:

server ntplocal.example.com prefer
server timeserver.example.org
server ntp2a.example.net

driftfile /var/db/ntp.drift
  這裡, server 選項指定了使用哪一個伺服器,每一個伺服器都列為移行。 如果某一臺伺服器上指定了 prefer (偏好) 引數, 如上面的 ntplocal.example.com, 則會優先選擇這個伺服器。如果偏好的伺服器和其他伺服器的響應存在顯著的差別, 則丟棄它的響應,否則將使用來自它的響應, 而不理會其他伺服器。 一般來說, prefer 引數應該標註在非常精確的 NTP 時源, 例如那些包含特殊的時間監控硬體的伺服器上。

  而 driftfile 選項,則指定了用來儲存系統時脈頻率偏差的檔案。 ntpd(8) 程式使用它來自動地補償時鐘的自然漂移, 從而使時鐘即使在切斷了外來時源的情況下,仍能保持相當的準確度。

  另外, driftfile 選項也儲存上一次響應所使用的 NTP 伺服器的資訊。 這個檔案包含了 NTP 的內部資訊, 它不應被任何其他程式修改。

25.10.3.3 控制您的伺服器的訪問
  預設情況下, NTP 伺服器可以被整個 Internet 上的主機訪問。 如果在 /etc/ntp.conf 中指定 restrict 引數,則可以控制允許哪些機器訪問您的伺服器。

  如果希望拒絕所有的機器訪問您的 NTP 伺服器, 只需在 /etc/ntp.conf 中加入:

restrict default ignore
  如果只希望子網內的機器透過您的伺服器同步時鐘, 而不允許它們配置為伺服器,或作為同步時鐘的節點來時用, 則加入

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
  這裡, 需要把 192.168.1.0 改為您網路上的 IP 地址, 並把 255.255.255.0 改為您的子網掩碼。

  /etc/ntp.conf 可能包含多個 restrict 選項。 要了解進一步的細節, 請參見 ntp.conf(5) 的 Access Control Support(訪問控制支援) 小節。

25.10.4 執行 NTP 伺服器
  要讓 NTP 伺服器在系統啟動時隨之開啟, 需要把 ntpd_enable="YES" 加入到 /etc/rc.conf 中。如果希望向 ntpd(8) 傳遞更多引數,需要編輯 /etc/rc.conf 中的 ntpd_flags。

  要在不重新啟動機器的前提下啟動伺服器, 需要手工執行 ntpd, 並帶上 /etc/rc.conf 中的 ntpd_flags 所指定的引數。 例如:

# ntpd -p /var/run/ntpd.pid
25.10.5 在臨時性的 Internet 連線上使用 ntpd
  ntpd(8) 程式的正常工作並不需要永久性的 Internet 連線。 然而,如果您的臨時性連線是配置為按需撥號的, 那麼防止 NTP 通訊頻繁觸發撥號,或保持連線就有必要了。 如果您使用使用者級 PPP, 可以使用 filter 語句, 在 /etc/ppp/ppp.conf 中進行必要的設定。 例如:

set filter dial 0 deny udp src eq 123
# Prevent NTP traffic from initiating dial out
set filter dial 1 permit 0 0
set filter alive 0 deny udp src eq 123
# Prevent incoming NTP traffic from keeping the connection open
set filter alive 1 deny udp dst eq 123
# Prevent outgoing NTP traffic from keeping the connection open
set filter alive 2 permit 0/0 0/0
  要了解進一步的資訊, 請參考 ppp(8) 的 PACKET FILTERING(包過濾) 小節, 以及 /usr/share/examples/ppp/ 中的例子。

注意: 某些 Internet 訪問提供商會阻止低編號的埠, 這會導致 NTP 無法正常工作,因為響應無法到達您的機器。

25.10.6 進一步的資訊
  關於 NTP 伺服器的文件, 可以在 /usr/share/doc/ntp/ 找到 HTML 格式的版本。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245567/,如需轉載,請註明出處,否則將追究法律責任。

相關文章