凌峰创科服务平台

Linux NTP服务器配置步骤有哪些?

目录

  1. NTP 基础概念
    • 什么是 NTP?
    • NTP 的工作模式
    • NTP 层级结构
  2. 环境准备
    • 系统要求
    • 检查当前时间同步状态
  3. 安装 NTP 服务
    • 基于 RHEL/CentOS/Fedora
    • 基于 Debian/Ubuntu
  4. 配置 NTP 服务器
    • 备份原始配置文件
    • 编辑主配置文件 (/etc/ntp.conf)
    • 配置文件详解 (/etc/ntp.conf)
    • 配置内部时钟源(可选)
  5. 启动并启用 NTP 服务
  6. 配置防火墙
  7. 验证 NTP 服务器状态
    • 查看 NTP 服务状态
    • 使用 ntpq 命令监控对等体
    • 使用 ntpdc 命令监控详细信息
  8. 配置客户端(同步到该服务器)
  9. 高级与安全配置
    • 限制客户端访问 (restrict 指令)
    • 使用 pool 替代 server
    • 使用 leapfile 处理闰秒
  10. 排错指南

NTP 基础概念

什么是 NTP?

网络时间协议是一种用于在计算机网络中同步计算机时钟的协议,它可以使网络中的所有设备时间保持高度一致(精确到毫秒甚至纳秒级别)。

Linux NTP服务器配置步骤有哪些?-图1
(图片来源网络,侵删)

NTP 的工作模式

  • 服务器/客户端模式:最常用的模式,客户端向一个或多个 NTP 服务器发送时间请求,并根据服务器返回的时间来调整自己的本地时钟。
  • 对等体模式:两台或多台 NTP 服务器之间相互同步,形成一个对等体关系,共同提高时间源的稳定性和准确性。

NTP 层级结构

NTP 使用层级结构(称为 Stratum)来组织时间源。

  • Stratum 0 (0级):最高层级,是精确的时间源,如原子钟、GPS 钟等,这些设备不通过网络,而是直接连接到服务器。
  • Stratum 1 (1级):直接连接到 Stratum 0 设备的 NTP 服务器,它们是网络上最权威的时间服务器。
  • Stratum 2 (2级):从 Stratum 1 服务器同步时间的服务器。
  • Stratum 3 (3级):从 Stratum 2 服务器同步时间的服务器。
  • ...以此类推。

理论上,层级越高,时间延迟越大,精度越低,在实际部署中,我们通常将服务器配置为 Stratum 2 或 Stratum 3。


环境准备

系统要求

  • 一台稳定运行的 Linux 服务器(推荐 RHEL/CentOS 7+, Ubuntu 18.04+)。
  • 具有管理员 (root) 权限。

检查当前时间同步状态

在配置之前,先检查系统是否已经运行了其他时间同步服务(如 chronyd,在 CentOS 7+/RHEL 7+ 和 Ubuntu 16.04+ 中是默认服务)。

# 检查 chronyd 服务状态 (CentOS/RHEL 7+, Ubuntu 16.04+)
systemctl status chronyd
# 检查 ntpd 服务状态 (旧版系统)
systemctl status ntpd

如果你的系统正在使用 chronyd,建议先禁用它,以避免冲突。

Linux NTP服务器配置步骤有哪些?-图2
(图片来源网络,侵删)
# 对于 CentOS/RHEL 7+
systemctl stop chronyd
systemctl disable chronyd
# 对于 Ubuntu
systemctl stop systemd-timesyncd
systemctl disable systemd-timesyncd

安装 NTP 服务

基于 RHEL/CentOS/Fedora

使用 yumdnf 包管理器安装。

sudo yum install ntp  # 适用于 CentOS 6/7
# 或者
sudo dnf install ntp  # 适用于 Fedora 及 CentOS 8/9

基于 Debian/Ubuntu

使用 apt 包管理器安装。

sudo apt update
sudo apt install ntp

配置 NTP 服务器

备份原始配置文件

在修改任何配置文件前,养成备份的好习惯。

sudo cp /etc/ntp.conf /etc/ntp.conf.bak

编辑主配置文件 (/etc/ntp.conf)

使用你喜欢的文本编辑器(如 vi, nano)打开配置文件。

