🐧 Linux NTP 時間同步服務教學:Chrony 與 systemd-timesyncd 設定全攻略
時間同步是所有系統與網路服務的底座——影響 憑證有效期、日誌時間線、叢集一致性 與 安全事件追查。本文以 Chrony 與 systemd-timesyncd 為主,提供「用作 NTP Client」與「建置 LAN 內部 NTP Server」的完整設定與排錯清單。
📑 目錄
- 一、Chrony vs systemd-timesyncd:怎麼選?
- 二、NTP Client 設定(最短路徑)
- 三、內部 NTP Server 建置(對 LAN 提供同步)
- 四、驗證與監控指令
- 五、安全建議與最佳實務
- 六、常見問題排查清單
- 七、快速 Recipes:Ubuntu / Debian / RHEL / Rocky
一、Chrony vs systemd-timesyncd:怎麼選?
- Chrony:功能完整,伺服器/客戶端 都能勝任,抖動修正快、支援離線後追趕,企業建議預設。
- systemd-timesyncd:輕量 NTP client(不提供 NTP 服務給他人),桌面/容器很夠用。
二、NTP Client 設定(最短路徑)
方案 A:使用 Chrony(建議)
# Ubuntu/Debian
sudo apt update && sudo apt install -y chrony
# RHEL/Rocky/Alma
sudo dnf install -y chrony
# 設定上游(以 pool.ntp.org 為例;企業可改內部 NTP 主機)
sudo sed -i 's/^pool .*/pool tw.pool.ntp.org iburst/' /etc/chrony/chrony.conf
sudo systemctl enable --now chronyd
sudo timedatectl set-ntp true # 確保由 NTP 同步
方案 B:使用 systemd-timesyncd(僅 client)
# 安裝/啟用(多數發行版內建)
sudo systemctl unmask systemd-timesyncd
sudo systemctl enable --now systemd-timesyncd
# 指定上游 NTP
sudo bash -c 'cat >/etc/systemd/timesyncd.conf<<EOF
[Time]
NTP=tw.pool.ntp.org
FallbackNTP=time.google.com ntp.ubuntu.com
EOF'
sudo systemctl restart systemd-timesyncd
三、內部 NTP Server 建置(對 LAN 提供同步)
使用 Chrony 最單純;timesyncd 不提供對外服務。
# 1) 安裝
sudo dnf/apt install -y chrony
# 2) 設定 /etc/chrony/chrony.conf
# - 指定上游;允許內網;啟用本地參考(選擇性)
pool tw.pool.ntp.org iburst
allow 192.168.0.0/16
# 如果你要在外網不通時提供暫時時間,取消註解下行(慎用)
# local stratum 10
# 3) 啟用服務
sudo systemctl enable --now chronyd
# 4) 防火牆開放 NTP (UDP/123)
# firewalld
sudo firewall-cmd --add-service=ntp --permanent
sudo firewall-cmd --reload
# ufw
sudo ufw allow 123/udp
備註:SELinux 預設允許 chronyd;若自訂路徑或額外限制,請檢查 audit 日誌後再以 semanage 調整。
四、驗證與監控指令
# 是否由 NTP 控制
timedatectl
# Chrony 來源與同步狀態
chronyc sources -v
chronyc tracking
chronyc sourcestats
# 系統時計偏移/步進紀錄
journalctl -u chronyd --since "today"
五、安全建議與最佳實務
- Server 僅
allow內部網段;外部主機請改走上游(pool / ISP NTP)。 - 使用多個上游(公網 + 本地 ISP)並加
iburst提升收斂速度。 - 虛擬化/容器環境:優先以 宿主機 爲 NTP 來源,避免層層延遲。
- 關鍵系統更新 BIOS/RTC 後,驗證
timedatectl是否仍由 NTP 控制。
六、常見問題排查清單
- ⛔ UDP/123 被擋:檢查
firewalld/ufw、邊界防火牆 ACL。 - 🌀 NTP 來源不可達:更換
pool,或加入time.google.com/ntp.ubuntu.com。 - 🔁 服務衝突:不要同時啟用
chronyd與systemd-timesyncd。保留其一。 - ⏱️ 時鐘大幅漂移:第一次可允許步進(chrony 會自動處理),或手動
sudo hwclock -w同步 RTC。
七、快速 Recipes:Ubuntu / Debian / RHEL / Rocky
Ubuntu / Debian(Server + Client)
sudo apt update && sudo apt install -y chrony
sudo sed -i 's/^pool .*/pool tw.pool.ntp.org iburst/' /etc/chrony/chrony.conf
echo "allow 192.168.0.0/16" | sudo tee -a /etc/chrony/chrony.conf
sudo systemctl enable --now chronyd
sudo ufw allow 123/udp
chronyc tracking && chronyc sources -v
RHEL / Rocky / Alma(Server + Client)
sudo dnf install -y chrony
sudo sed -i 's/^pool .*/pool tw.pool.ntp.org iburst/' /etc/chrony.conf
echo "allow 192.168.0.0/16" | sudo tee -a /etc/chrony.conf
sudo systemctl enable --now chronyd
sudo firewall-cmd --add-service=ntp --permanent && sudo firewall-cmd --reload
chronyc tracking && chronyc sources -v
🧭 行動清單
✅ 選定方案:Server 用 Chrony、工作站可用 timesyncd ✅ 設定上游 pool 與 allow 內網段 ✅ 開啟防火牆 UDP/123 並驗證 chronyc tracking/sources ✅ 將本機設為內部 NTP,其他主機改指向它
沒有留言: