1、NTP服务器安装
查询主机Linux系统版本
cat /etc/redhat-release
1.1 有网络
yum install ntp -y
或者(Ubuntu)
apt-get update
apt-get install ntp
1.2 离线系统
直接下载地址:
http://mirror.centos.org/centos/7/os/x86_64/Packages/ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm
http://mirror.centos.org/centos/7/os/x86_64/Packages/ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm
http://mirror.centos.org/centos/7/os/x86_64/Packages/autogen-libopts-5.18-5.el7.x86_64.rpm
或者一步步的找到地址:
下载页面:https://pkgs.org/download/ntp,找到CentOS x86_64 -> ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm
https://centos.pkgs.org/7/centos-x86_64/ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm.html
-> Download ->
Binary Package http://mirror.centos.org/centos/7/os/x86_64/Packages/ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm
以及Requires:libedit.so.25、ntpdate-4.2.6p5-29.el7.centos.2.x86_64
手动下载(rpm包和依赖)安装,需要下载:
ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm
autogen-libopts-5.18-5.el7.x86_64.rpm
ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm
直接安装
# 在只有这三个包的目录里面执行
rpm -ivh autogen-libopts-5.18-5.el7.x86_64.rpm
rpm -ivh ntp*
或者一个个安装
安装这个包
rpm -ivh ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm
提示缺少依赖 :
libedit.so.25
ntpdate-4.2.6p5-29.el7.centos.2.x86_64
对应在Requires里面找到对应的包,下载
安装这个包(libedit.so.25)
rpm -ivh autogen-libopts-5.18-5.el7.x86_64.rpm
安装这个包(ntpdate),安装前需要检查服务是否存在
rpm -qa | grep ntpdate(存在删掉即可)
删除:
yum remove ntpdate -y
再安装
rpm -ivh ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm
最后执行安装ntp
rpm -ivh ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm
2、配置 NTP时间同步源
2.1 有网络
使用第三方NTP地址进行时间同步
vi /etc/ntp.conf
将默认的pool配置注释掉,添加如下内容(没有一一测试)
#国家授时中心
server ntp.ntsc.ac.cn iburst prefer
#阿里云时间源
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun com iburst
server times.aliyun.com iburst prefer
2.2 离线系统
ntp时钟服务器配置
修改/etc/ntp.conf 文件配置
vi /etc/ntp.conf
注释掉
#restrict default nomodify notrap nopeer noquery
允许 192.168.0.0-192.168.0.255 网段内所有机器从 esnode1 同步时间,以本地时间作为时间服务
注释原有的,添加新的
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 默认的一个内部时钟数据,在没有外部NTP服务器时,它为局域网用户提供服务
server 127.127.1.0 stratum 3
# 表示网关为192.168.5.0,子网掩码为255.255.255.0,网段为192.168.5.0-192.168.5.255的机器可通过该服务端时间校准
restrict 192.168.5.0 mask 255.255.255.0
# 允许修改本机时间
restrict 192.168.5.160 nomodify notrap noquery nopeer
其他的一些配置【可选】
# 不允许来自公网上ipv4和ipv6客户端的访问
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
重启
systemctl restart ntpd
systemctl start ntpd
systemctl enable ntpd
查看服务是否运行
ps -ef |grep ntpd
或者
systemctl status ntpd
查看同步状态
timedatectl status
ntp时钟客户端配置
修改/etc/ntp.conf 文件配置
vi /etc/ntp.conf
注释原有的时间服务器地址,添加新的ntp时间服务器地址
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# ntp时间服务器地址
server 192.168.5.160
重启
ntpstat
查看服务是否运行
ps -ef |grep ntpd
或者
systemctl status ntpd
或者
ntpq -p
测试是否成功
ntpstat
出现失败,需要等待大约2-3分钟左右
unsynchronised
time server re-starting
polling server every 8 s
再执行ntpstat出现成功
synchronised to NTP server (172.17.100.8) at stratum 7
time correct to within 951 ms
polling server every 64 s
查看同步状态
timedatectl status
3、关闭防火墙服务或者开启端口,关闭selinux
如果你的服务器有防火墙,确保UDP端口123(NTP默认端口)是开放的,以便其他设备可以与NTP服务器通信(UDP不是TCP)。
# 开端口123(CentOS)
firewall-cmd --permanent --add-port=123/udp
firewall-cmd --reload
# 查询端口
firewall-cmd --list-ports |grep 123
# 开端口123(Ubuntu)
ufw allow 123/udp
或者直接关闭防火墙,禁用开机启动(不建议)
systemctl stop firewalld
systemctl disable firewalld
关闭selinux服务,设置selinux策略为"disabled"。
setenforce 0
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
4、设置本地时间
date -s "2024-03-10 00:00:00"
5、手动同步与定时同步
在配置完成后,可以尝试手动同步时间以验证NTP服务的配置是否正确。
若ntp服务正在运行,则需要执行以下命令,先停止ntp服务(因为ntpdate工具和ntp守护进程冲突,因此执行ntpdate命令时需要保证ntpd进程未运行)。
systemctl stop ntpd
手动同步时间以验证NTP服务的配置
ntpdate ntp.aliyun.com
或者
ntpdate 192.168.5.160
如果需要定时同步系统时间,你可以使用crontab工具来设置。例如,下面的命令会每五分钟执行一次ntpdate命令进行时间同步:
crontab -e
然后在编辑窗口中加入如下内容:
*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com
或者
*/5 * * * * /usr/sbin/ntpdate 192.168.5.160
6.测试
设置服务端的时间
date -s "2024-03-08 00:00:00"
重启客户端服务器,看看是否能够同步服务器的时间,修改客户端的时间。
7、监控和日志
你可以使用ntptime命令来查看当前系统时间与NTP服务器的时间偏差。
NTP服务的日志文件通常位于/var/log/syslog或/var/log/ntp.log,你可以查看这些日志来监控NTP服务的运行情况和解决潜在问题。
请注意,NTP服务器的配置可能因具体的网络环境和需求而有所不同。因此,在实际部署过程中,建议参考相关的官方文档和最佳实践,并根据实际情况进行调整和优化。此外,确保在配置过程中考虑到安全性和稳定性方面的因素。
8、常见问题及其解决方法
1. NTP服务未启动或未安装:
使用以下命令安装和启动 NTP 服务:
yum install ntp 或 apt-get install ntp
systemctl start ntpd 或 systemctl start chronyd
2. 防火墙设置不正确:
确保防火墙已经打开并允许NTP端口(UDP 123)通过:
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
3. 与NTP服务器的连接失败:
确保您的Linux主机可以连接到NTP服务器,并且NTP服务器的DNS解析正确。您可以使用以下命令检查IP地址是否可用:
ping ntp.server.com
4. 时间同步失败:
如果时间同步失败,可能需要手动将系统时间设置为与NTP服务器时间相同:
ntpdate -u ntp.server.com
其它资料
一般的ntp使用场景下,ntp时钟源端只需根据需求配置restrict、server参数即可。
参数解释如下:
|-----------------|---------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 参数 | 值 | 描述 |
| driftfile | 一个绝对路径,默认为:"/var/lib/ntp/drift" | 指定存储系统时钟漂移值的文件路径,记录系统时钟与 ntp时钟源时钟之间的差异,以便在系统重新启动后快速同步时间 |
| restrict | 具体的IP地址/网段(后面可加具体选项) | restrict参数用于限制具体的IP或网段对本时钟源的具体操作。 其选项包括: nomodify(禁止对本ntp时钟源进行修改操作,包括更改时间、更改配置等); notrap(禁止使用trap服务,trap服务是一种用于远程管理的NTP服务,禁止使用可以增加安全性); nopeer(禁止作为对等服务器,即禁止其他ntp时钟源与本时钟源进行对等通信); noquery(禁止查询操作,即禁止其他客户端向本ntp时钟源发送时间查询请求)。 举例1: restrict default nomodify notrap nopeer noquery(允许所有人同步本时钟源时间,但遵守nomodify、notrap、nopeer、noquery动作); 举例2:restrict 192.168.100.6(允许192.168.100.6同步本时钟源时间); 举例3:restrict 192.168.1.0 mask 255.255.255.0 notrap(允许192.168.1.0/24这个网段内的主机同步本时钟源时间,但遵守notrap动作) |
| server | 具体的IP地址(后面可加具体选项) | server参数用于指定上级时钟源,当本节点需要同步其他时钟源的时间时,可以通过该参数指定上级时钟源IP。 其选项包括: iburst(在与上级时钟源建立连接时,使用更快的初始轮询间隔来加快同步速度); prefer(当存在多个上级时钟源时,该选项将指定的上级时钟源作为首选上级时钟源,即优先选择该时钟源进行时间同步); stratum X(指定该时钟源的层级,X的值为1~15,数字越小,层级越高,表示可靠性越高,该选项仅适用于ntp时钟源之间的时间同步,对于客户端与ntp时钟源之间的时间同步,该选项不起作用); minpoll X(表示设置最小轮询间隔为2X秒,X默认为6,在使用公网时钟源时,建议X不小于6即最小轮询间隔不小于64秒 ); maxpoll X(表示设置最大轮询间隔为2X秒,X默认为10)。 举例1:server 192.168.100.10(指定上级时钟源为192.168.100.10); 举例2:server 192.168.100.20 prefer(指定上级时钟源为192.168.100.20,并设置为首选时钟源); 举例3:server 192.168.100.30 stratum 10(指定上级时钟源为192.168.100.30,并设置层级为10); 举例4:server 192.168.100.40 iburst minpoll 7 maxpoll 11(指定上级时钟源为192.168.100.40,并设置了iburst探测,指定了最小轮询间隔为128秒,最大轮询间隔为2048秒) |
| broadcast | 广播IP地址(后面可加具体选项) | 用于配置ntp服务器向本地网络广播时间信息,作为广播服务端,它可以通过广播将时间信息发送给网络中的其他设备,以实现时间同步。 其选项包括: ttl(指定广播数据包的生存时间,即数据包在网络中传播的最大跳数); key(指定用于加密广播数据包的密钥编号);auth(指定用于鉴权的类型,可选的鉴权类型包括:none、autokey、ntp、control、crypto)。 举例1:broadcast 192.168.100.255 ttl 6(以广播方式向192.168.100.255地址发送时间信息,并设置广播数据包的生存时间为6跳) |
| broadcastclient | 空/具体选项 | 当配置文件中存在此参数时,表示当前节点为ntp服务的广播客户端,会接受来自广播服务端发出的时间信息完成时间同步。 其选项包括: ttl(指定接收广播数据包的生存时间,即数据包在网络中传播的最大跳数); key(指定用于解密广播数据包的密钥编号)。 举例1:broadcastclient(启用broadcastclient参数); 举例2:broadcastclient ttl 6(启用broadcastclient参数,并设置接收广播数据包的生存时间为6跳) |
| crypto | 空/具体选项 | 当配置文件中存在此参数时,表示时间同步启用公钥加密,使用加密算法对NTP通信进行加密和身份验证,该参数一般不用,此处不做具体介绍 |
| includefile | 一个绝对路径,默认为:"/etc/ntp/crypto/pw" | 用于指定一个文件,该文件包含其他NTP配置信息。通过使用includefile参数,可以将配置信息分散到多个文件中,使配置文件更加模块化和易于管理,该参数一般不用,此处不做具体用法介绍 |
| keys | 一个绝对路径,默认为:"/etc/ntp/keys" | 指定用于认证和加密NTP通信的密钥文件路径,通过使用keys参数,可以配置ntp时钟源和ntp客户端使用的密钥,以确保通信的安全性和身份验证,该参数一般不用,此处不做具体用法介绍 |
| disable monitor | 空 | 用于禁用本ntp时钟源的监视功能。通过使用disable monitor参数,可以阻止本ntp时钟源接受和响应监视查询,禁用监视功能并不会影响ntp时钟源的正常时间同步功能。ntp时钟源仍然可以继续提供时间同步服务,但不会响应监视查询 |