为公益伸出援手,自建NTP 服务器池

欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~html

本文由 吴凌云 发表于 云+社区专栏

介绍

什么是 NTP

准确时间对于几乎全部服务或软件都相当重要。在分布式平台上运行的电子邮件,记录器,事件系统和调度程序,用户身份验证机制和服务都须要准确的时间戳记录事件。这些服务使用网络时间协议(NTP)将系统时钟与可信外部源同步。NTP 全称为 Network Time Protocol ,中文翻译为网络时间协议,1985年就已经被提出,旨在缩短互联网上全部计算机设备与 UTC 的时间差。经过 Marzullo 算法,他能够选择准确的时间服务器,而且能够适当减轻因为网络延迟所带来的偏差。NTP 客户端将按期轮询不一样网络上的三个或更多服务器。为同步其时钟,客户端必须计算其时间偏移量和来回通讯延迟,随后,从最好的三个剩余中导出估算的时间偏移。而后调整时钟频率以逐渐减少偏移 。算法

什么是 NTP 服务器池

NTP 服务器池是一个分布式的公益性项目,简单来讲,他就是各个地区可用的 NTP 服务器的一个集合。全世界各地的志愿者能够提交本身的 NTP 服务器到这个池中,在用户须要进行 NTP 查询的时候,经过 DNS 的按区域解析,用户能够被分配到最近的服务器上,这样能够减小网络延迟带来的偏差,准确的提供时间。ubuntu

这是NTP PoolProject项目发挥做用的地方。它是一个庞大的全球时间服务器集群,被全球数以千万计的客户称为“美妙时光”。它是Ubuntu和大多数其余主要Linux发行版的默认时间服务器,以及许多联网设备和软件应用程序。安全

若是你有位于国内的、长期可使用的、有固定 IP 的服务器,你能够考虑参与进来这个项目。不管你的带宽多少,只要在服务器池中设置了服务器带宽,DNS 会对服务器的权重进行调整,使之尽量的不超过你所设定的带宽。所以只要你有闲置的带宽,就能够参与进来,而不用担忧影响正常的业务。服务器

在本教程中,您将在服务器上设置NTP并将其配置为NTP池项目的一部分,以便为NTP池项目的其余用户提供准确的时间。提供备用CPU周期和未使用的带宽也是是向社区提供回馈的绝佳方式。微信

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

在加入NTP池项目以前,您必须知足三个基本要求:机器学习

  1. 您的服务器必须具备静态IP地址。
  2. 您的服务器必须具备永久稳定的Internet链接。
  3. 您的IP地址通常不更改,或者不多更改(每一年一次或更少)。

对于大多数云的服务器,一般会知足前两个要求。第三个要求强调,在加入NTP池项目将构成一个长期的承诺。固然,若是您的状况发生变化,也能够将服务器从池中取出,但在流量彻底消失以前须要很长时间。编辑器

准备

要完成本教程,您须要:分布式

  • 一台配置了公网IP的Ubuntu 16.04服务器。没有服务器的同窗能够在这里购买,不过我我的更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器
  • 在您的服务器上启用防火墙,若是您使用的是腾讯云的CVM服务器,您能够直接在腾讯云控制台中的安全组进行设置。

第一步、安装NTP

默认状况下系统不安装NTP软件包,所以您将使用软件包管理器apt进行安装。首先,更新您的包:

sudo apt-get update

而后安装NTP:

sudo apt-get install ntp

若是已按准备教程配置防火墙,则必须容许123端口上的UDP通讯才能与NTP池通讯,若是您使用的是腾讯云的CVM服务器,您能够直接在腾讯云控制台中的安全组进行设置。:

sudo ufw allow 123/udp

NTP现已安装,但已配置为使用默认的NTP池时间服务器。让咱们选择一些特定的时间服务器。

第二步、选择一个合适的上游服务器

NTP池项目要求加入池的运营商选择良好的网络本地时间服务器,而不是使用默认pool.ntp.org服务器。这可确保NTP池项目可靠,快速。在选择时间源时,您须要稳定的网络链接,不会丢失数据包,而且服务器之间的转跳数尽量少。

