[CentOS 7] 這是哪來的美國時間啊?就讓時間伺服器回答你

by 9月 13, 2016 0 意見        

雖然我們老是開別人玩笑,說他們過的是美國時間。

先別說跨國企業間的時區轉換問題,就算只是同在台灣辦公室裡的 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 這個新套件來提供校時服務。

它有什麼好處呢?
  1. 除了從上游 NTP Server 校時之外,還可以從 GPS 星曆來讀取。
  2. 一個套件兩種用途,NTP Server 跟 NTP Client 一次滿足。
  3. 校正時差的時候,不會立刻把時間修改到正確的時間,而是用慢慢的將時間加速,直到準時為止。

正常來說,預設就已經安裝在系統裡了,如果沒有的話,那就自己裝上去囉。
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
這五台校時伺服器是由經濟部標準檢驗局委由 中華電信研究所 時間與頻率國家標準實驗室 代為管理,其中 time.stdtime.gov.tw 還額外支援 IPv6。


開始運作


修改完設定值之後,重新啟動服務,並且讓它在開機後自動啟動。
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

啟用 NTP 自動校時
sudo timedatectl set-ntp yes


如何使用


本機驗證

我們可以直接用 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 發現有時差的時候,不會馬上把時間更新成正確的時間,而是會像飛機在穿越時區一樣,一點點一點點的增加或減少。
    這是為了避免讓某些程式會因為時間突然的大幅變動,而發生錯亂或當機的狀況。

參考資料


圖片來源

  • https://visualhunt.com

更新紀錄

  • 2016/09/13 撰文。

Heracles Jam,江湖人稱「海公公」

IT 技術家 - 創站部落客

一個常用 Windows、慣用 macOS、愛用 Linux 的 3C 阿宅
現職 MIS / 業界講師 / 資訊顧問 / 部落客

0 意見 :

張貼留言