搭建一個本地時間服務器,使得局域網內主機時間保持一致。
設置正確時間
# 設置系統時間
date -s "2025-03-25 17:31:00"
# 將系統時間寫入硬件時鐘
hwclock --systohc
時間服務器設置
系統應該預先安裝chronyd
要允許 所有客戶端 通過你的 chronyd
服務器進行時間同步,只需在 /etc/chrony.conf
中配置 allow
指令,并設置合適的防火墻規則。以下是具體步驟:
1. 修改 chronyd
配置(允許所有客戶端)
編輯 /etc/chrony.conf
(Debian/Ubuntu)或 /etc/chrony/chrony.conf
(CentOS/RHEL):
vi /etc/chrony.conf
在配置文件中添加或修改以下行:
# 允許所有客戶端訪問(0.0.0.0/0 或省略掩碼)
allow 0.0.0.0/0# 如果僅允許 IPv6 客戶端
allow ::/0# 如果同時允許 IPv4 和 IPv6
allow all
- chrony.conf
# 注釋或刪除所有現有的 server 行(不連接外部 NTP 服務器)
# server ntp.aliyun.com iburst# 啟用本地時鐘作為時間源(stratum 10)
local stratum 10# 允許哪些客戶端同步(例如允許 192.168.1.0/24 網段)
allow 192.168.1.0/24# 可選:記錄時間調整日志
logdir /var/log/chrony
2. 重啟 chronyd
服務
sudo systemctl restart chronyd
3. 配置防火墻(開放 NTP 端口)
NTP 使用 UDP 123 端口,需確保防火墻允許該端口的入站流量。
(1)UFW(Debian/Ubuntu)
sudo ufw allow 123/udp
sudo ufw reload
(2)firewalld(CentOS/RHEL)
sudo firewall-cmd --add-service=ntp --permanent
sudo firewall-cmd --reload
(3)iptables(傳統方式)
sudo iptables -A INPUT -p udp --dport 123 -j ACCEPT
# 持久化規則(根據系統選擇以下一種)
sudo iptables-save | sudo tee /etc/iptables/rules.v4 # Debian/Ubuntu
sudo service iptables save # CentOS 6
4. 驗證配置
(1)檢查 chronyd
是否允許所有客戶端
chronyc accheck
如果輸出包含 0.0.0.0/0
或 ::/0
,則表示配置成功。
(2)從客戶端測試同步
在另一臺機器上配置 chronyd
指向你的服務器:
# 編輯客戶端的 /etc/chrony.conf
server <your-ntp-server-ip> iburst# 重啟 chronyd
sudo systemctl restart chronyd# 檢查同步狀態
chronyc sources -v
輸出中應顯示你的服務器地址(^*
表示已同步)。
使用ansible批量同步時間,運行ansible-playbook time-sync.yaml
- time-sync.yaml
---
- name: Update chrony configuration and restart servicehosts: allbecome: truetasks:- name: Comment out original server lineslineinfile:path: /etc/chrony.conf# 將需要注釋的外網時間服務器加入regexp: '^(server ntp1.aliyun.com iburst|server cn.pool.ntp.org iburst |server ntp.ntsc.ac.cn iburst)'line: '#\g<0>'backrefs: yes- name: Check if new server line existslineinfile:path: /etc/chrony.confline: 'server 192.168.0.10 iburst'state: presentcreate: falsecheck_mode: trueregister: line_check- name: Add new server line if not existslineinfile:path: /etc/chrony.confline: 'server 192.168.0.10 iburst'insertafter: EOFwhen: line_check.changed- name: Restart chronyd servicesystemd:name: chronydstate: restartedenabled: yes
5. 高級選項(可選)
(1)限制客戶端權限
如果希望允許所有客戶端同步但禁止修改配置:
allow all
deny all cmd
allow all
:允許同步時間。deny all cmd
:禁止所有管理命令(如chronyc
的修改操作)。
(2)日志記錄
查看客戶端訪問記錄:
sudo grep chronyd /var/log/syslog # Debian/Ubuntu
sudo journalctl -u chronyd # CentOS/RHEL