Ubuntu 16.04 上的時間同步

情境

因為工作上需要,必須讓分散環境裡的各環境時間一致,偏偏目前主要環境是封閉網路,只有一檯 NB 連得上 Internet。所以就拿 NB 當內部 time server ,先讓 NB 跟外部做時間同步,然後再讓內部其他環境去跟 NB 做對時。一旦設定好,每次開機,這個行為就是自動化,這樣的機制叫做 NTP(Network Time Protocol)。

time server 安裝與設定

安裝 ntp
1
$ sudo apt install ntp
編輯設定檔
1
2
3
4
5
6
7
8
9
10
11
12
13
$ sudo vim /etc/ntp.conf

# 移除註解,啟動 log 功能
#statsdir /var/log/ntpstats/

# 增加 time server
server tock.stdtime.gov.tw
server tick.stdtime.gov.tw
server time.stdtime.gov.tw
server clock.stdtime.gov.tw

# 設定要廣播的子網段
broadcast 192.168.0.255
記得重啟服務
1
$ sudo service ntp restart

檢驗設定結果

ntpq
ntp debug

可以使用 ntpq 來檢查設定結果
1
2
3
4
$ ntpq
# 輸入 command 來了解狀況,細部可以看
ntpq> help
ntpq> pe

有時候防火牆也要設定
1
sudo ufw allow 123/udp

time client 的校對

早期使用 ntpdate,不過後來 Ubuntu 提供了另一個比較簡易的 client 工具:timedatectl。預設情況下,開機會先同步一次,等到網路有效,會再做一次檢查。如果主機上安裝了 ntpdate/ntp,則 timedatectl 會讓你使用舊的設定,避免兩個時間同步服務打架。

查看 timedatectl 狀態
1
2
3
4
5
6
7
8
$ timedatectl 
Local time: 三 2017-09-13 06:58:05 CST
Universal time: 二 2017-09-12 22:58:05 UTC
RTC time: 二 2017-09-12 22:58:05
Time zone: Asia/Taipei (CST, +0800)
Network time on: yes
NTP synchronized: no
RTC in local TZ: no

如果 NTP 安裝,並且使用 NTP 的同步機制,這邊就會看到 NTP synchronized 是 yes。

設定 NTP Server 資訊
1
2
3
4
5
6
7
$ sudo vim /etc/systemd/timesyncd.conf

NTP=<you_server_ip>

$ sudo service ntp stop
$ sudo service systemd-timesyncd restart
$ sudo systemctl daemon-reload