如何配置NTP以在CentOS7上的NTP池项目中使用
介绍
对于几乎任何服务或软件来说,准确的计时都是至关重要的。 电子邮件、记录器、事件系统和调度程序、用户身份验证机制以及在分布式平台上运行的服务都需要准确的时间戳来按时间顺序记录事件。 这些服务使用网络时间协议或 NTP 将系统时钟与受信任的外部源同步。 此源可以是原子钟、GPS 接收器或其他已使用 NTP 的时间服务器。
这就是 NTP Pool Project 项目发挥作用的地方。 它是一个庞大的全球时间服务器集群,为全球数以千万计的客户提供对已知“好时光”的轻松访问。 它是 Ubuntu 和大多数其他主要 Linux 发行版以及许多联网设备和软件应用程序的默认时间服务器。
在本指南中,您将在您的服务器上设置 NTP 并将其配置为 NTP 池项目的一部分,以便为 NTP 池项目的其他用户提供准确的时间。 提供您的空闲 CPU 周期和未使用的带宽是回馈社区的完美方式。
所需带宽相对较低,可以根据您可以提供的数量和服务器所在的位置进行调整。 每个客户端每 20 分钟只会发送几个 UDP 数据包,因此大多数服务器每秒只接收大约十几个 NTP 数据包,每天会出现几次峰值,每秒最多一百个数据包。 这转化为 10-15Kb/秒的带宽使用,峰值为 50-120Kb/秒。
在加入 NTP 池项目之前,您必须满足三个基本要求:
- 您的服务器必须具有静态 IP 地址。
- 您的服务器必须具有永久且稳定的互联网连接。
- 您的 IP 地址大部分不会更改,或者只是很少更改(一年一次或更少)。
对于大多数基于云的服务器,通常会自动满足前两个要求。 第三个要求强调,加入 NTP Pool 项目是一项长期承诺。 当然,如果您的情况发生变化,可以将服务器从池中取出,但流量完全消失需要很长时间(通常是几周,但有时是几个月甚至几年)。
先决条件
要完成本教程,您需要:
- 一台配置了 IPv6 网络的 Centos 7 服务器。 如果您需要在现有的 Droplet 上配置 IPv6 网络,您可以按照 本教程 。
- 一个 sudo 非 root 用户和一个防火墙,您可以按照 CentOS 7 的初始服务器设置教程 和 Additional Recommended Steps for New 中的“配置基本防火墙”部分进行设置CentOS 7 服务器 教程。
第 1 步 — 安装 NTP
默认情况下不安装 NTP 包,因此您将使用包管理器来安装它。 首先,更新你的包:
sudo yum update
然后安装NTP:
sudo yum install ntp
安装完成后,启动服务并配置它,使其在每次服务器启动时自动启动:
sudo systemctl start ntpd sudo systemctl enable ntpd
如果您已按照先决条件中的指定配置防火墙,则必须允许 NTP 服务的 UDP 流量才能与 NTP 池通信:
sudo firewall-cmd --permanent --add-service=ntp sudo firewall-cmd --reload
有关 FirewallD 的更多信息,请参阅 如何在 CentOS 7 上使用 FirewallD 设置防火墙。
NTP 现在已安装,但已配置为使用默认的 NTP 池时间服务器。 让我们选择一些特定的时间服务器。
第 2 步 — 选择合适的上游服务器
NTP 池项目要求想要加入池的运营商选择好的网络本地时间服务器,而不是使用默认的 pool.ntp.org
服务器。 这确保了 NTP 池项目保持可靠、快速和健康。 选择时间源时,您需要稳定的网络连接,不会丢失数据包,并且服务器之间的跳数尽可能少。
多层和分层的 NTP 协议将参与方分为主服务器、辅助服务器和客户端。 主服务器称为Stratum 1,直接连接到时间源,称为Stratum 0。 该源可以是原子钟、GPS 接收器或无线电导航系统。 链中的二级服务器称为Stratum 2、Stratum 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 vi /etc/ntp.conf
首先,确保配置了 driftfile。 漂移文件存储以标称频率运行的系统时钟与保持与正确时间同步所需的频率之间的频率偏移。 它有助于实现稳定和准确的时间。 您应该在默认安装的配置文件顶部找到它:
/etc/ntp.conf
# For more information about this file, see the man pages # ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5). driftfile /var/lib/ntp/drift ...
接下来,从配置中删除默认时间源条目。 您正在寻找模式为 server 0.centos.pool.ntp.org iburst
的所有行。 如果您使用的是默认配置,请删除突出显示的行,如以下示例所示:
/etc/ntp.conf
... # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst
将您删除的行替换为您在上一步中选择的精选服务器。
/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 反射攻击,或者容易受到试图修改服务器状态的 ntpq
和 ntpdc
查询的攻击。 检查 noquery
选项是否添加到默认的 restrict
行。 还要确保添加选项 kod
和 limited
,因为它们限制了过于急切地询问客户端并强制执行速率限制。
/etc/ntp.conf
... # Permit time synchronization with our time source, but do not # permit the source to query or modify the service on this system. restrict default nomodify notrap nopeer noquery kod limited # Permit all access over the loopback interface. This could # be tightened as well, but to do so would effect some of # the administrative functions. restrict 127.0.0.1 restrict ::1
您可以在官方文档中找到更多关于其他选项的信息。
您的 NTP 守护程序配置文件现在应该如下所示,尽管您的文件可能有其他注释,您可以放心地忽略:
/etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift restrict default nomodify notrap nopeer noquery kod limited restrict 127.0.0.1 restrict ::1 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 服务,让您的时间服务器将其时钟同步到上游服务器。
sudo systemctl restart ntpd
几分钟后,使用 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列显示层,delay、offset和jitter告诉你时间源的质量。 这三个字段的值越低越好。
您的时间服务器现在可以向公众提供时间。 您可以通过从另一台主机调用 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 数据包。 看看 如何在 CentOS 7 上使用 FirewallD 设置防火墙,了解如何检查防火墙的状态。
如果 NTP 池项目的监控站无法访问您的 NTP 服务器并且您的服务器分数正在下降,或者您无法使用您的服务器同步其他时钟,您可能有一个数据包防火墙丢弃了您的 ' 端口 123
上的流量。 检查您的防火墙状态。
如果您确定没有防火墙,或者您已经为传入和传出流量打开了端口 123
,则您的服务器提供商或其他传输提供商可能会在途中丢弃您的数据包。 如果您不具备自行解决这些问题的知识,最好求助于社区并寻求帮助。 NTP 池项目论坛 是一个很好的起点。 您也可以加入 邮件列表 或 发送电子邮件 给 NTP 池项目运营商。 在寻求帮助之前,请确保您可以展示您已尝试解决问题的所有步骤。
结论
在本教程中,您成功设置了自己的时间服务器,并使其成为 NTP 池项目的成员,为社区提供时间服务。 与计时社区保持联系。 加入 NTP 池项目论坛 或 邮件列表。 请务必监控服务器的分数并进行必要的调整。