如何配置 NTP 以在 Ubuntu 16.04 上的 NTP 池项目中使用
介绍
准确计时对几乎所有服务或软件都至关重要。电子邮件、记录器、事件系统和调度程序、用户身份验证机制以及在分布式平台上运行的服务都需要准确的时间戳来按时间顺序记录事件。这些服务使用网络时间协议或 NTP 将系统时钟与受信任的外部源同步。此源可以是原子钟、GPS 接收器或已使用 NTP 的其他时间服务器。
这就是 NTP Pool Project 项目发挥作用的地方。它是一个庞大的全球时间服务器集群,为全球数千万客户提供对已知“美好时光”的轻松访问。它是 Ubuntu 和大多数其他主要 Linux 发行版以及许多联网的默认时间服务器设备和软件应用程序。
在本指南中,您将在服务器上设置 NTP 并将其配置为 NTP 池项目的一部分,以便为 NTP 池项目的其他用户提供准确的时间。提供您的空闲 CPU 周期和未使用的带宽是回馈社区的完美方式。
所需的带宽相对较低,可以根据您可以提供的数量和您的服务器所在的位置进行调整。每个客户端每 20 分钟只会发送几个 UDP 数据包,因此大多数服务器每秒只接收大约十几个 NTP 数据包,每天有几次峰值每秒最多一百个数据包。这转化为 10-15Kb/秒的带宽使用,峰值为 50-120Kb/秒。
在加入 NTP 矿池项目之前,您必须满足三个基本要求:
- 您的服务器必须有静态 IP 地址。
- 您的服务器必须具有永久稳定的互联网连接。
- 您的 IP 地址几乎不会改变,或者只是很少改变(一年一次或更少)。
对于大多数基于云的服务器,通常会自动满足前两个要求。第三个要求强调加入 NTP 矿池项目构成长期承诺。当然,如果您的情况发生变化,从池中取出一台服务器也无妨,但需要很长时间(通常是数周,但有时数月甚至数年),流量才会完全消失。
先决条件
要完成本教程,您需要:
- 一台配置了 IPv6 网络的 Ubuntu 16.04 服务器。如果您需要在现有的 Droplet 上配置 IPv6 网络,您可以按照本教程进行操作。
- sudo 非根用户和防火墙,您可以按照使用 Ubuntu 16.04 进行初始服务器设置教程进行设置。
第 1 步 — 安装 NTP
默认情况下未安装 NTP 包,因此您将使用包管理器来安装它。首先,更新你的包:
- sudo apt-get update
然后安装NTP:
- sudo apt-get install ntp
如果您已按照先决条件中指定的方式配置防火墙,则必须允许端口 123
上的 UDP 流量才能与 NTP 池通信:
- sudo ufw allow 123/udp
有关 UFW 的更多信息,请参阅如何在 Ubuntu 上使用 UFW 设置防火墙。
现在已安装 NTP,但它被配置为使用默认的 NTP 池时间服务器。让我们选择一些特定的时间服务器。
第 2 步 — 选择合适的上游服务器
NTP Pool 项目要求想要加入池的操作员选择好的网络本地时间服务器,而不是使用默认的 pool.ntp.org
服务器。这确保了 NTP 矿池项目保持可靠、快速和健康。选择时间源时,您需要稳定的网络连接,没有丢包,并且服务器之间的跳数尽可能少。
多层和分层的 NTP 协议将参与方分为主服务器、辅助服务器和客户端。主服务器称为 Stratum 1 并直接连接到时间源,称为 Stratum 0。该源可以是原子钟、GPS 接收器或无线电导航系统。链中的二级服务器称为Stratum 2、Stratum 3 等等。
每个服务器也是一个客户端。 Stratum 2 客户端从上游 Stratum 1 服务器接收时间,并向下游 Stratum 3 服务器或其他客户端提供时间。为了使 NTP Pool Project 成员正常工作,NTP 守护进程至少需要配置三台服务器。该项目建议至少有四个,但不超过七个来源。
NTP 池项目提供了公共 Stratum 1 和 Startum 2 时间服务器的列表。这些列表指定了在规定限制下可供公众访问的 NTP 时间服务器。你会发现三种类型:
- OpenAccess:该时间服务器对任何符合 NTP 池使用建议的客户端开放。
- RestrictedAccess:除了 NTP 池使用建议之外,此时间服务器还有一些访问限制。
- ClosedAccess:此时服务器关闭或需要事先安排。
警告:不要使用未列为 OpenAccess 的服务器,除非您已获得批准。
访问 Stratum 1 时间服务器列表。您会看到如下列表:

按 ISO 代码列对列表进行排序,并找到一个或两个在地理位置上靠近您的服务器数据中心的服务器。当服务器的访问策略列显示 OpenAccess 时,您可以毫无问题地使用它。如果显示 \RestrictedAccess,请单击以打开条目并阅读 AccessDetails 字段中注明的说明。通常,您会发现 NotificationMessage 设置为 Yes,这意味着您必须制作一封指向所提供地址的非正式电子邮件在 ServerContact 中,通知服务器操作员您希望将此时间服务器用作您的 NTP 池项目成员的时间源。
确定要使用的服务器后,单击 ISO 列中每个服务器的链接并复制其主机名或 IP 地址。您将在第 3 步中使用这些地址。
接下来,按照相同的过程从 Stratum 2 列表中选择三台或四台服务器。
选择时间服务器后,就可以配置 NTP 客户端以使用它们了。
第 3 步 - 配置 NTP 以加入池
要将您的服务器与 NTP 池一起使用,并配置您的新时间服务器,您需要对 NTP 守护程序的配置进行一些修改。为此,编辑 /etc/ntp.conf
文件:
- sudo nano /etc/ntp.conf
首先,确保配置了一个漂移文件。漂移文件存储以标称频率运行的系统时钟与与正确时间保持同步所需的频率之间的频率偏移。它有助于实现稳定和准确的时间。您应该在默认安装的配置文件顶部找到它:
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
driftfile /var/lib/ntp/ntp.drift
...
接下来,从配置中删除默认时间源条目。您正在寻找所有属于 pool [0-3].ubuntu.pool.ntp.org iburst
或 pool ntp.ubuntu.com
模式的行。如果您使用的是默认配置,请删除突出显示的行:
# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
pool 2.ubuntu.pool.ntp.org iburst
pool 3.ubuntu.pool.ntp.org iburst
# Use Ubuntu's ntp server as a fallback.
pool ntp.ubuntu.com
使用 server
关键字而不是 pool
关键字,将您删除的行替换为您在上一步中选择的精选服务器。
...
server ntp_server_hostname_1 iburst
server ntp_server_hostname_2 iburst
server ntp_server_hostname_3 iburst
server ntp_server_hostname_4 iburst
server ntp_server_hostname_5 iburst
...
根据 NTP 池建议,我们为每个服务器使用 iburst
选项。这样,如果服务器无法访问,这将发送一连串的八个数据包,而不是通常的一个数据包。在 NTP 池项目中使用 burst
选项被认为是滥用,因为它会在每个轮询间隔发送这八个数据包,而 iburst
仅在第一次发送这八个数据包。
接下来,确保默认配置不允许管理查询。如果不这样做,您的服务器可能会被用于 NTP 反射攻击,或者可能容易受到试图修改服务器状态的 ntpq
和 ntpdc
查询的攻击。检查是否将 noquery
选项添加到默认的 restrict
行:
...
# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1
您可以在官方文档中找到有关其他选项的更多信息。
您的 NTP 守护程序配置文件现在应该如下所示,尽管您的文件可能有其他注释,您可以安全地忽略它们:
driftfile /var/lib/ntp/ntp.drift
server ntp_server_hostname_1 iburst
server ntp_server_hostname_2 iburst
server ntp_server_hostname_3 iburst
server ntp_server_hostname_4 iburst
server ntp_server_hostname_5 iburst
# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1
保存文件并退出编辑器。
现在重新启动 NTP 服务并让您的时间服务器将其时钟同步到上游服务器。
- sudo systemctl restart ntp.service
几分钟后,使用 ntpq
命令检查时间服务器的健康状况:
- ntpq -p
输出应与此类似:
Output remote refid st t when poll reach delay offset jitter
==============================================================================
mizbeaver.udel. .INIT. 16 u - 64 0 0.000 0.000 0.000
montpelier.ilan .GPS. 1 u 25 64 7 55.190 2.121 130.492
+nist1-lnk.binar .ACTS. 1 u 28 64 7 52.728 23.860 3.247
*ntp.okstate.edu .GPS. 1 u 31 64 7 19.708 -8.344 6.853
+ntp.colby.edu .GPS. 1 u 34 64 7 51.518 -5.914 6.669
remote 列告诉您 NTP 守护程序正在使用的服务器的主机名,refid 列告诉您服务器正在使用的源。因此,对于 Stratum 1 服务器,refid 字段应显示 GPS、PPS、ACTS 或 PTB,而 Stratum 2 及更高级别的服务器将显示上游服务器的 IP 地址。 st 列显示层,延迟、偏移和抖动告诉您时间源的质量。这三个字段的值越低越好。
您的时间服务器现在可以向公众提供时间。您可以通过从另一台主机调用 ntpdate
来验证这一点:
- ntpdate -q your_server_ip
输出应该类似于此,它告诉您它调整了时间服务器和偏移量:
Outputserver your_server_ip, stratum 2, offset 0.001172, delay 0.16428
2 Mar 23:06:44 ntpdate[18427]: adjust time server your_server_ip offset 0.001172 sec
您现在已准备好向 NTP 池项目注册您的 NTP 服务器,以便其他人可以使用它。
第 4 步 — 将服务器添加到 NTP 池
要添加您的服务器以便其他人可以使用它,请访问 manage.ntppool.org。
登录后,您将看到用于添加服务器的简单界面:

输入服务器的 IP 地址,然后单击提交。
下一个屏幕要求您验证它是否识别了您的服务器区域。如果它显示您的服务器与您预期的区域不同,请使用评论框让他们知道。

如果您满意,请单击是的确认条目,这是我的服务器,添加它!
您的服务器现在是 NTP 池项目的一部分。访问 http://www.pool.ntp.org/scores/your_server_ip
以查看 NTP 池的监控系统收集的关于您的服务器的信息。它每小时检查您的服务器几次并显示偏移量数据,以及您系统的分数。只要您的服务器保持良好的时间并且可以到达,分数就会上升,直到达到 20 分。池中仅使用得分高于 10 的服务器。
排除连接问题
如果您在让您的服务器同步时遇到问题,您可能安装了数据包防火墙,将您的传出数据包丢弃在端口 123
上。查看如何在 Ubuntu 上使用 UFW 设置防火墙,了解如何检查防火墙的状态。
如果 NTP Pool Project 的监控站无法连接到您的 NTP 服务器并且您的服务器分数正在下降,或者您无法使用您的服务器同步其他时钟,您可能有一个数据包防火墙来丢弃您的传入 端口 123
上的流量。检查您的防火墙状态。
如果您确定您没有安装防火墙,或者您已经为传入和传出流量打开端口 123
,则您的服务器提供商或其他传输提供商可能会在途中丢弃您的数据包。如果您不具备自行解决这些问题的知识,最好求助于社区并寻求帮助。向 NTP 矿池项目运营商发送电子邮件。在寻求帮助之前,请确保您可以展示您已尝试解决问题的所有步骤。
结论
在本教程中,您成功设置了自己的时间服务器并使其成为 NTP 池项目的成员,为社区提供时间服务。与计时社区保持联系。加入邮件列表。请务必监控服务器的分数并进行必要的调整。