多层和分层NTP协议将所涉及的各方分为主服务器,辅助服务器和客户端。主服务器称为*Stratum1,主服务器接链接到称为*Stratum 0的时间源。该源能够是一个原子钟,GPS接收器或无线电导航系统。辅助服务器称为*Stratum2*Stratum 3 等。

每一个服务器也是一个客户端。Stratum 2客户端从上游Stratum 1服务器接收时间,并为下游Stratum 3服务器或其余客户端提供时间。要使NTP池项目正常工做,NTP至少须要配置三个服务器。该项目建议至少四个,不超过七个的时间源。

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

  • OpenAccess:此时间服务器对符合NTP池的任何客户端开放。
  • RestrictedAccess:此时间服务器除了NTP池使用外还有一些访问限制。
  • ClosedAccess:此时间服务器已关闭或关机。
警告:除非您已得到批准,不然请勿使用未列为 OpenAccess的服务器。

访问Stratum 1 Time Servers列表。您将看到以下列表:

img

ISO代码列对列表进行排序,找到一个或两个地理位置靠近你的服务器的服务器。当服务器的声明OpenAccess时,您能够放心地使用它。若是显示“RestrictedAccess”,请单击以打开该条目并阅读AccessDetails字段中指出的说明。一般,您会发现NotificationMessage设置为Yes,这意味着您必须制做一个指向ServerContact中提供的地址的电子邮件,通知服务器运营商您但愿将此时间服务器用做NTP池项目的时间源。

肯定要使用的服务器后,单击ISO列中每一个服务器的连接并复制其主机名或IP地址。您将在第三步中使用这些地址。接下来,按照相同的过程从Stratum2列表中选择三个或四个服务器。

选择时间服务器后,就能够配置NTP客户端来使用它们了。

第三步、配置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 iburstpool 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池建议为每一个服务器使用iburst选项。接下来,确保默认配置不容许管理查询。若是不这样作,你的服务器能够在NTP反射攻击中使用,也可能会受到ntpqntpdc试图修改服务器状态。检查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

输出结果应该相似于:

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列显示层级,和delay,offsetjitter告诉你时间源的质量。这三个字段的值越低越好。

您的时间服务器如今能够为公共服务。您能够经过从其余主机输入ntpdate调用来验证这一点:

ntpdate -q your_server_ip

输出结果应该与如下相似,它告诉您它调整了时间服务器和偏移量:

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服务器,以便其余人可使用它。

第四步 - 将服务器添加到NTP池

要添加您的服务器以便其余人可使用,能够访问manage.ntppool.org并注册一个账户。您将收到来自NTP Poolhelp@ntppool.org的电子邮件,要求您验证您的账户。按照电子邮件中的说明确认您的账户,而后登陆manage.ntppool.org。登陆后,您将看到添加服务器的界面:

img

输入服务器的IP地址,而后单击“ 提交”

下一个屏幕会要求您验证它是否已标识服务器的区域。若是它将您的服务器显示在与您不一样的地区,使用“Comment”框可以让他们了解状况。

若是您满意,请单击Yes, this is my server, add it!

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

结论

在本教程中,您成功学习了如何设置了本身的时间服务器,并使其成为NTP池项目的成员,为社区服务,如今国内NTP服务器数量仍是不够乐观,仍是那句话,若是你有位于国内的、长期可使用的、有固定 IP 的服务器,你能够考虑参与进来这个项目。不管你的带宽多少,只要在服务器池中设置了服务器带宽,DNS 会对服务器的权重进行调整,使之尽量的不超过你所设定的带宽。所以只要你有闲置的带宽,就能够参与进来,而不用担忧影响正常的业务。更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:

《How to Configure NTP for Use in the NTP Pool Project on Ubuntu 16.04》

《国内 NTP 服务器池可能须要你的帮助》

问答

机器学习入门须要哪些数学基础?

相关阅读

安全报告 | 2018上半年互联网恶意爬虫分析:从全景视角看爬虫与反爬虫

安全报告 | SSH 暴力破解趋势:从云平台向物联网设备迁移

给你的CVM安装一个面板吧!

此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/dev...

欢迎你们前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

海量技术实践经验,尽在云加社区

相关文章
相关标签/搜索