雖然我們老是開別人玩笑,說他們過的是美國時間。
先別說跨國企業間的時區轉換問題,就算只是同在台灣辦公室裡的 Server 跟 Client 之間,若是出現了時差,那也會帶來難以預期的大麻煩。
在使用 Windows Server 建置 AD 來管理電腦與使用者的朋友都知道,Server 跟 Client 之間的時差不能超過 5 分鐘,否則會出現驗證失敗、無法加入網域 ... 等問題。
為什麼會有這樣子的限制呢?
就拿 iPhone 7 宣佈開賣的事來說吧,台灣終於進入了第一波首發清單裡,Apple 官網在台灣時間 9/9 下午 3 點「準時」開放下單,可是我們的電腦或手機的時間慢了 5 分鐘,所以實際上我們是 3 點 5 分才上線訂購。
等到我們發現之後,早已經全數售完了,人家是 9/23 ~ 9/30 就能現寶,我們卻是得苦苦等到 11 月還不一定會到貨,就因為那天殺的 5 分鐘時差!
再讓我們回頭看一下 AD 的限制,假設我們預計要在晚上十點要用 WSUS 派送新的修正檔到所有的 Client 端去安裝,可是因為沒有校正時差,而導致有些機器裝好了,有些機器沒裝到,搞得我們得手動一台一台去檢查,白白浪費我們的時間,還害同事一整天沒辦法工作。
那,我們要怎麼避免這樣的狀況再次發生呢?
很簡單,我們以前要確認手錶或時鐘的時間正不正確,會用電話撥打「117 報時台」確認,而電腦或手機要自動校正時間,則是可以利用 NTP (網路校時協定,Network Time Protocol),讓這些設備可以運作在正確的時間上。
安裝 chrony
以往的作法都是安裝 NTPd 套件來建置 NTP Server,可是在 7.0 版開始已經改用 chrony 這個新套件來提供校時服務。
它有什麼好處呢?
- 除了從上游 NTP Server 校時之外,還可以從 GPS 星曆來讀取。
- 一個套件兩種用途,NTP Server 跟 NTP Client 一次滿足。
- 校正時差的時候,不會立刻把時間修改到正確的時間,而是用慢慢的將時間加速,直到準時為止。
正常來說,預設就已經安裝在系統裡了,如果沒有的話,那就自己裝上去囉。
sudo yum -y install chrony
這次使用的是 2.1.1 版。
修改設定
其實預設值就可以正常運作了,不需要修改;如果真的有需要的話,才編輯主設定檔。
sudo vi /etc/chrony.conf
按照我們的需求,修改設定值。
########## 我是分隔線 ##########
# 指定上游伺服器或伺服器群
server time.stdtime.gov.tw iburst
server clock.stdtime.gov.tw iburst
server watch.stdtime.gov.tw iburst
server tick.stdtime.gov.tw iburst
server tock.stdtime.gov.tw iburst
pool tw.pool.ntp.org iburst maxsources 3
pool centos.pool.ntp.org iburst maxsources 4
# 每 11 分鐘將正確的時間寫入 BIOS 裡
rtcsync
# 允許或拒絕指定的網段與 IP 位址的用戶端請求校時
allow 192.168.88/24
deny 192.168.88.254
allow 10.1.1
########## 我是分隔線 ##########
預計使用的上游伺服器是 NTP Pool Project 的叢集伺服器群。
- 0.centos.pool.ntp.org
- 1.centos.pool.ntp.org
- 2.centos.pool.ntp.org
- 3.centos.pool.ntp.org
- time.stdtime.gov.tw
- watch.stdtime.gov.tw
- tick.stdtime.gov.tw
- tock.stdtime.gov.tw
- clock.stdtime.gov.tw
開始運作
修改完設定值之後,重新啟動服務,並且讓它在開機後自動啟動。
sudo systemctl restart chronyd
sudo systemctl enable chronyd
相關設定
Firewall
如果要開放外部的電腦來校時,別忘了開放 NTP 服務需要的 TCP 123 Port。sudo firewall-cmd --zone=public --add-service=ntp --permanent
sudo firewall-cmd --reload
時區設定
關於時間的準確性,時區也是其中一個關鍵因素,台灣所在的時區是 Asia/Taipei。
我們可以查詢一下所有支援的時區。
timedatectl list-timezones
視伺服器提供服務的地理位置,修改時區的設定,時間自然會跟著變更。
sudo timedatectl set-timezone Asia/Taipei
如何使用
本機驗證
我們可以直接用 chrony client 指令來查詢,它跟 ftp client 一樣,有自己的指令,可以輸入「help」全部顯示出來。chronyc
要結束的話,輸入「exit」或「quit」就可以離開。
也可以直接在指令後面下參數,例如:
顯示 chronyd 所有的上游伺服器。
chronyc sources -v
顯示與上游伺服器間的時差,這代表本機跟上游伺服器的時差只有 0.000239478 秒。
chronyc tracking
立即強制更新成正確的時間。
sudo chronyc -a makestep
macOS
打開「系統偏好設定」裡的「日期與時間」,找到「自動設定日期與時間」的欄位,輸入 chronyd 的 Domain Name 或 IP 位址就可以了。Windows
以 Win10 為例,打開「控制台」裡的「日期和時間」,選擇「網際網路時間」頁籤,點選「變更設定」,找到「伺服器」的欄位,輸入 chronyd 的 Domain Name 或 IP 位址,再點選「立即更新」就完成了。注意事項
- chrony 發現有時差的時候,不會馬上把時間更新成正確的時間,而是會像飛機在穿越時區一樣,一點點一點點的增加或減少。
這是為了避免讓某些程式會因為時間突然的大幅變動,而發生錯亂或當機的狀況。
參考資料
- chrony
- LinOxide - How to Sync Time Properly with NTP Server in CentOS 7.x
- RHEL 7 System Administrator's Guide - Chapter 15 chrony
- 中華電信研究所 時間與頻率國家標準實驗室 - NTP 的網路資源
圖片來源
- https://visualhunt.com
更新紀錄
- 2016/09/13 撰文。
0 意見 :
張貼留言