凌峰创科服务平台

Ubuntu如何配置NTP服务器?

NTP 简介

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

Ubuntu如何配置NTP服务器?-图1
(图片来源网络,侵删)

将 Ubuntu 服务器配置为仅客户端(从互联网同步时间)

这是最常见的配置,如果你的 Ubuntu 服务器只需要保持时间准确,而不需要为其他设备提供时间服务,请遵循此部分。

安装 NTP 客户端

现代的 Ubuntu 系统通常使用 systemd-timesyncd 作为默认的时间同步服务,它轻量且易于管理,但如果你习惯使用传统的 NTP,也可以安装 ntp 包。

方法 A:使用 systemd-timesyncd(推荐,默认已安装)

这个服务默认已安装并运行,你只需要配置它使用哪个 NTP 服务器即可。

Ubuntu如何配置NTP服务器?-图2
(图片来源网络,侵删)

方法 B:安装 ntp

sudo apt update
sudo apt install ntp

配置 NTP 客户端

对于 systemd-timesyncd

编辑其配置文件 /etc/systemd/timesyncd.conf

sudo nano /etc/systemd/timesyncd.conf

找到 [Time] 部分,取消注释并修改 NTPFallbackNTP 行,推荐使用公共 NTP 服务器池。

Ubuntu如何配置NTP服务器?-图3
(图片来源网络,侵删)
[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.orgntp.aliyun.com 等国内服务器池,以获得更快的同步速度和稳定性。
  • 国际用户:可以使用 pool.ntp.org

保存并关闭文件 (在 nano 中按 Ctrl+XY,再 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 列显示上游服务器,whenpoll 显示同步频率,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: 客户端不能使用 ntpdtrap 机制。
    • nopeer: 禁止与客户端建立对等体关系(推荐)。
    • noquery: 禁止客户端的 ntpqntpc 查询。
    • 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 statusntpq -p 验证是否已从你的内部服务器同步时间。


防火墙配置

如果你的 Ubuntu 服务器启用了 UFW (Uncomplicated Firewall),你需要开放 NTP 服务的 UDP 端口 123

# 允许 NTP 服务 (推荐方式)
sudo ufw allow ntp
# 或者直接开放 123/udp 端口
sudo ufw allow 123/udp

故障排除

  1. 端口未开放:确保防火墙(如 UFW)允许了 UDP 123 端口。
  2. 时间不同步:检查 /var/log/syslog/var/log/ntp.log (如果安装了 ntp 包) 查看错误信息,常见的错误包括网络不通、配置文件语法错误、上游服务器不可达。
  3. stratum 值过高ntpq -pst (stratum) 值如果很高(如 16),表示时间未同步成功,检查 reach 值是否为 377(八进制),表示与上游服务器连接正常。
  4. 硬件时钟问题:如果服务器重启后时间总是不准,可能是硬件时钟(CMOS/BIOS 时间)有问题,可以使用 hwclock 命令手动同步系统时间到硬件时钟:
    sudo hwclock --systohc

通过以上步骤,你就可以成功地在 Ubuntu 上配置 NTP 服务器或客户端了。

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