如何在 Ubuntu 上配置 ntpd:实现可靠时间同步,确保系统稳定

translate.## 1. 引言:为何时间同步至关重要

系统时间漂移导致的问题

在 Ubuntu 等 Linux 系统中,保持准确的系统时间极其重要。乍一看,时钟的微小偏差似乎无关紧要,但在服务器运维和应用环境中,即使是轻微的时间漂移也可能引发严重问题。

例如,可能会出现以下问题:

  • 日志一致性丢失 如果系统或应用日志的时间戳不对齐,定位事件根因将变得困难。
  • Cron 任务失效 备份或批处理等计划任务可能无法在正确的时间运行,导致意外行为。
  • SSL 证书和安全认证失败 HTTPS 通信和 SSH 认证依赖准确的系统时间。若时钟不正确,证书可能被判定为“已过期”或“尚未生效”,从而产生连接错误。

当多个服务器需要在网络中保持同步时,这些问题尤为严重。

NTP 的作用与重要性

为防止上述问题,NTP(网络时间协议) 被广泛使用。NTP 通过互联网或局域网与时间服务器通信,自动校正系统时钟。

在 Ubuntu 上,有多种与 NTP 相关的工具可供选择,包括 ntpd、chrony 和 systemd-timesyncd。本文聚焦 ntpd(Network Time Protocol daemon),详细说明在 Ubuntu 上的安装与使用方法。

对于需要长时间持续运行的服务器或日志一致性至关重要的系统,ntpd 因其稳定性而备受推崇。

在下一节中,我们将先解释 ntpd 是什么、它的核心作用以及在 Ubuntu 上可用的选项。

2. 什么是 ntpd?它的作用及 Ubuntu 上的替代方案

ntpd 的概述与特性

ntpd(Network Time Protocol Daemon)是一个后台服务,利用 NTP 保持系统时间的准确性。它会定期与互联网上或本地网络中的 NTP 服务器通信,并自动调整系统时钟。

ntpd 的关键特性在于能够进行“平滑同步”,即逐步校正时间漂移,而不是一次性突变。这种设计避免了对正在运行的系统和应用产生负面影响。

ntpd 还支持高级 NTP 功能,如 对称通信身份验证,因此适用于企业环境。

Ubuntu 上可用的时间同步工具

Ubuntu 提供了多种时间同步方案:

  • ntpd(ntp 包) 在长期运行的业务和需要细粒度配置的环境中被广泛使用。它灵活且稳定,能够精准同步公共 NTP 服务器。
  • chrony 现代的 ntpd 替代方案,精度高且初始同步速度极快。它在低配机器和虚拟机上表现出色,许多发行版已将其设为默认。
  • systemd-timesyncd 轻量级时间同步服务,Ubuntu 20.04 及以后版本默认启用。使用简便,但功能有限,不适合高级配置或搭建本地 NTP 服务器的场景。

为什么选择 ntpd?

在 Ubuntu 上选择 ntpd 的主要原因是其 可靠性和稳定性。它尤其适用于以下场景:

  • 长时间持续运行、对时间精度要求极高的服务器
  • 需要在网络内部构建本地 NTP 服务器的环境
  • 企业级使用场景,需要身份验证和细粒度控制

由于 ntpd 拥有悠久的运营历史和广泛的兼容性,能够在部署过程中提供安心保障。

3. 在 Ubuntu 上安装与初始配置 ntpd

安装 ntpd

要在 Ubuntu 上使用 ntpd,首先需要安装 ntp 包。可以使用以下命令轻松完成:

.

sudo apt update
sudo apt install ntp

此操作会安装 ntpd 及其相关文件。根据您的 Ubuntu 版本,默认可能已启用 chronysystemd-timesyncd。在这种情况下,建议 提前禁用或移除它们

sudo systemctl stop systemd-timesyncd
sudo systemctl disable systemd-timesyncd

启用服务并验证启动

安装完成后,启用 ntpd 服务并确认其正在运行:

sudo systemctl enable ntp
sudo systemctl start ntp
sudo systemctl status ntp

如果状态显示为 active (running),则 ntpd 正常工作。

检查并编辑初始配置文件

ntpd 的配置位于 /etc/ntp.conf。默认情况下,会配置若干 NTP 服务器(通常来自 pool.ntp.org 网络)。

首先,查看配置文件:

cat /etc/ntp.conf

如果想指定位于日本的服务器,可以按如下方式编辑配置:

server ntp.nict.jp iburst

iburst 选项可在首次连接时加快同步速度,推荐使用。

修改完成后,重启 ntpd 以使更改生效:

sudo systemctl restart ntp

验证自动时间同步

ntpd 会在启动后自动同步时间。要验证其是否正常工作,请使用以下命令:

ntpq -p

该命令会列出已连接的 NTP 服务器以及延迟、偏移等详细信息。

4. 配置与自定义 NTP 服务器

选择推荐的 NTP 服务器

