转载自:https://www.cnblogs.com/jiangyibo/p/8626196.html

领导要求,要4台机器时钟同步,上网查了查,主要看了看ptp和ntp,感觉ntp就够用,索性就直接上手ntp了。

以下内容纯属最基础的内容,只适合第一次接触ntp并且需求简单的朋友。

就我当前项目来介绍下ntp:多台计算机因为某些原因对时间的同步性比较重视,所以需要不间断的去同步各个计算机的时间,而ntp就是使网络中的各个计算机时间同步的一种协议,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。

第一步:安装ntp

aptitude install ntp (此处用apt-get 也可以,但建议使用aptitude,就我目前知道的是aptitude安装后的软件卸载时能够将其的依赖包也卸载掉,而apt-get的卸载无法办到,两者建议不要混用。)

第二步:查看安装是否成功

service --status-all

1347181-20180322192355152-1314892058.png

/etc/ntp.conf是ntp的配置文件,第一次接触最好在编辑之前先备份,你懂得。

第三步:了解/etc/ntp.conf设置

  简单的来说,该文件其实就两关键词restrict和server,前者是用来做限制的,后者是用来连接上层服务器(ntp一共16层,第16层无法同步)

restrict [ 客户端IP ] mask [ IP掩码 ][参数]

“客户端IP” 和 “IP掩码” 如果使用default关键字,表示对所有的计算机进行控制,常见的参数如下:

  • ignore:拒绝连接到NTP服务器
  • nomodiy: 客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
  • noquery: 不提供客户端的时间查询
  • notrap: 不提供trap远程登录功能,trap服务是一种远程时间日志服务。
  • notrust: 客户端除非通过认证,否则该客户端来源将被视为不信任子网 。
  • nopeer: 提供时间服务,但不作为对等体。
  • kod: 向不安全的访问者发送Kiss-Of-Death报文。

server[上层服务器的IP或域名][参数]

其中host是上层NTP服务器的IP地址或域名,随后所跟的参数解释如下所示:

  • key: 表示所有发往服务器的报文包含有秘钥加密的认证信息,n是32位的整数,表示秘钥号。
  • prefer: 如果有多个server选项,具有该参数的服务器有限使用。
  • minpoll: 指定与查询该服务器的最小时间间隔为2的n次方秒,n默认为6,范围为4-14。
  • maxpoll: 指定与查询该服务器的最大时间间隔为2的n次方秒,n默认为10,范围为4-14。
  • iburst: 当初始同步请求时,采用突发方式接连发送8个报文,时间间隔为2秒。

第四步:编辑/etc/ntp.conf

编辑之前一定要知道ntp的每层设备都是服务器,下面说的服务端和客户端都是相对而言的。
先上服务端
1347181-20180322195223913-837661123.png

客服端
1347181-20180323094631257-1183223440.png

第五步:运行ntp

服务端和客户端的配置文件在编辑完保存后就可以重新启动ntp了:

/etc/init.d/ntp restart

重启时间可能会比较长,大概在5分钟左右。

可以通过ntpq -p来查看所有作为时钟源校正过本地NTP服务器时钟的上层NTP服务器
1347181-20180322200114653-1807055402.png

各个选项的解释:

  • remote: 远程NTP服务器的IP地址或域名,带 “*” 的表示本地NTP服务器与该服务器同步。
  • refid: 远程NTP服务器的上层服务器的IP地址或域名。
  • st: 远程NTP服务器所在的层数。
  • t: 本地NTP服务器与远程NTP服务器的通信方式,u: 单播; b: 广播; l: 本地。
  • when: 上一次校正时间与现在时间的差值。
  • poll: 本地NTP服务器查询远程NTP服务器的时间间隔。
  • reach: 是一种衡量前8次查询是否成功的位掩码值,377表示都成功,0表示不成功。
  • delay: 网络延时,单位是10的-6次方秒。
  • offset: 本地NTP服务器与远程NTP服务器的时间偏移。
  • jitter: 查询偏差的分布值,用于表示远程NTP服务器的网络延时是否稳定,单位为10的-6次方秒

还可以通过ntptrace查看本地NTP服务器的在第几层。
1347181-20180322200434986-1416606568.png

最后提一下ntpd和ntpdate(教程为ntpd):

ntpd在实际同步时间时是一点点的校准过来时间的,最终把时间慢慢的校正对。而ntpdate不会考虑其他程序是否会阵痛,直接调整时间。简单的说就是ntpd是校准时间,ntpdate是调整时间。

不建议大家使用ntpdate,原因摘抄其他前辈的笔记:

第一,这样做不安全。ntpdate的设置依赖于ntp服务器的安全性,攻击者可以利用一些软件设计上的缺陷,拿下ntp服务器并令与其同步的服务器执行某些消耗性的任务。由于ntpdate采用的方式是跳变,跟随它的服务器无法知道是否发生了异常(时间不一样的时候,唯一的办法是以服务器为准)。

第二,这样做不精确。一旦ntp服务器宕机,跟随它的服务器也就会无法同步时间。与此不同,ntpd不仅能够校准计算机的时间,而且能够校准计算机的时钟。

