本文最后更新于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 地址即可。

文章目录