Linux NTP服务器配置步骤有哪些?-图3
(图片来源网络,侵删)
sudo vi /etc/ntp.conf

配置文件详解 (/etc/ntp.conf)

一个典型的 NTP 服务器配置文件包含以下几个部分:

a. 指定上游时间源 这是配置的核心,告诉你的 NTP 服务器应该向谁同步时间,你可以使用公共 NTP 池或指定的服务器。

# 使用公共 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
# 或者使用更通用的公共池
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
  • server: 指定 NTP 服务器的地址或域名。
  • iburst: 当 NTP 服务启动时,它首先会以一个快速、连续的包 burst 模式发送请求,以快速同步时间,之后恢复正常轮询间隔,这能大大加快初始同步速度。

b. 允许客户端访问 默认情况下,NTP 服务器会拒绝所有客户端的请求,你需要使用 restrict 指令来允许来自特定网络的客户端。

# 默认策略:拒绝所有客户端查询
restrict default ignore
# 允许本地环回地址(127.0.0.1)进行查询
restrict 127.0.0.1
# 允许来自局域网的客户端同步时间
# 将 192.168.1.0/24 替换为你的局域网网段
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap noquery
  • restrict: 定义访问控制规则。
  • 168.1.0 mask 255.255.255.0: 指定允许的 IP 地址范围。
  • nomodify: 客户端不能修改服务器的时间。
  • notrap: 客户端不能使用 ntpd 的 trap 机制。
  • noquery: 客户端不能发送 ntpqntpdc 的查询,这是一个很好的安全实践,可以防止 DDoS 攻击。

c. 指定本地时钟 如果你的服务器连接了本地硬件时钟(如 GPS 授时卡或原子钟),你需要在这里声明它。

# 假设你的服务器连接了一个 GPS 时钟,设备为 /dev/gps0
# server 127.127.20.1
# fudge 127.127.20.1 time1 0.0 refid GPS
  • server 127.127.x.y: 特殊的 IP 地址,表示本地时钟源。
    • x: 时钟类型(20代表 GPS,22代表 PPS 信号)。
    • y: 设备号(0代表 /dev/gps0)。
  • fudge: 对本地时钟源的参数进行调整。
    • time1: 时间偏移量。
    • refid: 时钟源的参考 ID。

d. 其他可选配置

# 指定 driftfile,用于记录时钟频率偏差,以便在无网络时进行补偿
driftfile /var/lib/ntp/drift
# 指定日志文件
logfile /var/log/ntp.log
# 忽略某些时钟源,防止它们被用作同步源
# disable auth

启动并启用 NTP 服务

安装并配置完成后,启动 NTP 服务并设置为开机自启。

# 启动服务
sudo systemctl start ntpd
# 设置开机自启
sudo systemctl enable ntpd
# 检查服务状态
sudo systemctl status ntpd

确保看到 active (running) 状态。


配置防火墙

如果你的服务器启用了防火墙(如 firewalldufw),需要开放 NTP 服务的 UDP 端口 123

对于 firewalld (CentOS/RHEL 7+)

# 添加 permanent 规则,使其永久生效
sudo firewall-cmd --permanent --add-service=ntp
# 重新加载防火墙
sudo firewall-cmd --reload

对于 ufw (Ubuntu/Debian)

# 开放 123/udp 端口
sudo ufw allow 123/udp
# 重新加载防火墙(可选,通常不需要)
sudo ufw reload

验证 NTP 服务器状态

查看 NTP 服务状态

sudo systemctl status ntpd

查看日志输出,确认服务已正常运行。

使用 ntpq 命令监控对等体

ntpq 是 NTP 的标准查询工具,用于监控 NTP 服务器和客户端的状态。

ntpq -p

输出示例:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+ntp1.ams1.nl.ni 193.79.237.14    2 u   13   64  377    14.521   -1.234   0.456
*ntp2.lon.uk.ni  193.78.240.14    2 u   12   64  377    25.123    2.456   0.789
+ntp3.par.fr.ni  193.78.240.18    2 u   14   64  377    30.456   -0.123   1.012
  • remote: 对等体的主机名或 IP。
  • refid: 该对等体所同步的时间源 ID。
  • st: Stratum 层级。
  • t: 类型(u 代表 unicast, l 代表 local, etc.)。
  • when: 上次请求后经过的秒数。
  • poll: 轮询间隔(秒)。
  • reach: 到达计数器(八进制)。
  • delay: 网络延迟。
  • offset: 本地时钟与对等体时钟的时间差,这是最重要的指标,它应该趋近于 0。
  • jitter: 时间抖动,值越小越稳定。