配置 ntpd 时最重要的环节之一是选择要同步的 NTP 服务器。通过互联网连接时,指定地理位置相近且可靠的 NTP 服务器(如国内服务器)可提供更稳定、精准的时间同步。

日本的代表性 NTP 服务器包括:

  • ntp.nict.jp(信息通信研究机构)
  • ntp.jst.mfeed.ad.jp(日本标准时间 / Mfeed)
  • ntp.ring.gr.jp(Internet Multi Feed)

这些服务器基于高精度原子钟运行,个人使用无需特殊注册即可使用。

您可以通过在 /etc/ntp.conf 中添加以下条目来配置与这些服务器的同步:

server ntp.nict.jp iburst
server ntp.jst.mfeed.ad.jp iburst
server ntp.ring.gr.jp iburst

ntp.conf 中的详细配置选项

/etc/ntp.conf 文件提供了比仅指定 NTP 服务器更细粒度的控制。以下列出一些常用指令。

  • restrict 指令 控制哪些客户端被允许或被限制访问 NTP 服务。出于安全考虑,应限制不必要的访问。例如,允许本地网络的访问:
    restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
    
  • driftfile 指定用于记录系统时钟漂移的文件。大多数情况下,默认设置已足够。
    driftfile /var/lib/ntp/ntp.drift
    

在网络内部构建本地 NTP 服务器

使用 Ubuntu 上的 ntpd,您还可以将系统作为 本地 NTP 服务器,向内部网络的其他设备分发时间。此配置在没有互联网接入或需要在多台系统之间保持一致时间管理的环境中非常有用。

示例设置步骤如下:

  1. /etc/ntp.conf 中添加 restrict 规则以允许本地访问:restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
  2. 配置客户端电脑引用本地 NTP 服务器:server 192.168.0.10 iburst # 本地 NTP 服务器的 IP
  3. 在服务器上开放 NTP 端口(在防火墙中允许 UDP 123 端口):sudo ufw allow 123/udp

如果通信被阻断,时间同步将失败,ntpq 命令将无法显示与服务器的连接。

5. 验证 ntpd 的运行和故障排除

检查服务状态

要确认 ntpd 是否正常运行,请使用以下命令:

sudo systemctl status ntp

如果显示 active (running),则 ntpd 正常运行。如果状态为 inactivefailed,则可能是配置错误或依赖问题阻止了启动。

对于详细日志,以下命令很有用:

journalctl -u ntp

这允许您按时间顺序查看 ntpd 服务的启动历史和错误消息。

检查同步状态 (ntpq -p)

ntpq -p 命令最常用于验证 ntpd 是否与 NTP 服务器正确同步。

ntpq -p

示例输出:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp.nict.jp     .NICT.           1 u   25   64  377    1.123   -0.345   0.024

各列的含义如下:

  • remote : 连接的 NTP 服务器名称
  • st : 服务器层级(越低越准确;1 表示原子钟参考)
  • reach : 可达性寄存器(8 位历史)
  • delay : 网络延迟 (ms)
  • offset : 时间偏移 (ms)
  • jitter : 偏移变化

标记为 * 的服务器是当前选中的同步源。

常见错误及其修复方法

以下是部署 ntpd 时遇到的常见问题及其相应解决方案。

1. ntpq -p 无输出 / reach 保持为 0

  • 原因 : UDP 端口 123 可能被防火墙或路由器阻塞
  • 解决方案 : 验证服务器和客户端的防火墙设置,确保允许 NTP 流量。
    sudo ufw allow 123/udp
    

2. 显示 System clock not synchronized

  • 原因 : ntpd 未运行,或另一个同步服务(如 systemd-timesyncd)发生冲突
  • 解决方案 : 禁用不必要的时钟同步服务并重启 ntpd。
    sudo systemctl disable systemd-timesyncd
    sudo systemctl restart ntp
    

3. 无法解析 NTP 服务器名称

  • 原因 : DNS 配置问题或网络问题
  • 解决方案 : 使用如 ping ntp.nict.jp 等命令检查名称解析,并在必要时调整 DNS 设置。

4. 时间严重偏差且无法同步

  • 原因 : 出于安全考虑,ntpd 不会自动校正非常大的时间偏移
  • 解决方案 : 手动校正初始时间,然后重启 ntpd。
    sudo ntpd -gq  # Perform a one-time immediate synchronization
    sudo systemctl restart ntp
    

持续监控

在生产环境中,建议定期记录 ntpq -p 的输出并为异常设置警报。检测到如日志缺失或 reach 值持续卡在 0 等迹象,可以及早识别故障。

6. 将 ntpd 与其他时间同步工具进行比较

Ubuntu 上的主要时间同步工具

Ubuntu 提供多种时间同步工具,每种工具都有独特的特性。选择合适的工具取决于您的系统要求和使用场景。

  • ntpd (ntp package)
  • chrony
  • systemd-timesyncd

