引言

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

这就是 NTP 池项目开始发挥作用的地方。 它是一个巨大的世界范围的时间服务器集群,为全世界数以千万计的客户提供了方便的“好时光”访问。 它是 Ubuntu 和大多数其他主流 Linux 发行版的默认时间服务器,以及许多网络设备和软件应用程序。

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

所需的带宽相对较低,可以根据您能够提供的数量和服务器所在的位置进行调整。 每个客户机每20分钟只发送几个 UDP 数据包,因此大多数服务器每秒只接收大约12个 NTP 数据包,每天的峰值高达每秒100个数据包。 这意味着带宽使用量为每秒10-15Kb,峰值为每秒50-120Kb。

参加青少年社区计划前,你必须符合三项基本要求:

  1. 您的服务器必须有一个静态 IP 地址。
  2. 您的服务器必须有一个永久和稳定的互联网连接。
  3. 你的 IP 地址大多数不会改变,或者只是偶尔改变(一年一次或更少)。

对于大多数基于云的服务器,前两个需求通常是自动满足的。 第三项要求强调,加入国家结核控制规划联营项目是一项长期承诺。 当然,如果您的环境发生了变化,将服务器从池中删除是可以的,但是这需要很长的时间(大多数时候是几周,但有时候是几个月甚至几年)才能完全消失。

先决条件

为了完成这个教程,你需要:

  • 配置了 IPv6网络的 Ubuntu 16.04服务器。 如果你需要在正在运行的液滴上配置 IPv6网络,你可以遵循本教程。
  • 一个 sudo 非 root 用户和一个防火墙,可以通过遵循使用 Ubuntu 16.04教程的初始服务器安装程序来设置。

第一步ー安装 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 池时间服务器。 让我们选择一些特定的时间服务器代替。

第二步ー选择合适的上游伺服器

Ntp 池项目要求希望加入池的运营商选择好的网络本地时间服务器,而不是使用默认的 Pool.NTP. org 服务器。 这确保了 NTP 池项目保持可靠、快速和健康。 在选择时间源时,你需要一个稳定的网络连接,没有数据包丢失,服务器之间的跳数越少越好。

多层次的 NTP 协议将所涉及的各方分离为主服务器、辅助服务器和客户机。 主服务器被称为地层1,直接连接到时间源,即地层0。 这个源可以是一个原子钟,一个 GPS 接收器,或无线电导航系统。 链中的辅助服务器称为第二层、第三层等。

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

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

  • Openaccess: 此时间服务器对遵守 NTP 池使用建议的任何客户机开放。
  • Restrictedaccess: 这个时间服务器除了 NTP 池使用建议之外还有一些访问限制。
  • Closedaccess: 此时间服务器已关闭或需要事先安排。

警告: 除非获得批准,否则不要使用未列为 OpenAccess 的服务器。

访问时间服务器列表,你会看到如下列表:

按照 ISO 代码列对列表进行排序,找到一个或两个地理位置靠近服务器数据中心的服务器。 当服务器的 Access Policy 列声明为 OpenAccess 时,您可以毫无问题地使用它。 如果是“ RestrictedAccess” ,则单击打开条目并阅读 AccessDetails 字段中的说明。 通常情况下,你会发现 notifationmessage 被设置为 Yes,这意味着你必须编写一个非正式的电子邮件,直接发送到 ServerContact 中提供的地址,通知服务器操作员你希望使用这个时间服务器作为 NTP 池项目成员的时间源。

确定了要使用的服务器后,单击 ISO 列中每个服务器的链接,并复制其主机名或 IP 地址。 您将在步骤3中使用这些地址。

接下来,按照相同的过程,从“地层2”列表中选择三到四个服务器。

选择了时间服务器之后,就可以配置 NTP 客户机使用它们了。

步骤3ー配置 NTP 以加入池

要使用服务器和 NTP 池并配置新的时间服务器,您需要对 NTP 守护进程的配置进行一些修改。 为此,请编辑 / etc / ntp。 文件:

  • sudo nano /etc/ntp.conf

首先,确保已经配置了驱动文件。 驱动文件存储以其标称频率运行的系统时钟与保持与正确时间同步所需的频率之间的频率偏移量。 它有助于达到一个稳定和准确的时间。 你可以在默认安装的配置文件顶部找到这个:

/etc/ntp.conf
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift
...

接下来,从配置中删除默认的时间源项。 您正在寻找模式池[0-3]中的所有行。 Ubuntu.pool.ntp.org : iburst 或 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
...

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

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

/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

远程列告诉您 NTP 守护进程正在使用的服务器的主机名,而 refid 列告诉您服务器正在使用的源。 因此,对于“分层1”服务器,“分层1”字段应该显示 GPS、 PPS、 ACTS 或 PTB,而“分层2”及以上服务器将显示上游服务器的 IP 地址。 第一列显示了阶层,而延迟、偏移和抖动则告诉您时间源的质量。 这三个字段的值越小越好。

您的时间服务器现在可以为公众服务时间。 您可以通过从另一台主机调用 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 服务器,以便其他人可以使用它。

步骤4ー将服务器添加到 NTP 池

要添加你的服务器以便其他人可以使用,请访问 manage.ntppool.org 微博并注册一个账户。 您将收到一封来自 NTP Pool [email protected] org 的电子邮件,要求您验证您的帐户。 按照邮件中的说明确认你的账户,然后登录 manage.ntppool.org。

一旦登录,你会看到添加服务器的简单界面:

输入服务器的 IP 地址并单击 Submit。

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

如果你满意,点击是的,这是我的服务器,添加它来确认条目!

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

解决连接问题

如果你在让你的服务器同步上遇到了麻烦,你可能有一个适当的包防火墙,将你的发送包丢弃在端口123。 看看如何在 Ubuntu 上用 UFW 建立防火墙,学习如何检查防火墙的状态。

如果 NTP 池项目的监控站无法到达你的 NTP 服务器,你的服务器分数下降,或者你不能使用你的服务器同步其他时钟,你可能有一个数据包防火墙在适当的地方降低你的端口123的传入流量。 检查你的防火墙状态。

如果你确定你没有防火墙,或者你已经打开了端口123来接收和传输流量,你的服务器提供商或者其他传输提供商可能会在途中丢弃你的数据包。 如果你自己没有解决这些问题的知识,最好求助于社区,寻求帮助。 Ntp 联营项目论坛是一个很好的起点。 您还可以加入邮件列表或向 NTP 池项目运营商发送邮件。 只要确保在寻求帮助之前,你可以展示所有你已经尝试过的解决问题的步骤。

总结

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