爲公益伸出援手,自建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),第一時間獲取更多海量技術實踐乾貨哦~

海量技術實踐經驗,盡在雲加社區

相關文章
相關標籤/搜索