NTP 简介
NTP (Network Time Protocol) 是一种用于在计算机之间同步时钟的协议,在 Ubuntu 上配置一个 NTP 服务器,可以让局域网内的其他设备(如电脑、服务器、网络设备)都从这个服务器获取标准时间,确保整个网络的时间一致性,这对于日志记录、安全认证、任务调度等场景至关重要。

将 Ubuntu 服务器配置为仅客户端(从互联网同步时间)
这是最常见的配置,如果你的 Ubuntu 服务器只需要保持时间准确,而不需要为其他设备提供时间服务,请遵循此部分。
安装 NTP 客户端
现代的 Ubuntu 系统通常使用 systemd-timesyncd 作为默认的时间同步服务,它轻量且易于管理,但如果你习惯使用传统的 NTP,也可以安装 ntp 包。
方法 A:使用 systemd-timesyncd(推荐,默认已安装)
这个服务默认已安装并运行,你只需要配置它使用哪个 NTP 服务器即可。

方法 B:安装 ntp 包
sudo apt update sudo apt install ntp
配置 NTP 客户端
对于 systemd-timesyncd:
编辑其配置文件 /etc/systemd/timesyncd.conf:
sudo nano /etc/systemd/timesyncd.conf
找到 [Time] 部分,取消注释并修改 NTP 和 FallbackNTP 行,推荐使用公共 NTP 服务器池。

