使用树莓派搭建 NTP 服务器
本文最后更新于2025年06月15日;如遇到问题,请及时留言告知。
在网络通信中,时间同步对于许多设备和系统都非常重要。 网络时间协议(NTP)—— Network Time Protocol 是一种常用的协议,用于在计算机网络中同步系统时钟。 NTP 时间同步的传输协议是UDP,端口号是 123。搭建一个 NTP 服务器可以提供准确的时间同步服务,而树莓派是一个经济实惠且功能强大的选择。本文将介绍树莓派作为 NTP 时间服务器的配置方法。
1. 准备工作
在开始之前,请确保你已经拥有一台树莓派并安装了最新的Raspbian 操作系统。同时,还需要确保你的树莓派已经连接到互联网并能够访问外部网络。
2. 安装 NTP 服务
首先,打开终端工具登录树莓派并更新你的软件包列表:
sudo apt-get update
然后安装 NTP 服务:
sudo apt-get install ntp
3. 配置 NTP 服务
编辑 NTP 服务的配置文件:
sudo nano /etc/ntp.conf
在文件中找到并编辑以下行,将其注释掉(在行前添加#符号):
# pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will
# pick a different set every time it starts up. Please consider joining the
# pool: <http://www.pool.ntp.org/join.html>
#pool 0.debian.pool.ntp.org iburst
#pool 1.debian.pool.ntp.org iburst
#pool 2.debian.pool.ntp.org iburst
#pool 3.debian.pool.ntp.org iburst
然后在下方添加外部的 NTP 服务器,可以添加多个以提高时间同步的准确性:
server cn.ntp.org.cn prefer
server ntp1.aliyun.com prefer
server time.windows.com prefer
server ntp.sjtu.edu.cn prefer
server 127.127.1.0
fudge 127.127.1.0 stratum 8
其中后面两行是将树莓派的硬件时钟作为本地时间源加入
server 127.127.1.0
fudge 127.127.1.0 stratum 8
fudge 127.127.1.0 stratum 8 明确地声明本地时钟源的层级,并确保其他 NTP 客户端正确理解其在整个 NTP 网络中的位置。 在 NTP 服务器配置文件中添加"fudge"选项可以对本地时钟源进行调整和控制。 "127.127.1.0"是本地时钟源(通常是指树莓派的硬件时钟)。 Stratum 级别是用于表示 NTP 服务器之间时间同步关系的数字,级别越低表示时间源越接近原子钟,而级别越高表示时间源距离原子钟越远。
其他配置(可选): 在配置文件中加入如下内容以配置 NTP 服务的访问控制,限制外部对 NTP 的访问。:
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
只有 192.168.1.0/24 子网内的设备可以访问 NTP 服务器,并且这些设备不能修改 NTP 服务器的配置,也不能使用 trap 服务。
4. 启动服务并设置服务开机自启
保存并关闭配置文件后, 重启 NTP 服务以应用更改:
sudo systemctl restart ntp
将 NTP 服务设置为在系统启动时自动启动:
sudo systemctl enable ntp
5. 验证 NTP 服务
使用以下命令验证NTP服务器的运行状态:
ntpq -p
可以看到类似以下输出:
remote refid st t when poll reach delay offset jitter
==============================================================================
LOCAL(0) .LOCL. 8 l 30h 64 0 0.000 +0.000 0.000
*2001:da8:9000:: .PTP. 1 u 931 1024 377 45.730 -0.359 0.154
+120.25.115.20 10.137.53.7 2 u 35m 1024 102 49.130 -3.057 0.939
52.231.114.183 25.66.230.3 3 u 230m 1024 0 104.600 +13.147 8.666
+2403:300:a30:30 .MRS. 1 u 682 1024 173 160.644 +52.587 0.142
- remote:指NTP服务器的远程时间源的IP地址或主机名。
- refid:指示了远程时间源所参考的时间源的ID或地址。
- st:表示远程时间源的层级(stratum),数字越小表示层级越低,越接近原子钟。
- t:表示远程时间源的类型,"l"表示本地时钟,"u"表示通过网络连接的其他NTP服务器。
- when:表示距离上次成功与远程时间源通信的时间。
- poll:表示发送到远程时间源的请求间隔时间,以秒为单位。
- reach:表示在最近一段时间内成功与远程时间源通信的次数,取值范围是0-377,最大值377表示通信正常。
- delay:表示NTP请求和响应之间的延迟,以毫秒为单位。
- offset:表示本地系统时间和远程时间源之间的偏移量,以毫秒为单位。正值表示本地系统时间晚于远程时间,负值表示本地系统时间早于远程时间。
- jitter:表示NTP客户端与远程时间源之间的时钟抖动,以毫秒为单位。 在这里:
- LOCAL(0):表示本地时钟源,层级为8(stratum 8),是最基本的时钟源,通常是系统的硬件时钟。 以"*"和"+"标记的时间源被标记为活跃的时间源,表示它们正在被NTP服务器用于时间同步。
在 windows 下测试NTP服务器是否可用:
打开 CMD 工具在命令行界面使用下面的命令可以检测NTP服务器是否可用: 后面的地址为树莓派的地址:
w32tm /stripchart /computer:192.168.10.42
返回以下信息表示NTP服务器正常:
正在跟踪 192.168.10.42 [192.168.10.42:123]。
当前时间是 2024/5/11 18:20:44。
18:20:44, d:+00.0003192s o:+00.7458641s [ | * ]
18:20:46, d:+00.0004045s o:+00.7458275s [ | * ]
18:20:48, d:+00.0003031s o:+00.7458598s [ | * ]
18:20:50, d:+00.0004279s o:+00.7458329s [ | * ]
18:20:52, d:+00.0003587s o:+00.7458339s [ | * ]
18:20:54, d:+00.0004638s o:+00.7457881s [ | *
返回以下信息表示NTP服务器不可用:
正在跟踪 192.168.10.42 [192.168.10.42:123]。
当前时间是 2024/5/11 18:21:34。
18:21:34, 错误: 0x80072746
18:21:36, 错误: 0x80072746
18:21:38, 错误: 0x80072746
18:21:40, 错误: 0x80072746
6. 使用 NTP 服务
在一些设备或系统中,例如摄像头、监控主机等可以配置时间同步的地方填入树莓派的 IP 地址即可。
5
除非特别声明,博文均为原创,转载请注明出处!
版权声明:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 (CC BY-NC-SA 4.0) 进行许可。