跳至内容
liuzhen932 的小窝
返回

在 Debian 13 (Trixie) 上使用 ntpd-rs 搭建 NTP 服务

0x00 开始之前..

NTP(Network Time Protocol)服务器是一种用于同步网络时间的服务,可以确保计算机、网络设备以及其他设备的时间一致性。对于需要高精度时间同步的应用,自建 NTP 服务器可以提供更为可靠的时间同步服务。NTP 自 1985 年之前开始运行,是目前使用的最古老的互联网协议之一。

我们在生活中常用的 Windows、MacOS 和 Linux 等基本都自带了 NTP 客户端,可以连接远程服务器获取当前的时间。在 Windows 上,这项功能被称作「Internet 时间同步」。不过,Windows 默认会连接到 time.windows.com NTP 服务器同步时间,默认的服务器到国内的延迟很大并且容易受晚高峰等因素影响波动,在这种条件下 NTP 客户端也很难得出准确的时间(所以有人电脑快/慢五分钟也不足为奇了)

0x01 为啥要自建 NTP 服务器

显然,中国大陆是有很多 NTP 服务器的,我从中挑选了几个可用或有历史代表意义的出来单独讲讲:

回到正题,如果你很好奇自建 NTP 到底有什么用,我列举了这些常见的用途:

  1. 跨地区数据同步:如果需要跨地区同步,有一个准确的时间是非常重要的,这在一些时间戳的生成上有非常好的体现
  2. 大型企业、数据中心、云平台、集群系统都需要所有节点时间高度一致,否则会导致日志混乱、短效证书错误过期等问题
  3. 机房禁连接 NTP 以防反射攻击,于是在内网自建 NTP 以同步时间

0x02 环境准备

请注意,这是一篇由软件实现 NTP 服务器的文章,这里不会有硬件购买推荐部分。

  1. 一台能同步时间的服务器 / 树莓派 (Pi Zero 就够了)

如果你还没有好的服务器,可以前往 雨云 购买一台,使用我的优惠码 lz932 获得新人无门槛优惠券!

  1. 这篇文章

貌似互联网并没有真人撰写的 ntpd-rs 安装配置教程,故你很大概率需要这篇文章。你可以可以在这里阅读 官方文档

  1. 趁手的 SSH 连接工具

这条并没有带货环节,我倾向于使用 openssh-client 或者跳板机的网页界面。

0x03 安装 ntpd-rs

在 Debian 13 上,我推荐使用官方提供的预编译包安装 ntpd-rs,这样可以自动配置路径、用户和权限。默认配置文件位于 /etc/ntpd-rs/ntp.toml

下载 .deb 包

从官方的发行版页面下载符合自己架构的 .deb 包,这里我下载的是 ./ntpd-rs_1.7.0.alpha.20251003-1_amd64.deb(仅供参考)

wget https://github.com/pendulum-project/ntpd-rs/releases/download/v1.6.2/./ntpd-rs_1.7.0.alpha.20251003-1_amd64.deb

# --2077-10-12 04:34:42--  https://github.com/pendulum-project/ntpd-rs/releases/download/v1.6.2/./ntpd-rs_1.7.0.alpha.20251003-1_amd64.deb
# Resolving github.com (github.com)... 20.205.243.166
# Connecting to github.com (github.com)|20.205.243.166|:443... connected.
# HTTP request sent, awaiting response...

使用 dpkg / apt 安装

这里按文档,我使用 dpkg 安装:

dpkg -i ././ntpd-rs_1.7.0.alpha.20251003-1_amd64.deb

# (Reading database ... 35597 files and directories currently installed.)
# Preparing to unpack .../ntpd-rs_1.7.0.alpha.20251003-1_amd64.deb ...
# Unpacking ntpd-rs (1.7.0~alpha.20251003-1) over (1.5.0-1) ...
# Setting up ntpd-rs (1.7.0~alpha.20251003-1) ...

安装完成后使用 ntp-ctl -v 查看一下版本:

ntp-ctl -v
# ntp-ctl 1.7.0-alpha.20251003

0x04 配置你的 NTP 服务器

ntpd-rs 使用 TOML 格式的配置文件

默认情况下,ntpd-rs 仅充当 NTP 客户端,不在任何网络接口上提供 NTP 服务。我们要为 ntpd-rs 启用服务器功能,在配置中添加以下内容:

# /etc/ntpd-rs/ntp.toml
[[server]]
listen = "0.0.0.0:123"

这将使 ntpd-rs 监听所有网络接口上的 123/udp 以接收 NTP 客户端的请求。如果在您的使用条件下仅需监听特定网络接口(如内网),请将 0.0.0.0 替换为该接口的 IP 地址(如 10.0.0.1)。

