如何配置NTP以在Ubuntu16.04上的NTP池项目中使用

来自菜鸟教程
跳转至:导航、​搜索

介绍

对于几乎任何服务或软件来说,准确的计时都是至关重要的。 电子邮件、记录器、事件系统和调度程序、用户身份验证机制以及在分布式平台上运行的服务都需要准确的时间戳来按时间顺序记录事件。 这些服务使用网络时间协议或 NTP 将系统时钟与受信任的外部源同步。 此源可以是原子钟、GPS 接收器或其他已使用 NTP 的时间服务器。

这就是 NTP Pool Project 项目发挥作用的地方。 它是一个庞大的全球时间服务器集群,为全球数以千万计的客户提供对已知“好时光”的轻松访问。 它是 Ubuntu 和大多数其他主要 Linux 发行版以及许多联网设备和软件应用程序的默认时间服务器。

在本指南中,您将在您的服务器上设置 NTP 并将其配置为 NTP 池项目的一部分,以便为 NTP 池项目的其他用户提供准确的时间。 提供您的空闲 CPU 周期和未使用的带宽是回馈社区的完美方式。

所需带宽相对较低,可以根据您可以提供的数量和服务器所在的位置进行调整。 每个客户端每 20 分钟只会发送几个 UDP 数据包,因此大多数服务器每秒只接收大约十几个 NTP 数据包,每天会出现几次峰值,每秒最多一百个数据包。 这转化为 10-15Kb/秒的带宽使用,峰值为 50-120Kb/秒。

在加入 NTP 池项目之前,您必须满足三个基本要求:

  1. 您的服务器必须具有静态 IP 地址。
  2. 您的服务器必须具有永久且稳定的互联网连接。
  3. 您的 IP 地址大部分不会更改,或者只是很少更改(一年一次或更少)。

对于大多数基于云的服务器,通常会自动满足前两个要求。 第三个要求强调,加入 NTP Pool 项目是一项长期承诺。 当然,如果您的情况发生变化,可以将服务器从池中取出,但流量完全消失需要很长时间(通常是几周,但有时是几个月甚至几年)。

先决条件

要完成本教程,您需要:

  • 一台配置了 IPv6 网络的 Ubuntu 16.04 服务器。 如果您需要在现有的 Droplet 上配置 IPv6 网络,您可以按照 本教程
  • 一个 sudo 非 root 用户和一个防火墙,您可以按照 Initial Server Setup with 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.ntp.org 服务器。 这确保了 NTP 池项目保持可靠、快速和健康。 选择时间源时,您需要稳定的网络连接,不会丢失数据包,并且服务器之间的跳数尽可能少。

多层和分层的 NTP 协议将参与方分为主服务器、辅助服务器和客户端。 主服务器称为Stratum 1,直接连接到时间源,称为Stratum 0。 该源可以是原子钟、GPS 接收器或无线电导航系统。 链中的二级服务器称为Stratum 2Stratum 3等。

每个服务器也是一个客户端。 Stratum 2 客户端从上游的 Stratum 1 服务器接收时间,并为下游的 Stratum 3 服务器或其他客户端提供时间。 为了使 NTP 池项目成员正常工作,NTP 守护程序需要至少配置三台服务器。 该项目建议至少四个,不超过七个来源。

NTP 池项目提供了公共 Stratum 1 和 Startum 2 时间服务器的列表。 这些列表指定了在规定限制下可供公众访问的 NTP 时间服务器。 你会发现三种类型:

  • OpenAccess:此时间服务器对任何符合 NTP 池 使用建议 的客户端开放。
  • RestrictedAccess:除了 NTP Pool 使用建议之外,这个时间服务器还有一些访问限制。
  • ClosedAccess:本次服务器关闭或需要提前安排。

警告:除非您已获得批准,否则请勿使用未列为 OpenAccess 的服务器。


访问 Stratum 1 时间服务器列表。 您将看到如下列表:

ISO 代码 列对列表进行排序,并找到地理位置靠近服务器数据中心的一到两台服务器。 当服务器的 Access Policy 列状态为 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

首先,确保配置了 driftfile。 漂移文件存储以标称频率运行的系统时钟与保持与正确时间同步所需的频率之间的频率偏移。 它有助于实现稳定和准确的时间。 您应该在默认安装的配置文件顶部找到它:

/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 iburstpool 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
...

根据 NTP 池建议,我们为每个服务器使用 iburst 选项。 这样,如果服务器无法访问,这将发送八个数据包的突发,而不是通常的一个数据包。 在 NTP 池项目中使用 burst 选项被认为是滥用,因为它会在每个轮询间隔发送这八个数据包,而 iburst 仅在第一次发送这八个数据包。

接下来,确保默认配置不允许管理查询。 如果不这样做,您的服务器可能会被用于 NTP 反射攻击,或者容易受到试图修改服务器状态的 ntpqntpdc 查询的攻击。 检查 noquery 选项是否添加到默认的 restrict 行:

/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 服务,让您的时间服务器将其时钟同步到上游服务器。

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 字段应显示 GPSPPSACTSPTB,并且 Stratum 2 和更高级别的服务器将显示上游服务器的 IP 地址。 st列显示层,delayoffsetjitter告诉你时间源的质量。 这三个字段的值越低越好。

您的时间服务器现在可以向公众提供时间。 您可以通过从另一台主机调用 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 并注册一个帐户。 您将收到一封来自 NTP Pool help@ntppool.org 的电子邮件,要求您验证您的帐户。 按照电子邮件中的说明确认您的帐户,然后登录到 manage.ntppool.org

登录后,您将看到添加服务器的简单界面:

输入您的服务器的 IP 地址,然后单击 提交

下一个屏幕要求您验证它是否识别了您的服务器的区域。 如果它显示您的服务器位于与您预期不同的区域,请使用 Comment 框让他们知道。

如果满意,点击【X48X】确认输入是的,这是我的服务器,添加!【X83X】

您的服务器现在是 NTP 池项目的一部分。 访问 http://www.pool.ntp.org/scores/your_server_ip 以查看 NTP 池的监控系统收集的有关您的服务器的信息。 它每小时检查您的服务器几次并显示偏移数据,与您系统的 score 保持一致。 只要您的服务器保持良好的时间并且可以到达,分数就会上升,直到达到 20 分。 池中仅使用分数高于 10 的服务器。

解决连接问题

如果您无法让您的服务器同步,您可能有一个数据包防火墙,在端口 123 上丢弃了您的 outgoing 数据包。 查看 如何在 Ubuntu 上使用 UFW 设置防火墙以了解如何检查防火墙的状态。

如果 NTP 池项目的监控站无法访问您的 NTP 服务器并且您的服务器分数正在下降,或者您无法使用您的服务器同步其他时钟,您可能有一个数据包防火墙丢弃了您的 ' 端口 123 上的流量。 检查您的防火墙状态。

如果您确定没有防火墙,或者您已经为传入和传出流量打开了端口 123,则您的服务器提供商或其他传输提供商可能会在途中丢弃您的数据包。 如果您不具备自行解决这些问题的知识,最好求助于社区并寻求帮助。 NTP 池项目论坛 是一个很好的起点。 您也可以加入 邮件列表发送电子邮件 给 NTP 池项目运营商。 在寻求帮助之前,请确保您可以展示您已尝试解决问题的所有步骤。

结论

在本教程中,您成功设置了自己的时间服务器,并使其成为 NTP 池项目的成员,为社区提供时间服务。 与计时社区保持联系。 加入 NTP 池项目论坛邮件列表。 请务必监控服务器的分数并进行必要的调整。