CentOS NTP 服务器配置指南
一、NTP
网络时间协议(NTP, Network Time Protocol)是一种用于计算机网络中同步不同设备系统时间的协议,通过 NTP,可以确保所有受管理的主机与指定的 NTP 服务器同步时间,从而减少由于时钟漂移导致的时间偏差,NTP 服务器通常与公共 NTP 服务器或选定的服务器进行同步,以确保其时间的准确性。

二、为什么需要 NTP?
时钟漂移:由于制造工艺的差异,所有非原子时钟并不完全以一致的速度运行,有些时钟会快一些,有些则会慢一些,随着时间的推移,这种差异会导致时间逐渐偏离标准时间,即所谓的“时钟漂移”。
时间同步的重要性:不同主机之间的时间同步对于计划备份、入侵检测日志、分布式任务调度或事务簿记等事务非常重要,甚至可能是监管合规的要求。
三、NTP 层次结构
NTP 时钟采用分层层次结构,每一层称为一个层级(stratum),层级描述了机器距离权威时间源的 NTP 跳数:
Stratum 0:包含几乎没有时间漂移的时钟,如原子钟,这些时钟无法通过网络直接使用。

Stratum N(N > 1):服务器对照 Stratum N1 服务器同步其时间,Stratum N 时钟可以通过网络彼此连接。
Stratum 16:认为不同步,无法使用。
NTP 最多支持层次结构中的 15 层。
四、在 CentOS 上搭建 NTP 服务器
1. 准备 CentOS 服务器
确保服务器的时区正确设置,在 CentOS 7 中,可以使用timedatectl
命令查看和更改服务器的时区,将时区设置为“Australia/Adelaide”:

- timedatectl listtimezones | grep Australia
- timedatectl settimezone Australia/Adelaide
2. 安装 NTP 软件
使用yum
安装ntp
软件包:
- yum install ntp y
3. 配置 NTP 服务器
编辑/etc/ntp.conf
文件,添加用于同步时间的全局 NTP 服务器,使用阿里 NTP 服务器:
- vim /etc/ntp.conf
在文件中添加以下内容:
- server ntp1.aliyun.com
- server ntp2.aliyun.com
默认情况下,NTP 服务器日志保存在/var/log/messages
中,如果需要自定义日志文件,可以在配置文件中指定路径,并确保更改其所有权和 SELinux 上下文:
- logfile /var/log/ntpd.log
- chown ntp:ntp /var/log/ntpd.log
- chcon t ntpd_log_t /var/log/ntpd.log
4. 启动 NTP 服务并设置开机自启
启动 NTP 服务并确保其已添加到启动项:
- systemctl restart ntpd
- systemctl enable ntpd
5. 验证 NTP 服务器时钟
使用ntpq
命令检查本地服务器的时钟如何通过 NTP 实现同步:
- ntpq p
6. 控制对 NTP 服务器的访问
默认情况下,NTP 服务器允许来自所有主机的入站查询,如果需要过滤入站 NTP 同步连接,可以在防火墙中添加规则:
- iptables A INPUT s 192.168.1.0/24 p udp dport 123 j ACCEPT
- iptables A INPUT p udp dport 123 j DROP
该规则将允许来自192.168.1.0/24
网段的 NTP 服务器(经由端口 UDP/123),拒绝其他所有网络的流量,根据需要更新规则。
五、配置 NTP 客户端
1. Linux 客户端
NTP 客户端主机需要ntpdate
程序包来对照服务器同步其时间,可以使用yum
或aptget
安装该程序包,然后运行带服务器 IP 地址的命令:
- ntpdate <serverIPaddress>
如果是基于 RHEL 和 Debian 的系统,命令完全一样。
2. Windows 客户端
在 Windows 系统中,可以在日期和时间设置下寻找“Internet 时间”,然后输入 NTP 服务器的地址进行同步。
3. 思科设备
如果想同步思科设备的时间,可以从全局配置模式使用以下命令:
- ntp server <serverIPaddress>
来自其他厂商的具有 NTP 功能的设备在 Internet 时间方面有各自的参数,查阅设备的说明文档以进行配置。
NTP 协议可以让你所有主机上的时钟保持同步,通过上述步骤,我们演示了如何搭建一台 NTP 服务器,让具有 NTP 功能的设备对照该服务器同步其时间。
六、常见问题及解答(FAQs)
Q1: 如何更改 NTP 服务器的时区?
A1: 在 CentOS 7 中,可以使用timedatectl
命令查看和更改服务器的时区,将时区设置为“Australia/Adelaide”:
- timedatectl listtimezones | grep Australia
- timedatectl settimezone Australia/Adelaide
Q2: 如何验证 NTP 服务器是否正常运行?
A2: 可以使用ntpq
命令检查本地服务器的时钟如何通过 NTP 实现同步:
- ntpq p
该命令将显示 NTP 服务器的同步状态和相关信息。