[Time] NTP=0.cn.pool.ntp.org 1.cn.pool.ntp.org 2.cn.pool.ntp.org 3.cn.pool.ntp.org #FallbackNTP=0.ubuntu.pool.ntp.org 1.ubuntu.pool.ntp.org 2.ubuntu.pool.ntp.org 3.ubuntu.pool.ntp.org
- 国内用户:推荐使用
cn.pool.ntp.org或ntp.aliyun.com等国内服务器池,以获得更快的同步速度和稳定性。 - 国际用户:可以使用
pool.ntp.org。
保存并关闭文件 (在 nano 中按 Ctrl+X,Y,再 Enter)。
对于 ntp 包:
编辑主配置文件 /etc/ntp.conf:
sudo nano /etc/ntp.conf
在文件中,你可以看到一些默认的 NTP 服务器,你可以保留它们,或者添加/修改为你选择的 NTP 服务器池。
# 使用公共服务器池 server 0.cn.pool.ntp.org server 1.cn.pool.ntp.org server 2.cn.pool.ntp.org server 3.cn.pool.ntp.org # 或者使用阿里云的NTP服务器 # server ntp.aliyun.com # 允许其他客户端同步时间(如果你之后想把它变成服务器,取消这行的注释) # restrict default nomodify notrap nopeer noquery
重启并启用 NTP 服务
对于 systemd-timesyncd:
# 重启服务以应用新配置 sudo systemctl restart systemd-timesyncd # 设置为开机自启 sudo systemctl enable systemd-timesyncd # 检查服务状态 systemctl status systemd-timesyncd
对于 ntp 包:
# 重启服务 sudo systemctl restart ntp # 设置为开机自启 sudo systemctl enable ntp # 检查服务状态 systemctl status ntp
验证时间同步
对于 systemd-timesyncd:
# 查看同步状态 timedatectl status
你会看到类似 "System clock synchronized: yes" 和 "NTP service: active" 的输出。
你也可以使用 ntpq 命令查看与上游服务器的同步详情:
# 安装 ntpq 工具(如果未安装) sudo apt install ntp # 查看同步信息 ntpq -p
ntpq -p 的输出中,remote 列显示上游服务器,when 和 poll 显示同步频率,reach 是一个八进制数,表示连接是否可达,st (stratum) 表示服务器层级,数字越小越权威。
对于 ntp 包:
直接使用 ntpq -p 即可查看同步信息。
将 Ubuntu 服务器配置为内部 NTP 服务器(同步互联网时间并提供给局域网)
如果你的局域网内有多台设备,可以配置一台 Ubuntu 服务器作为内部 NTP 服务器,所有其他设备都从它同步时间,这样可以减少对公共 NTP 服务器的请求,并提高局域网内的时间同步精度。
安装 NTP 服务器软件
sudo apt update sudo apt install ntp
配置 NTP 服务器
编辑 /etc/ntp.conf 文件:
sudo nano /etc/ntp.conf
你需要做两处关键修改:
a. 指定上游时间源
在文件顶部,确保有指向公共 NTP 服务器的 server 指令,用于从互联网同步时间。
# 使用国内服务器池作为上游源 server 0.cn.pool.ntp.org iburst server 1.cn.pool.ntp.org iburst server 2.cn.pool.ntp.org iburst server 3.cn.pool.ntp.org iburst # iburst 选项表示在初始同步时快速发送请求,加快同步速度
b. 允许局域网客户端访问
找到 restrict 相关指令,这是 NTP 的访问控制核心。
- 默认策略:默认情况下,
restrict default nomodify notrap nopeer noquery会阻止所有未明确授权的客户端。nomodify表示客户端不能修改你的服务器时间,noquery表示客户端不能查询你的服务器状态。 - 允许局域网:你需要添加一条规则来允许你的局域网段。
假设你的局域网网段是 168.1.0/24,在文件末尾添加:
# 允许来自 192.168.1.0/24 网段的所有主机进行时间同步 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap noquery # 如果你希望允许客户端查询你的服务器状态(例如使用 ntpq -p),可以添加: # restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict指令详解:ip_address mask: 定义允许的 IP 地址范围。nomodify: 客户端不能修改服务器的时间。notrap: 客户端不能使用ntpd的trap机制。nopeer: 禁止与客户端建立对等体关系(推荐)。noquery: 禁止客户端的ntpq和ntpc查询。server: 完全开放,不推荐用于生产环境。
重启 NTP 服务
sudo systemctl restart ntp sudo systemctl enable ntp
验证服务器状态
在服务器上运行:
# 检查服务状态 systemctl status ntp # 查看与上游服务器的同步情况 ntpq -p
你会看到 remote 列是你在配置文件中设置的公共 NTP 服务器。
验证局域网客户端访问
在另一台 Linux 客户端上,临时指向你的 NTP 服务器进行同步测试:
# 临时同步 sudo ntpdate -q your-ubuntu-server-ip # 或者使用 ntpq 查看你的服务器是否在列表中 ntpq -p your-ubuntu-server-ip
如果能看到你的服务器信息,说明配置成功。
配置 Ubuntu 客户端连接到内部 NTP 服务器
你只需要将局域网内的其他设备(Windows, Linux, macOS 等)的 NTP 配置指向你刚刚设置的 your-ubuntu-server-ip 即可。
在 Ubuntu 客户端上:
编辑 /etc/systemd/timesyncd.conf:
sudo nano /etc/systemd/timesyncd.conf
修改 NTP 行为你的内部服务器:
[Time] NTP=your-ubuntu-server-ip #FallbackNTP=...
然后重启服务:
sudo systemctl restart systemd-timesyncd
使用 timedatectl status 或 ntpq -p 验证是否已从你的内部服务器同步时间。
防火墙配置
如果你的 Ubuntu 服务器启用了 UFW (Uncomplicated Firewall),你需要开放 NTP 服务的 UDP 端口 123。
# 允许 NTP 服务 (推荐方式) sudo ufw allow ntp # 或者直接开放 123/udp 端口 sudo ufw allow 123/udp
故障排除
- 端口未开放:确保防火墙(如 UFW)允许了 UDP 123 端口。
- 时间不同步:检查
/var/log/syslog或/var/log/ntp.log(如果安装了ntp包) 查看错误信息,常见的错误包括网络不通、配置文件语法错误、上游服务器不可达。 stratum值过高:ntpq -p中st(stratum) 值如果很高(如 16),表示时间未同步成功,检查reach值是否为377(八进制),表示与上游服务器连接正常。- 硬件时钟问题:如果服务器重启后时间总是不准,可能是硬件时钟(CMOS/BIOS 时间)有问题,可以使用
hwclock命令手动同步系统时间到硬件时钟:sudo hwclock --systohc
通过以上步骤,你就可以成功地在 Ubuntu 上配置 NTP 服务器或客户端了。
