搭建一个本地时间服务器,使得局域网内主机时间保持一致。
设置正确时间
# 设置系统时间
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