关键符号

  • 当前被系统同步的主要对等体。
  • 一个被认可的、可用的对等体。
  • x: 一个被拒绝的对等体。
  • 一个没有达到 minclock(通常是3)的对等体。

使用 ntpdc 命令监控详细信息

ntpdc 提供了比 ntpq 更底层的监控信息。

ntpdc -c peers
ntpdc -c sysinfo

配置客户端(同步到该服务器)

在局域网内的其他 Linux 客户机上,你可以将它们配置为同步到你刚刚搭建的 NTP 服务器。

  1. 在客户端上安装 NTP(如果未安装)。

  2. 编辑客户端的 /etc/ntp.conf可以非常简单:

    # 将你的 NTP 服务器 IP 地址填入
    server 192.168.1.100 iburst
    # 其他可选配置
    restrict default ignore
    restrict 127.0.0.1
    driftfile /var/lib/ntp/drift
  3. 启动并启用客户端的 ntpd 服务

    sudo systemctl stop chronyd  # 如果存在
    sudo systemctl disable chronyd
    sudo systemctl start ntpd
    sudo systemctl enable ntpd
  4. 验证客户端:在客户端上运行 ntpq -p,你应该能看到你的服务器 IP 地址,offset 值会逐渐变小。


高级与安全配置

限制客户端访问

/etc/ntp.conf 中,通过精细的 restrict 指令来控制客户端权限。

# 默认拒绝所有
restrict default ignore
# 允许本地查询
restrict 127.0.0.1
# 允许特定网段进行查询和同步,但不能修改服务器
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap nopeer
# 允许另一个受信任的服务器进行完全同步(对等体模式)
restrict 10.0.0.5 nomodify
  • nopeer: 防止客户端与服务器形成对等体关系,避免时间回拨等问题。

使用 pool 替代 server

对于上游时间源,使用 pool 指令通常比 server 更好,因为它可以自动处理故障转移和负载均衡。

# 使用 pool 指令
pool 0.pool.ntp.org iburst
pool 1.pool.ntp.org iburst

使用 leapfile 处理闰秒

为了正确处理闰秒,可以下载官方的 leapsecond 文件。

# 在 /etc/ntp.conf 中添加
leapfile /etc/ntp.leapseconds
# 然后下载 leapsecond 文件
sudo wget -P /etc/ https://www.ntp.org/files/leap/leap-seconds.list

排错指南

  • 服务无法启动:检查 /var/log/messages/var/log/daemon.log 中的错误信息,常见原因包括配置文件语法错误、端口 123 被占用。
  • 客户端无法同步
    • 检查客户端和服务器之间的网络连通性 (ping, telnet <server_ip> 123)。
    • 检查服务器防火墙是否允许 UDP 123 端口。
    • 检查服务器 /etc/ntp.conf 中的 restrict 规则是否正确。
    • 在客户端上检查 ntpq -p 的输出,查看 offsetreach 值。
  • 时间同步很慢或不稳定
    • 检查上游时间源的质量,尝试更换公共池。
    • 检查网络延迟和抖动。
    • 确保服务器和客户端的硬件时钟没有问题。

配置一个 NTP 服务器是一个相对直接但非常重要的系统管理任务,通过以上步骤,你应该能够成功搭建一个为你的局域网提供精确时间同步的服务器,关键点在于:

  1. 选择可靠的上游时间源
  2. 正确配置防火墙和访问控制 (restrict)
  3. 验证配置,确保服务器和客户端都正常工作。

对于新部署的系统,也可以考虑使用 chrony,它是 NTP 的一个现代替代品,对网络不稳定的环境适应性更强,同步速度也更快,但对于大多数传统需求,ntpd 依然是一个非常稳定和可靠的选择。

分享:
扫描分享到社交APP
上一篇
下一篇