這一篇文章要介紹的是-如何架設NTP的環境;而這又可以分成Server (伺服器 / 服務器)和Client (客戶端 / 用戶端)。那什麼是NTP呢?? 它是指Network Time Protocol (網路校時協定);也有人稱呼它為SNTP (Simple Network Time Protocol)簡易網路校時協定,基本上都是指同樣的東西。
NTP是運作在OSI第七層-應用層 (Application Layer)的協定;在傳輸層 (Transfer Layer)中,則是走UDP。
現在,我要以RHEL6.X的環境來實現這兩個部份。Server端的部份比較複雜,它必須讓其它Client端的電腦來連線校時;那它的時間又是怎麼來的?? 當然也是連到其它的NTP Server來取得。
NTP的架設,牽扯到一個很重要的檔案: / etc / ntp.conf
我要在公司架設一台NTP Server,僅供公司內部的區網提供校時,包含本機在內;但不對外提供服務。
# 關閉所有的NTP封包
restrict default ignore
# 開啟內部遞迴網路 (lo)的介面
restrict 127.0.0.1
# 自己NTP Server本身的IP Address也要開啟
restrict 192.168.12.140
# 僅針對公司內部的區網提供校時
restrict 192.168.12.0 mask 255.255.255.0 nomodify
先到這邊,來解釋一下他的語法:
1. 第一個參數,restrict這個關鍵字,是代表權限的控管。
2. 第二個參數,是要開放的IP Address (或網段)。
3. 第三個參數,假如第二個參數是一個網段的話,要附加上該網段的子網路遮罩,前面再多加一個關鍵字: "mask"。
4. 第四個參數,有九種,可以穿插使用:
- (空白): 沒有任何參數,代表沒有任何限制。
- ignore: 拒絕所有的NTP封包和請求 (Deny all packets and queries)。
- kod: KOD是一種技術,可以阻止KOD封包對Server端進行破壞 (Send Kiss-Of-Death packet on access violation)。
- nomodify: Client端 (ntpq / ntpdc)不能更改Server端的設定;僅能從Server端校時 (Deny ntpq / ntpdc queries that attempt to modify the server)。
- notrap: 不提供trap這個遠端事件登錄的功能 (Deny control message trap service)。
- noquery: Server端不對任何Client端提供校時服務 (Deny all ntpq / ntpdc queries)。
- noserve: 拒絕除了Client端 (ntpq / ntpdc)之外的校時 (Deny all queries - except ntpq / ntpdc)。
- notrust: 拒絕沒有認證的Client端 (Deny access unless cryptographically authenticated (ver 4.2 onwards))。
- nopeer: 拒絕與同一網段中NTP Server的校時服務 (Deny all packets that attempt to establish a peer association)。
綜合以上1到4點,再回頭看最初的三行指令,相信就不難理解了。
第二個動作,我要設定Root NTP Server。在島內,中華電信研究所國家時間與頻率標準實驗室有提供五台的NTP Server:
1. tick.stdtime.gov.tw (220.130.158.51)
2. time.stdtime.gov.tw (220.130.158.52)
3. watch.stdtime.gov.tw (220.130.158.54)
4. tock.stdtime.gov.tw (220.130.158.71)
5. clock.stdtime.gov.tw (220.130.158.72)
在這裡,要先聲明,我要偷懶一下,有些參數暫時先不介紹 (註),一來自己沒時間去研究;二來也不是很懂。所以,先講簡單的-如何讓本機的NTP Server與外部的Root NTP Server進行校時。
# 先建立Root NTP Server的位址,可以是FQDN,或是IP Address。
server tick.stdtime.gov.tw prefer
server time.stdtime.gov.tw prefer
server watch.stdtime.gov.tw prefer
server tock.stdtime.gov.tw prefer
server clock.stdtime.gov.tw prefer
prefer關鍵字的意思是我們這台主機要以該Root NTP Server做校時。
# 開放Root NTP Server的NTP封包可以進入本機。
restrict 220.130.158.51
restrict 220.130.158.52
restrict 220.130.158.54
restrict 220.130.158.71
restrict 220.130.158.72
OK!! 編輯完成之後記得存檔。接著,讓我們所設定的NTP服務運作:
service ntpd status
service ntpd stop
service ntpd start
以上的部份,是Server端的設定;如果是Client端的話,該如何執行??
ntpdate -b -u 192.168.12.140
有可能會出現如下的錯誤訊息:
[root@localhost ~]# ntpdate -b -u 192.168.12.140
2 Jan 16:14:17 ntpdate[3653]: no server suitable for synchronization found
這表示NTP封包被防火牆給擋了下來。所以,我們也要在iptables中讓NTP封包能夠通過:
iptables -A FORWARD -m udp -p udp --sport 123 -d 0/0 --dport 123 -j ACCEPT
iptables -A INPUT -m udp -p udp --sport 123 -d 0/0 --dport 123 -j ACCEPT
設定完成過幾分鐘之後,再次執行,就會得到我們期望的結果:
[root@localhost ~]# ntpdate -b -u 192.168.12.140
2 Jan 16:31:37 ntpdate[3805]: step time server 192.168.12.140 offset -0.000006 sec
最後,再把我們得到的結果寫進BIOS系統時間:
hwclock -w
以上執行過程如下圖:
PS:
1. 這些參數有:autokey, burst, iburst, key key, minpoll minpoll, maxpoll maxpoll, noselect, preempt, prefer, true, ttl ttl, version version, dynamic, server, fudge, stratum, driftfile, broadcastdelay, keys等等。
2. 這個範例,理論上應該是OK;但自己實際上執行時有一個地方卻是失敗的 - 自己從另一台Ubuntu校時本機是失敗;只有自己校時自己是成功。迫於工作及生活,並沒有花太多時間去追究原因。
沒有留言:
張貼留言