28.11. NTP 時間校對

隨著使用時間,電腦的時鐘會逐漸偏移,這對需要網路上電腦有相同準確度時間的許多網路服務來說是一個大問題。準確的時間同樣能確保檔案時間戳記的一致性。網路時間協定 (Network Time Protocol, NTP) 是一種在網路上可以確保時間準確的方式。

FreeBSD 內建 ntpd(8) 可以設定來查詢其他 NTP 伺服器來同步在該主機的時間或者提供時間服務給其他在網路上的電腦,查詢的伺服器可以為在網路上的本地主機或者由 ISP 提供。除此之外也有 開放存取的 NTP 伺服器線上清單,當要使用開放的 NTP 伺服器,請選擇地理位置較近的並檢查該服務的使用方針。

建議選擇多個 NTP 伺服器,以避免萬一某一台伺服器無法連線,或者該伺服器的時間變的不可靠,當 ntpd 收到回應,會自動先選擇可靠的伺服器。

本節將會介紹如何設定 FreeBSD 上的 ntpd,更進一步的說明文件可於 /usr/share/doc/ntp/ 找到 HTML 格式的版本。

28.11.1. NTP 設定

在 FreeBSD,內建的 ntpd 可用來同步系統的時間,要在開機時開啟 ntpd,可加入 ntpd_enable="YES"/etc/rc.conf,也可在 /etc/rc.conf 設定其他的變數,請參考 rc.conf(5)ntpd(8) 來了解詳情。

該應用程式會讀取 /etc/ntp.conf 來得知要查詢那一個 NTP 伺服器,這裡有一個簡單的 /etc/ntp.conf 範例:

範例 28.4. /etc/ntp.conf 範例
server ntplocal.example.com prefer
server timeserver.example.org
server ntp2a.example.net

driftfile /var/db/ntp.drift

這個檔案的格式在 ntp.conf(5) 有說明,server 選項設定了要查詢那一些伺服器,每一行列一個伺服器。若伺服項目中含有 prefer,則會較偏好使用該伺服器。從偏好伺服器收到的回應若明顯與他伺服器的回應差異過大則會被放棄,否則都會以偏好的伺服器為主。prefer 參數只應用在已知高度準確的 NTP 伺服器上,例如那些有特別在監控時間的硬體。

driftfile 項目用來指定要使用那一個檔案儲存系統時間的頻率偏移量,ntpd 會使用這個檔來自動補償時間的自然偏移,讓時間即始在切斷所有外部時間來源一段時間時仍能夠保持合理的設定值。這個檔案也會儲存有關前次由 NTP 伺服器收到的回應,由於這個檔案包含供 NTP 使用的內部資訊,所以不應手動修改。

預設,NTP 伺服器是開放給任何網路主機存取的,在 /etc/ntp.conf 中的 restrict 選項可以用來控制那些系統可以存取該伺服器。例如,要拒絕所有主機的存取,可加入下行到 /etc/ntp.conf

restrict default ignore

注意:

這將會避免其他 NTP 伺服器的存取,若有需要與一個外部 NTP 伺服器同步,則可以只允許該伺服器。請參考 ntp.conf(5) 來取得更多資訊。

要允許在網路內的主機與伺服器同步時間,但要確保這些主機不允許設定伺服器或者被這些主機當作同輩的主機相互同步,可改使用:

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

其中 192.168.1.0 是本地網路的位址,而 255.255.255.0 是網路的子遮罩。

也支援多個 restrict 項目,要取得詳細的資料,請參考 ntp.conf(5)Access Control Support 子章節。

ntpd_enable="YES" 加入到 /etc/rc.conf 之後,ntpd 便可不需重新開機立即啟動,只要輸入:

# service ntpd start

28.11.2. 在 PPP 連線使用 NTP

ntpd 並不需要永久的網際網路連線才能正常運作,若有一個 PPP 連線是設定成需要時撥號,那麼便需要避免 NTP 的流量觸發撥號或是保持連線不中斷,這可在 /etc/ppp/ppp.conf 使用 filter 項目設定,例如:

 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/ 中的範例。

注意:

部份網際網路存取提供商會封鎖較小編號的埠,這會讓 NTP 無法運作,因為回應永遠無到傳送到該主機。

本文及其他文件,可由此下載: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

若有 FreeBSD 方面疑問,請先閱讀 FreeBSD 相關文件,如不能解決的話,再洽詢 <questions@FreeBSD.org>。

關於本文件的問題,請洽詢 <doc@FreeBSD.org>。