本文主要從NTP通訊協議、NTP伺服器的階層概念、NTP伺服器的安裝與設定、Client的安裝和配置、NTP的啟動與觀察等幾個方面詳細介紹了NTP伺服器。
上篇文章回顧:初探Firewalld
計算機內部所記錄的的時鐘都記載於BIOS(CMOS)內的,但如果計算機上面的CMOS電池沒電了,或者是某些特殊因素導致BIOS資料被清除,此時計算機的時間就會不準。在實際生活中,我們可以通過電視臺,廣播臺,電話來調整我們的手錶,那麼在網路上,就需要NTP這個伺服器讓我們的主機隨時保持正確的時間資訊。
全球有多少時區?GMT在那個時區?
全球有24個時區,因為繞地球一週360度,這360度分為24個時區,當然一個時區就是15度了,又由於是以格林尼治時間(Greenwich Mean Time,GMT時間)為標準時間,儘管其後採用北京時間為標準時間,但linux並沒有反映這一變化,所以在linux中預設定義時區時看不到北京時間。又因為我國在格林尼治的東方,因此北京時間(local time)會比GMT時間快8小時(GMT +8)
1、NTP通訊協議
Network Time Protocol,如何在server與client同步他們的時間呢?
1)首先,主機當然要啟動這個daemon
2)之後client 會向NTP server 校對時間的message
3)然後 NTP Server 會送出目前的標準時間給 Client
4)Client 接收了來自 Server 的時間後,調整自己的時間,達成了網路校時
ntp 這個 daemon 是以 port 123 為連線的埠(使用 UDP 封包),所以我們要利用 Time server 來進行時間的同步更新時,就得要使用 NTP 軟體提供的 ntpdate 來進行 port 123 的連線。
2、NTP伺服器的階層概念
由於 NTP 時間伺服器採用類似階層架構 (stratum) 來處理時間的同步化, 所以他使用的是類似一般 server/client 的主從架構。網路社會上面有提供一些主要與次要的時間伺服器, 這些均屬於第一階及第二階的時間伺服器 (stratum-1, stratum-2)
Tips: 其實 NTP 的階層概念與 DNS 很類似啦,當你架設一部 NTP 主機,這部 NTP 所向上要求同步化的那部主要主機為 stratum-1 時,那麼你的 NTP 就是 stratum-2 ,舉例來說,如果我們的 NTP 是向臺灣的 tock.stdtime.gov.tw 這部 stratum-2 的主機要求時間同步化,那我們的主機即為 stratum-3 ,如果還有其他的 NTP 主機向我們要求時間同步, 那麼該部主機則會是 stratum-4 啦!就這樣啊~ 那最多可以有幾個階層?最多可達 15 個階層。
3、NTP伺服器的安裝與設定
3.1 檢視系統是否已經安裝NTP服務元件
rpm -qa | grep "ntp" #檢視是否已經安裝ntp元件,有如下兩個元件說明已經安裝
ntpdate-4.2.6p5-1.el6.centos.x86_64
ntp-4.2.6p5-1.el6.centos.x86_64複製程式碼
3.2 yum安裝
yum -y install ntp1.3 ntp複製程式碼
3.3 配置檔案
配置檔案
/etc/ntp.conf複製程式碼
配置檔案預設內容
egrep -v "^$|#" ntp.conf #排除預設註釋及空行
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery #對預設的client拒絕所有操作
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1 #允許本地地址的一切操作
restrict -6 ::1
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
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys複製程式碼
修改配置
cat /etc/ntp.conf
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery #對預設的client拒絕所有操作
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1 #允許本機的一切操作
restrict 192.168.1.0 mask 255.255.255.0 nomodify #允許區域網內所有client連線到這臺伺服器
restrict -6 ::1 同步時間.但是拒絕讓他們修改伺服器上的時間
#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
server ntp1.aliyun.com #同步公網的時間
server 127.127.1.0 #如果無法連線公網,則使用自己本身的時間作為標準時間。
fudge 127.127.1.0 stratum 10 #設定stratum級別
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys複製程式碼
3.4 restrict安全相關引數
ignore:關閉所有的 NTP 聯機服務
nomodify:客戶端不能更改服務端的時間引數,但是客戶端可以通過服務端進行網路校時
notrust:客戶端除非通過認證,否則該客戶端來源將被視為不信任子網
noquery:不提供客戶端的時間查詢
客戶端的安裝同伺服器,如上。
4.1 配置檔案
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
#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
server ntpserver #<==新增自己的時間伺服器
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys複製程式碼
5、伺服器端啟動
在伺服器端啟動NTP服務,命令如下:
/etc/init.d/ntpd start複製程式碼
新增開啟啟動:
chkconfig ntpd on複製程式碼
6、NTP的啟動與觀察
6.1 檢視啟動的埠
這樣就表示我們的 NTP 伺服器已經啟動了,不過要與上層 NTP 伺服器聯機則還需要一些時間, 通常啟動 NTP 後約在 15 分鐘內才會和上層 NTP 伺服器順利連線上。 那要如何確認我們的 NTP 伺服器有順利的更新自己的時間呢?你可以使用底下幾個指令來查閱喔 (請自行等待數分鐘後再以下列指令查閱):
6.2 檢視NTP伺服器上層聯機
這個指令可以列出我們的 NTP 伺服器有跟上層聯機否。由上述的輸出結果可以知道,時間有校正約 258 * 10^(-3) 秒,且每隔 512秒會主動去更新時間喔!
6.3 列出目前我們的NTP與相關的上層NTP的狀態
各個引數的含義:
事實上這個輸出的結果告訴我們,時間真的很準了啦!因為差異都在 0.001 秒以內, 可以符合我們的一般使用了。另外,你也可以檢查一下你的 BIOS 時間與 Linux 系統時間的差異, 就是 /var/lib/ntp/drift 這個檔案的內容,就能瞭解到我們們的 Linux 系統時間與 BIOS 硬體時鐘到底差多久?單位為 10^(-6) 秒啦!
7、注意
要讓你的 NTP Server/Client 真的能運作,在上述的動作中得注意:
上述的 ntpstat 以及 ntpq -p 的輸出結果中,你的 NTP 伺服器真的要能夠連結上層 NTP 才行! 否則你的客戶端將無法對你的 NTP 伺服器進行同步更新的!重要重要!
你的 NTP 伺服器時間不可與上層差異太多。
伺服器防火牆在 UDP port 123 有沒有開啊?要特別注意的呢!
本文首發於公眾號“小米運維”,點選檢視原文。