介绍
准确的时间保持对于几乎任何服务或软件至关重要。 电子邮件,记录器,事件系统和调度程序,用户认证机制和在分布式平台上运行的服务都需要准确的时间戳记,以按时间顺序记录事件。 这些服务使用网络时间协议(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非root用户和防火墙,您可以通过使用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的更多信息,请参阅如何使用UFW在Ubuntu上设置防火墙 。
NTP已安装,但配置为使用默认的NTP池时间服务器。 让我们选择一些特定的时间服务器。
第2步 - 选择合适的上游服务器
NTP池项目询问希望加入池的运营商选择好的网络本地时间服务器,而不是使用默认的pool.ntp.org
服务器。 这样可以确保NTP Pool项目的可靠性,快速性和健康性。 选择时间源时,您将需要一个稳定的网络连接,无需丢包,并且服务器之间尽可能少的跳数。
多层次和分层的NTP协议将相关方分为主服务器,辅助服务器和客户端。 主服务器称为Stratum 1 ,并直接连接到时间源(称为Stratum 0) 。 该源可以是原子钟,GPS接收器或无线电导航系统。 链中的辅助服务器称为Stratum 2 , Stratum 3等。
每个服务器也是客户端。 层2客户端从上游第1层服务器接收时间,并向下游第3层服务器或其他客户端提供时间。 要使NTP Pool Project成员正常工作,NTP守护程序至少需要配置三个服务器。 该项目建议至少四个,不超过七个来源。
NTP池项目提供公共Stratum 1和Startum 2时间服务器的列表。 列表指定NTP时间服务器可用于公开访问在规定的限制。 你会发现三种类型:
- OpenAccess :此时间服务器对任何符合NTP Pool 使用建议的客户端都是开放的。
- RestrictedAccess :此时间服务器除了NTP池使用建议之外,还有一些访问限制。
- ClosedAccess :此时间服务器已关闭或需要事先安排。
警告 :请勿使用未列为OpenAccess的服务器,除非您已获得批准。
访问Stratum 1时间服务器列表 。 您会看到如下列表:
按ISO代码列对列表进行排序,并找到一个或两个地理位置靠近服务器数据中心的服务器。 当服务器的Access Policy列显示OpenAccess时,您可以使用它,而不会出现问题。 如果说“RestrictedAccess”,点击打开该条目并阅读AccessDetails字段中提到的说明。 通常,您会发现NotificationMessage设置为是 ,这意味着您必须制作一个针对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 Pool的建议,我们为每个服务器使用iburst
选项。 这样,如果服务器不可达,则会发送八个数据包的突发而不是通常的一个数据包。 使用NTP池项目中的burst
选项被认为是滥用,因为它将每个轮询间隔发送这8个数据包,而iburst
仅在第一次发送8个数据包。
接下来,确保默认配置不允许管理查询。 如果不这样做,您的服务器可以用于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
远程列告诉您NTP守护程序正在使用的服务器的主机名, refid列会显示服务器正在使用的源。 所以对于第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并注册一个帐户。 您将收到来自NTP Pool help@ntppool.org的电子邮件,要求您验证您的帐户。 按照电子邮件中的说明确认您的帐户,然后登录manage.ntppool.org 。
登录后,您将看到添加服务器的简单界面:
输入服务器的IP地址,然后单击提交 。
下一个屏幕会要求您确认它确定了服务器的区域。 如果您的服务器显示在与预期不同的地区,请使用“ 注释 ”框来让他们知道。
如果你快乐,点击是的确认输入,这是我的服务器,添加它!
您的服务器现在是NTP池项目的一部分。 请访问http://www.pool.ntp.org/scores/ your_server_ip
以查看NTP Pool的监控系统收集的有关您的服务器的信息。 它每小时检查您的服务器几次,并显示偏移量数据,与您的系统的分数一致。 只要您的服务器保持良好的时间和可达性,分数将上升至20分。 在池中只使用分数高于10的服务器。
排除连接问题
如果您无法使服务器同步,则可能有一个数据包防火墙丢弃了端口123
上的传出数据包。 看看如何使用UFW在Ubuntu上设置防火墙,以了解如何检查防火墙的状态。
如果NTP Pool Project的监控工作站无法连接到您的NTP服务器,并且您的服务器分数正在下降,或者您无法使用服务器同步其他时钟,则可能会有一个数据包防火墙将您的入站流量丢弃在端口123
。 检查你的防火墙状态。
如果您确定您没有防火墙,或者为传入和传出流量打开了端口123
,则您的服务器提供商或另一个中转提供商可能会沿途丢弃数据包。 如果您不具备自己解决问题的知识,最好转向社区并寻求帮助。 NTP池项目论坛是开始的好地方。 您还可以加入邮件列表或发送emaill到NTP池项目运营商。 请确保您可以在请求帮助之前显示您已经尝试解决问题的所有步骤。
结论
在本教程中,您成功设置了自己的时间服务器,并将其作为NTP池项目的成员,向社区提供服务。 与时间保持社区保持联系。 加入NTP Pool Projects论坛或邮件列表 。 一定要监控您的服务器的分数,并进行必要的调整。