Linux Tool:ntpd 时间同步服务
Posted on Sat, 29 Nov 2025 09:06:45 +0800 by LiangMingJian
Linux Tool:ntpd 时间同步服务
前言
在现实工作中,由于服务器的长时间运行,所以时间往往会出现偏差,此时进行时间同步是非常必要的。这里的时间同步通常会使用 ntp 服务器来完成。
NTP,Network Time Protocol,网络时间协议,是 TCP/IP 协议族里面的一个应用层协议,主要功能是用来使客户端和服务器之间进行时钟同步,提供高精准度的时间校正,以避免服务器在长期运行后的时间偏差。
NTP 服务器在安装后,它既可以作为客户端去获取其他 NTP 服务器的时间,也可以作为服务端为其他客户端提供时间,不需要额外配置,当 NTP 作为服务端时,它会使用到 UDP 123 端口。
NTP 的安装
大部分 Linux 系统的 NTP 服务都是默认安装的,我们可以通过以下命令检查安装情况:
# 检查服务状态
systemctl status ntpd
# 检查同步状态
ntpq -p
# 检查同步信息
ntpstat
如果发现 NTP 服务器没有安装,那么可以通过以下两种途径自行安装:
通过 yum 软件库安装
yum install -y ntp
通过源代码离线安装
下载 NTP 源代码文件: ntp-4.2.8p18.tar.gz ,随后在服务器中,执行以下命令编译安装:
# 解压
tar -xvf ntp-4.2.8p18.tar.gz
# 进入文件夹
cd ntp-4.2.8p18
# 编译配置
./configure
# 编译安装
make && make install
启动 NTP 服务
systemctl start ntpd
systemctl enable ntpd
开启防火墙
firewall-cmd --zone=public --add-port=123/udp --permanent
firewall-cmd --reload
NTP 的配置
NTP 只有唯一的配置文件 /etc/ntp.conf,该文件的配置内容主要有以下部分:
通过
vi /etc/ntp.conf编辑配置文件
权限控制关键字 restrict
restrict 用于管理客户端访问权限,可以用来禁止客户端修改服务器时间,禁止状态查询,禁止远程日志等功能。
比如:默认配置中的 restrict default nomodify notrap nopeer noquery 就代表对所有未明确的客户端(default)禁止修改服务器时间(nomodify),禁止远程登录(notrap),禁止建立对等关系(nopeer),禁止查询服务器状态(noquery)。
而默认配置中的 restrict 127.0.0.1 和 restrict ::1 则代表允许本地所有权限。
另外如果想对内网特定网段同步时间,则可以使用配置项 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap,允许 1 段访问。

时间服务器关键字 server
server 用于设置同步使用的时间服务器,通常可以搭配 prefer,iburst 和 fudge 一起使用。prefer 表示优先使用,iburst 表示快速建立同步,这两者都能用来标记优先同步源。fudge 则用来设置服务器层级(值越小优先级越高)。
比如:配置项 server ntp.aliyun.com prefer 表示优先使用阿里 NTP 服务器同步时间,如果有多个 server,则按对应的优先级连接服务器同步时间。
而配置项 fudge ntp.aliyun.com stratum 1 则表示阿里 NTP 服务器所处优先级层级(stratum)为第一,数值越小优先级越高。
拓展阅读:如何使用硬件时钟作为同步时间源
在内网环境中,由于无法连接外网,因此没办法使用外部的同步时间源。
为了保证内网环境中所有的设备使用同一个时间,可以将一台服务器使用自身硬件时钟校准同步,然后将其作为其他设备的 NTP 服务器使用,以此实现局域网内的时间同步。
在 NTP 服务器中,127.127.1.0 是特殊的一个地址,它用来指代本地硬件时钟。因此,在配置文件中,我们可以将其视作外部时间源一样配置:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
上述配置的含义为:使用本地时钟作为同步时间源,同时将优先级设置为第十。

拓展阅读:配置正常但重启 NTP 服务失败
在重启 NTP 服务时,可能会出现配置正常,但重启失败的问题,此时需要用户检查端口是否被占用的问题。
NTP 使用 UDP 123 端口,当端口被占用时无法重启(即使占用端口的也是 NTP 服务,但由于某些原因,也可能无法被 systemctl 重启)。
此时需要通过以下命令,检查端口占用情况,然后杀掉进程,再重启服务。
# 占用检查
netstat -tunlp | grep 123
# 杀掉进程
kill pid
# 重启服务
systemctl restart ntpd