配置访问权限

在一些情况(比如混杂的内网)你可能需要只允许特定范围的子网访问您的服务器,这时候可以使用 允许列表机制 功能:

# /etc/ntpd-rs/ntp.toml
[[server]]
listen = "0.0.0.0:123"
[server.allowlist]
filter = ["<ipv4 1>/32", "<ipv4 2>/32", "<ipv6 1>/128"]
action = "ignore"

允许列表和拒绝列表配置在 ntpd-rs 中都是可选的。默认情况下如果配置了服务器,它将接受来自任何地方的流量。在配置允许列表和拒绝列表时,ntpd-rs 将首先检查远程是否在拒绝列表中;只有当情况并非如此时,才会考虑允许列表。

allowlist.actiondenylist.action 属性可以有两个值:

如果你不想被扫描到正在提供 NTP 服务,我推荐使用 ignore 静默忽略

配置时间池

默认的 ntpd-rs 配置中已经包含了来自 NTPPool 的服务器池,我们可以手动配置其他的源以降低延迟和提高精度:

# /etc/ntpd-rs/ntp.toml
[[source]]
mode = "pool"
address = "ntp.ntsc.ac.cn"
count = 2 # 从服务器池检索两个服务器用于同步时间

[[source]]
mode = "server"
address = "ntp3.aliyun.com" # 单一服务器用于同步时间

[[source]]
mode = "server"
address = "ntp.tencent.com"

这里的 source 支持不同类型的源,源的类型及其简要介绍如下:

使用 ntp-ctl 查看状态

# ntp-ctl
ntp-ctl - NTP 守护进程监控工具

用法
ntp-ctl validate [-c PATH]
       ntp-ctl status [-f FORMAT]
ntp-ctl force-sync [-c PATH]
ntp-ctl -h | ntp-ctl -v [-c PATH]
       ntp-ctl force-sync [-c PATH]
       ntp-ctl -h | ntp-ctl -v

选项
  -f, --format                  用于打印统计信息的格式 [plain, prometheus]
  -c, --config                  读取套接字路径的配置文件
  -h, --help                    显示此帮助文本
  -v, --version                 显示版本信息

我们需要使用 ntp-ctl status 来查看状态:

# ntp-ctl status

Synchronization status:
Dispersion: 0.001152s, Delay: 0.000048s
Stratum: 3

Sources:
ntp.tencent.com:123/106.55.184.199:123 (4): -0.003312±0.000826(±0.028514)s
    poll interval: 1024s, missing polls: 0
    root dispersion: 0.035934s, root delay:0.000534s

Servers:
[::]:123: received 28, accepted 11, errors 0
    denied 0, nts nak 0, rate limited 0, ignored 17

0x06 使用客户端测试

我们可以使用各类客户端同步时间,以确认服务器是否正常运行,最简单的方式是在另一台机器上安装并配置 ntpd-rs,然后使用 ntp-ctl 查看时间同步进度。

在 Windows 控制中心 -> 日期和时间 -> Internet 时间 里我们可以找到配置 NTP 服务器的地方,配置完成后前往服务器查看状态中 accepted 值是否有变化,随后打开 []time.is](https://time.is/UTC) 查看自己电脑时间是否准确吧!

0x07 安全

(未完待续…)

0x08 总结

至此,我们已经成功在 Debian 13 (Trixie) 系统上部署并配置了 ntpd-rs NTP 服务。通过本文的指引,你不仅搭建了一个功能完整的 NTP 服务器,还掌握了其核心配置项,包括如何启用服务器模式、设置监听地址、配置访问控制列表以及优化时间源选择。

自建 NTP 服务器的意义远不止于让自己的电脑时间更准。在企业级应用中,它是保障系统日志一致性、分布式事务正确性、安全证书有效性乃至整个业务稳定运行的基石。对于追求技术深度的爱好者而言,这也是理解时间同步协议、网络基础设施和系统运维的一个绝佳实践项目。

ntpd-rs 作为一款现代、高性能且安全的 NTP 守护进程,其基于 Rust 编写,具有内存安全和并发处理的优势,非常适合用于生产环境。它提供了灵活的配置选项,能够满足从个人实验室到大型数据中心的各种需求。在我近六个月的生产环境测试中,ntpd-rs 表现出了极高的稳定性和可靠性。如您有任何问题,欢迎随时留言讨论。

参考资料

官方文档与安装指南

公共时间源

技术与协议


分享这篇文章:

上一篇
使用 HAProxy 代理 Forgejo 的 SSH 访问
下一篇
记一次被 Github Banned 的经历

人机验证:请刷新页面以加载评论区