准确的计时对于几乎所有服务或软件都至关重要。电子邮件、记录器、事件系统和调度程序、用户身份验证机制以及在分布式平台上运行的服务都需要准确的时间戳来按时间顺序记录事件。这些服务使用网络时间协议(NTP)将系统时钟与可信的外部源同步。该源可以是原子钟、GPS 接收器或已使用 NTP 的其他时间服务器。
这就是NTP池项目项目开始发挥作用。它是一个庞大的全球时间服务器集群,为世界各地数千万客户提供轻松访问已知“美好时光”的服务。它是 Ubuntu 和大多数其他主要 Linux 发行版以及许多网络设备和软件应用程序的默认时间服务器。
在本指南中,您将在服务器上设置 NTP 并将其配置为 NTP 池项目的一部分,以便为 NTP 池项目的其他用户提供准确的时间。提供空闲的 CPU 周期和未使用的带宽是回馈社区的完美方式。
所需的带宽相对较低,可以根据您可以提供的数量和服务器所在的位置进行调整。每个客户端每 20 分钟仅发送几个 UDP 数据包,因此大多数服务器每秒仅接收大约十几个 NTP 数据包,每天会出现几次峰值,每秒最多可达一百个数据包。这意味着带宽使用率为 10-15Kb/秒,峰值为 50-120Kb/秒。
加入 NTP 池项目之前,您必须满足三个基本要求:
- 您的服务器必须有一个静态 IP 地址。
- 您的服务器必须具有永久且稳定的互联网连接。
- 您的 IP 地址通常不会改变,或者很少改变(每年一次或更少)。
对于大多数基于云的服务器,通常会自动满足前两个要求。第三个要求强调加入NTP池项目构成长期承诺。当然,如果您的情况发生变化,可以将服务器从池中取出,但需要很长时间(大多数是几周,但有时是几个月甚至几年)流量才会完全消失。
要完成本教程,您将需要:
- 一台配置了 IPv6 网络的 Ubuntu 16.04 服务器。如果您需要在现有 Droplet 上配置 IPv6 网络,您可以按照本教程.
- sudo 非 root 用户和防火墙,您可以按照以下步骤进行设置使用 Ubuntu 16.04 教程进行初始服务器设置.
默认情况下不安装 NTP 包,因此您将使用包管理器来安装它。首先,更新你的包:
然后安装NTP:
如果您已按照先决条件中指定的方式配置了防火墙,则必须允许端口上的 UDP 流量123
为了与 NTP 池通信:
有关 UFW 的更多信息,请参阅如何在 Ubuntu 上使用 UFW 设置防火墙.
NTP 现已安装,但配置为使用默认 NTP 池时间服务器。让我们选择一些特定的时间服务器。
NTP Pool项目要求想要加入该池的运营商选择良好的网络本地时间服务器,而不是使用默认的pool.ntp.org
服务器。这确保了 NTP 池项目保持可靠、快速和健康。选择时间源时,您需要稳定的网络连接,无数据包丢失,并且服务器之间的跳数尽可能少。
多层、分层的 NTP 协议将涉及的各方分为主服务器、辅助服务器和客户端。主服务器称为第 1 层并直接连接到时间源,称为层数 0。该源可以是原子钟、GPS 接收器或无线电导航系统。链中的辅助服务器称为第2层, 第3层等等。
每个服务器也是一个客户端。 Stratum 2 客户端从上游 Stratum 1 服务器接收时间,并向下游 Stratum 3 服务器或其他客户端提供时间。为了使 NTP 池项目成员正常工作,NTP 守护程序需要至少配置三台服务器。该项目建议至少四个且不超过七个来源。
NTP 池项目提供了公共 Stratum 1 和 Startum 2 时间服务器的列表。该列表指定了在规定限制下可供公众访问的 NTP 时间服务器。你会发现三种类型:
-
开放存取:该时间服务器对任何符合NTP池的客户端开放使用建议.
-
禁止进入:除了 NTP 池使用建议之外,此时间服务器还有一些访问限制。
-
封闭访问:本次服务器已关闭或需要提前安排。
Warning:不要使用未列出的服务器开放存取除非您已获得这样做的批准。
参观层 1 时间服务器列表。您将看到如下所示的列表:
![Stratum 1 servers](https://assets.digitalocean.com/articles/ntp_pool_1604/xKuLDZe.png)
对列表进行排序ISO code列并查找地理位置靠近您的服务器数据中心的一台或两台服务器。当服务器的准入政策列状态开放存取,您可以毫无问题地使用它。如果显示“限制访问”,请单击以打开该条目并阅读其中注明的说明访问详情场地。很多时候,你会发现通知消息被设定为Yes,这意味着您必须制作一封非正式电子邮件,发送至中提供的地址服务器联系方式,通知服务器操作员您希望使用此时间服务器作为 NTP 池项目成员的时间源。
确定要使用的服务器后,单击列表中每个服务器的链接ISO列并复制其主机名或 IP 地址。您将在步骤 3 中使用这些地址。
接下来,从服务器中选择三到四台服务器第2层列表,遵循相同的过程。
选择时间服务器后,就可以配置 NTP 客户端以使用它们了。
要将您的服务器与 NTP 池一起使用并配置新的时间服务器,您需要对 NTP 守护程序的配置进行一些修改。为此,请编辑/etc/ntp.conf
file:
首先,确保漂移文件已配置。漂移文件存储以其标称频率运行的系统时钟与与正确时间保持同步所需的频率之间的频率偏移。它有助于实现稳定且准确的时间。在默认安装中,您应该在配置文件的顶部找到此内容:
/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
or pool ntp.ubuntu.com
。如果您使用默认配置,请删除突出显示的行:
/etc/ntp.conf
# 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
关键词。
/etc/ntp.conf
...
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
...
我们使用iburst
根据 NTP 池建议,每个服务器的选项。这样,如果服务器无法访问,则会发送八个数据包,而不是通常的一个数据包。使用burst
NTP池项目中的选项被认为是滥用,因为它会在每个轮询间隔发送这八个数据包,而iburst
仅第一次发送八个数据包。
接下来,确保默认配置不允许管理查询。如果不这样做,您的服务器可能会被用于 NTP 反射攻击,或者可能容易受到ntpq
and ntpdc
尝试修改服务器状态的查询。检查是否noquery
选项被添加到默认值restrict
lines:
/etc/ntp.conf
...
# 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 守护程序配置文件现在应如下所示,尽管您的文件可能有其他注释,您可以安全地忽略它们:
/etc/ntp.conf
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 服务,让您的时间服务器将其时钟同步到上游服务器。
-
sudosystemctl 重新启动 ntp.service
几分钟后,使用以下命令检查时间服务器的运行状况ntpq
命令:
输出应类似于以下内容:
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
The remote列告诉您 NTP 守护程序正在使用的服务器的主机名,以及refid列告诉您服务器正在使用的源。因此对于 Stratum 1 服务器来说,refid字段应显示GPS, PPS, ACTS, or PTB,并且Stratum 2及更高级别的服务器将显示上游服务器的IP地址。这st列显示层,并且delay, offset and jitter告诉您时间源的质量。这三个字段的值越低越好。
您的时间服务器现在可以向公众提供时间。您可以通过致电来验证这一点ntpdate
来自另一位主机:
- ntpdate -q your_server_ip
输出应该与此类似,它告诉您它调整了时间服务器和偏移量:
Output
server 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 服务器,以便其他人可以使用它。
要添加您的服务器以便其他人可以使用它,请访问管理.ntppool.org并注册一个帐户。您将收到一封电子邮件NTP池help@ntppool.org要求您验证您的帐户。按照电子邮件中的说明确认您的帐户,然后登录管理.ntppool.org.
登录后,您将看到添加服务器的简单界面:
![Add a server](https://assets.digitalocean.com/articles/ntp_pool_1604/Dz9mF7r.png)
输入服务器的 IP 地址并单击Submit.
下一个屏幕要求您验证它是否识别了您的服务器区域。如果它显示您的服务器位于与您预期不同的区域,请使用Comment框让他们知道。
![The verification screen](https://assets.digitalocean.com/articles/ntp_pool_1604/5KAEluI.png)
如果您满意,请单击确认输入是的,这是我的服务器,添加它!
Your server is now part of the NTP Pool Project. Visit http://www.pool.ntp.org/scores/your_server_ip
to see information the NTP Pool’s monitoring system has collected about your server. It checks your server a few times per hour and displays offset data, alog with the score of your system. As long as your server is keeping good time and is reachable, the score will rise untill it reaches 20 points. Only servers with a score higher than 10 are used in the pool.
如果您在同步服务器时遇到问题,您可能安装了数据包防火墙,从而丢弃了您的服务器outgoing端口上的数据包123
。看一眼如何在 Ubuntu 上使用 UFW 设置防火墙了解如何检查防火墙的状态。
如果 NTP 池项目的监控站无法到达您的 NTP 服务器并且您的服务器分数正在下降,或者您无法使用您的服务器同步其他时钟,则您可能有一个数据包防火墙,会丢弃您的incoming港口流量123
。检查您的防火墙状态。
如果您确定没有安装防火墙,或者您已打开端口123
对于传入和传出流量,您的服务器提供商或其他传输提供商可能会沿途丢弃您的数据包。如果您不具备自行解决这些问题的知识,最好向社区寻求帮助。这NTP 池项目论坛是一个很好的起点。您还可以加入邮件列表 or 发送电子邮件给 NTP 池项目运营商。在寻求帮助之前,请确保您可以展示您已尝试解决问题的所有步骤。
在本教程中,您成功设置了自己的时间服务器并使其成为 NTP 池项目的成员,为社区提供时间服务。与计时社区保持联系。加入NTP 池项目论坛 or the 邮件列表。请务必监控服务器的分数并进行必要的调整。