ntpd 的特性

  • 优点
  • 经过长期运行历史验证的稳定性和可靠性
  • 丰富的功能集,具有细粒度的配置选项(本地 NTP 服务器、认证、对称模式)
  • 与公共 NTP 服务器的高度兼容性和广泛的故障排除资源
  • 缺点
  • 启动后的初始同步可能较慢
  • 对虚拟化和高度可变网络等现代环境的适应性较差

chrony 的特性

.

  • 优势
  • 即使在启动后立即,也能实现非常快速的初始同步
  • 在虚拟化或网络环境变化(笔记本、VPN)下保持高精度
  • 自适应学习随时间提升准确性,有时甚至优于 ntpd
  • 劣势
  • 用作本地 NTP 服务器时配置稍显复杂
  • 相比 ntpd,文档和真实案例较少

systemd-timesyncd 的特性

  • 优势
  • 在 Ubuntu 20.04 及以后版本默认启用,管理极其简便
  • 资源占用极低,仅提供基本同步功能
  • 与 systemd 深度集成,适合标准的 Ubuntu 部署
  • 劣势
  • 功能受限;不支持高级配置和本地 NTP 服务器运行
  • 精度和日志功能仅为基础,难以满足大规模系统的需求

对比表

Featurentpdchronysystemd-timesyncd
AccuracyHighVery HighModerate
Initial Sync SpeedSometimes SlowVery FastModerate
Local NTP ServerExcellentGood (More Complex)Not Supported
Configuration FlexibilityHighMediumLow
Virtual Environment SupportLimitedExcellentGood
Operational History & ResourcesExcellentGoodLimited
Recommended Use CasesServers, Organization-wide SyncVirtual Environments, LaptopsSingle PCs, Beginners

按使用场景推荐的工具

  • 服务器环境(尤其是长期运行的系统)ntpdchrony,以获得稳定性和精度
  • 云环境、虚拟机、笔记本chrony 提供最高的灵活性和精确度
  • 仅需基本同步的单机 PCsystemd-timesyncd 已足够

7. 常见问题解答 (FAQ)

Q1. Ubuntu 22.04 是否默认安装 ntpd?

A1.
否。Ubuntu 22.04 默认不安装 ntpd,而是启用了 systemd-timesyncd 来提供基本的时间同步。若要使用 ntpd,需要手动安装 ntp 软件包。

sudo apt install ntp

安装后,禁用 systemd-timesyncd 可避免冲突。

Q2. 为什么 ntpq -p 没有显示任何结果?

A2.
可能的原因有:

  • 服务未运行:使用 sudo systemctl status ntp 检查并在必要时启动
  • 未能与 NTP 服务器通信:确保防火墙未阻塞 UDP 123 端口
  • 配置错误:确认 /etc/ntp.conf 中没有错误

首先运行以下命令检查基本运行情况:

ntpq -p

如果输出为空或 reach 始终为 0,则可能是外部服务器通信失败。

Q3. 应该选择 ntpd 还是 chrony?

A3.
最佳选择取决于使用环境:

  • 长期运行的物理服务器或本地 NTP 服务器部署 → 推荐使用 ntpd,以获得更高的稳定性
  • 虚拟化环境、笔记本或网络不稳定(Wi‑Fi)chrony 能提供更好的精度和更快的同步速度
  • 仅需简单时间同步systemd-timesyncd 已足够

Q4. ntpd -gq 命令的作用是什么?

A4.
ntpd -gq 会一次性向 NTP 服务器同步时间,然后退出。

  • -g:即使时间偏差很大也允许校正
  • -q:只同步一次后退出(不以守护进程方式运行)

当系统时间严重错误、普通的 ntpd 运行无法自动校正时,此命令非常有用。

Q5. 指定多个 NTP 服务器有什么好处?

A5.
有。指定多个 NTP 服务器可以提升冗余性和可靠性。如果某一服务器不可用,系统仍可使用其他服务器继续同步。

/etc/ntp.conf 中的示例配置:

server ntp.nict.jp iburst
server ntp.jst.mfeed.ad.jp iburst
server ntp.ring.gr.jp iburst

8. 结论:通过稳定的时间同步提升系统可靠性

重温 ntpd 的价值

在 Ubuntu 系统中,准确的时间同步不仅是便利性问题——它直接关系到 安全性、故障排查、日志管理以及自动化流程的正确性

本文提供了 NTP 基础知识的全面概述,介绍了使用 ntpd 实现时间同步的原理、安装与配置步骤、定制选项、验证与故障排除方法,以及与其他工具的对比。

给读者的建议

在 Ubuntu 上选择时间同步工具时,需要考虑系统用途、架构以及可用性要求。
但其原则是通用的:没有准确的时间,系统的稳定运行是不可能的

  • 服务器环境和日志密集型系统 → 仔细配置 ntpdchrony
  • 需求简单的单机系统 → 使用 systemd-timesyncd 快速部署

虽然时间同步问题在日常操作中常常不被察觉,但在排查故障时,它会成为关键的区别因素

使用本指南为你的 Ubuntu 环境构建最合适的时间同步方案。