第三,这样做不够优雅。由于是跳变,而不是使时间变快或变慢,依赖时序的程序会出错(例如,如果ntpdate发现你的时间快了,则可能会经历两个相同的时刻,对某些应用而言,这是致命的)。

Debian NTP时间服务器配置要点

1. 安装NTP服务

# 更新软件包列表
sudo apt update

# 安装NTP服务(经典版)
sudo apt install ntp

# 或使用chrony(现代推荐,更精准)
sudo apt install chrony

2. 配置文件核心要点

/etc/ntp.conf 关键配置项:

# 1. 上游时间服务器配置
server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server 3.debian.pool.ntp.org iburst

# 或使用国内NTP服务器(更快更稳定)
server ntp.aliyun.com iburst
server ntp.tencent.com iburst
server cn.pool.ntp.org iburst

# 2. 允许本地网络客户端同步(关键!)
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap

# 3. 本地时钟兜底(当无法连接上游时使用)
server 127.127.1.0
fudge 127.127.1.0 stratum 10

# 4. 访问控制
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
restrict 127.0.0.1
restrict ::1

# 5. 漂移文件(记录时钟频率偏差)
driftfile /var/lib/ntp/ntp.drift

# 6. 日志配置
logfile /var/log/ntp.log
配置行 含义
restrict -4 default ... IPv4默认策略:对所有IPv4地址的默认限制
restrict -6 default ... IPv6默认策略:对所有IPv6地址的默认限制
restrict 127.0.0.1 本机IPv4:允许本机完全访问
restrict ::1 本机IPv6:允许本机完全访问

参数详解(flags)

参数 全称 含义
kod Kiss-o'-death 向违规客户端发送"死亡之吻"包,使其停止查询
notrap No Trap 拒绝trap远程事件日志功能(ntpdc工具用)
nomodify No Modify 禁止修改服务器配置(安全关键!)
nopeer No Peer 拒绝与客户端建立对等关系
noquery No Query 禁止查询状态信息(如ntpq -p)
limited Rate Limited 启用速率限制,防止DoS攻击

通俗理解

🔒 默认策略(对外来IP):
"你可以同步时间,但不能做其他事情!"

✅ 本机策略(127.0.0.1/::1):
"本机拥有完全权限,不受限制"

实际效果对比

操作 默认策略 本机策略
同步时间 ✅ 允许 ✅ 允许
查询状态(ntpq -p) ❌ 拒绝 ✅ 允许
修改配置 ❌ 拒绝 ✅ 允许
建立对等关系 ❌ 拒绝 ✅ 允许

为什么需要这些配置?

# ❌ 危险:不设置restrict
# 任何人都能修改你的NTP服务器配置!

# ✅ 安全:默认拒绝,按需开放
restrict default kod notrap nomodify nopeer noquery limited  # 外人只能同步时间
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap   # 内网可以同步
restrict 127.0.0.1                                         # 本机完全控制

常见变体配置

# 1. 只提供时间同步,拒绝一切查询(最安全)
restrict default kod notrap nomodify nopeer noquery limited

# 2. 允许特定网段查询状态(监控需要)
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap nopeer

# 3. 完全信任特定服务器(对等模式)
restrict 10.0.0.5 nomodify notrap

验证配置效果

# 本机可以查询(成功)
ntpq -p

# 远程机器查询被拒绝(安全生效)
# 在另一台机器上执行:
ntpdate -q 你的服务器IP    # 可以同步
ntpq -p 你的服务器IP        # 被拒绝!

3. 关键配置要点详解

配置项 作用 建议
iburst 启动时快速同步 必须添加,加快初始同步
restrict 访问控制 限制网段,防止滥用
stratum 时间源层级 本地时钟设为10(最低优先级)
driftfile 频率漂移记录 必须配置,提高长期精度

4. 防火墙配置

# 开放NTP端口(UDP 123)
sudo ufw allow 123/udp
sudo ufw reload

# 或使用iptables
sudo iptables -A INPUT -p udp --dport 123 -j ACCEPT
sudo iptables-save

5. 服务管理与验证

# 重启NTP服务
sudo systemctl restart ntp

# 查看同步状态
ntpq -p

# 查看详细时间信息
timedatectl status

# 强制立即同步(调试时用)
sudo ntpdate -u ntp.aliyun.com

6. 客户端配置示例

在客户端 /etc/ntp.conf 中指向您的服务器:

server 192.168.10.2 iburst prefer  # 您的NTP服务器IP

7. 推荐:使用Chrony(更现代)

# 安装chrony
sudo apt install chrony

# 配置 /etc/chrony/chrony.conf
server ntp.aliyun.com iburst
allow 192.168.10.0/24              # 允许同步的网段
local stratum 10                   # 本地时钟层级
makestep 1.0 3                     # 快速同步设置

8. 验证同步成功

# 查看时间源状态
chronyc sources -v      # chrony
ntpq -p                 # ntp

# 查看系统时间同步状态
timedatectl status | grep "NTP synchronized"

关键提醒

  1. 必须配置restrict 允许内网访问,否则客户端无法同步
  2. 建议至少配置3-4个上游服务器,提高可靠性
  3. 国内环境优先使用阿里云/腾讯云NTP,延迟更低
  4. 硬件时钟偏差大的服务器建议启用makestep快速同步