天天看點

鳥哥伺服器架設——NTP伺服器搭建

NTP伺服器搭建

一、NTP通信協定

    實際上,Linux作業系統的計時方式主要從1970年1月1日開始計算總秒數,是以,如果你還記得date這個指令的話,會發現他有個+%s的參數,可以去的總秒數,這個就是軟體時鐘。但是,如同前面說的,計算機硬體主要是以BIOS内部的時間為主要的時間依據(硬體時鐘),而偏偏這個時間可能因為BIOS内部晶片本身的問題,而導緻BIOS時間與标準時間(UTC)存在一點點的差異。是以,為了避免主機時間因為長期運作而導緻時間偏差,進行時間同步(synchronize)的工作就顯得很重要了。

  軟體時鐘:由Linux作業系統根據1970/01/01開始計算的總秒數。

  硬體時鐘:主機硬體系統上面的時鐘,例如BIOS記錄的時間。

   那麼怎麼讓時間同步化呢?如果我們選擇幾部主要主機(Primary Server)調校時間,讓這些Primary Server的時間同步之後,在開放網絡服務讓Client段連結,并且允許Client端調整自己的時間,不就可以實作全部計算機的時間同步了嗎。那麼什麼協定可以實作這樣的功能呢,那就是Network Time Protocol,即NTP協定,另外還有Digital Time Synchronization Protocol(DTSS)也可以實作相同的功能。不過,NTP是如何讓Server與Client同步他們的時間的呢?

   1)首先,主機當然需要啟動這個daemon。

   2)之後,Client會向NTP Server發送出校對時間的message.

   3)然後NTP Server會送出目前的标準時間給Client。

   4)Client接受了來自Server的時間後,會據此調整自己的時間,這樣就實作了網絡校時。

   至于NTP這個daemon是以port123為連接配接的接口(使用UDP資料包),是以我們利用Time Server來進行時間同步更新時,就需要使用NTP這個軟體提供的ntpdateup來進行port123的連接配接。

二、NTP伺服器的層次概念

    由于NTP時間伺服器采用類似分級架構(straum)來處理時間的同步化,是以它使用的是類似一般Server/Client的主從架構。網絡社會上會提供一些主要與次要的時間伺服器,這些均屬于第一級與第二級的時間伺服器。

    再進行NTP主機的設定時,都會選擇多台上層的Time Server來作為我們這一台NTP Server的校時之用,選擇堕胎的原因是因為可以避免因為某台時間伺服器突然當機時,其他主機仍然可以提供NTP主機來自我更新,然後NTP Server才提供給自己的Client端更新時間。

三、NTP伺服器的安裝和配置

1、所需軟體與軟體結構

Yum install ntp

Yum install tzdata

與時間及NTP伺服器設定相關的的配置檔案與重要資料檔案有下面幾個。

/etc/ntp.conf :就是NTP伺服器的主要配置檔案,也是唯一一個

/usr/share/zoneinfo/:由tzdata所提供的,為個時區的時間格式對應檔案。例如我過的時區格式對應檔案是/usr/share/zoneinfo/Asia/Shanghai.這個目錄裡面的問價與下面要談的兩個檔案(clock與localtime)是有關系的。

/etc/sysconfig/clock:設定時區與是否使用UTC時鐘的配置檔案。每次開機候Linux會自動讀取這個檔案設定自己系統所預設要顯示的時間。舉例來說,在我們中國本地的時間設定中,這個檔案内應該會出現一行ZONE=“Asia/Shanghai”的字樣,這表示我們的時間配置檔案要使用/usr/share/zoneinfo/Asia/Shanghai那個檔案。

[[email protected] zoneinfo]# cat /etc/sysconfig/clock 

ZONE="Asia/Shanghai"

/etc/localtime:就是本地的時間配置檔案。剛剛那個clock檔案裡面規定了适應的時間配置檔案為/usr/share/zoneinfo/Asia/Shanghai,是以說這就是本地的時間了,此時Linux系統會以Shanghai那個時間配置檔案為準。

至于常用于時間伺服器與修改時間指令,主要有以下幾個:

/bin/date:用于Linux時間(軟體時間)的修改與顯示的指令。

/sbin/hwclock:用于BIOS時鐘(硬體時鐘)的修改與顯示的指令。這個指令隻有root才能執行,因為Linux系統上面的BIOS時間與Linux系統時間是分開的,是以使用date這個指令調整了時間之後,還需要使用hwclock才能将修改過後的時間寫入BIOS中。

/usr/sbin/ntpd:主要提供NTP服務的程式。配置檔案為/etc/ntp.conf

/usr/sbin/ntpdate:用于用戶端的時間校正,如果不啟用NTP而僅想要使用NTPclient功能的話,會用到這個指令。

2、主要配置檔案ntp.conf的處理  

舉例配置

   上層NTP伺服器共有 tock.stdtime.gov.tw   , tick. stdtime.gov.tw   ,time. stdtime.gov.tw 三台,其中以tock.stdtime.gov.tw最為優先使用。

   不對internet提供服務,僅允許來自内部網絡912.168.100.0/24的查詢。

   檢測BIOS時鐘與Linux系統時間的差異并寫入/var/lib/ntp/drift檔案中。

下面來看一下如何在ntp.conf中設定權限控制。

1)利用restrict來管理權限控制

restrict參數設定方式:

restrict [你的IP] mask [netmask_IP] [parameter]

其中parameter的參數主要有以下這些。

ignore:拒絕所有類型的NTP連接配接。

nomodify:用戶端不能使用ntpc與ntpq這兩個程式來修改伺服器的時間參數,但用戶端仍可通過這部主機進行網絡校時。

noquery:用戶端不能通過使用ntpq、ntpc等指令來查詢時間伺服器,等于不提供NTP的網絡校時。

notrap:不提供trap這個遠端事件登入(remote event logging)的功能。

notrust:拒絕沒有認證的用戶端。

   如果沒有在parameter的地方加上任何參數的話,這表示“該IP或網段不受任何限制“。一般來說,我們可以先關閉NTP的權限,然後再一個一個地啟用允許登入的網段。

2)利用server設定上層NTP伺服器

   上冊NTP伺服器的設定方式為:

   server [IP or hostname] [prefer]

  在server後端可以按接IP或主機名,最好用IP,防止修改主機名後的麻煩。那個prefer表示優先适用的伺服器。

3)以driftfile記錄時間差異

driftfile [可以被ntpd寫入的目錄或檔案]

因為預設的NTP Server本身的時間計算是依據BIOS的晶片時間振蕩周期頻率來計算的,但是這個數值與上層Time Server不見得一緻。是以NTP這個daemon(ntpd)會自動去計算我們的主機的頻率與上層Time Server的頻率,并且将兩個頻率的誤差記錄下來,記錄下來的檔案就是在driftfile後面的完整檔案名所指的檔案。關于檔案名必須要知道:

 Driftfile後面接的檔案需要使用完整路徑檔案名。

 該檔案不能是連結檔案。

 該檔案所記錄的數值機關為百萬分之一秒(ppm)。

dirftfile 後面接的檔案會被ntpd自動更新,是以他的權限一定要能夠讓ntpd寫入才行。

4)keys[key_file]

   除了restrict來限制用戶端的連接配接之外,我們也可以通過密匙系統來給用戶端認證,如此一來,可以讓主機端放心了。

[[email protected] jboss6]#vim /etc/ntp.conf

#1、先處理權限方面的問題,包括放行上層伺服器以及開放區域網路使用者來源

restrict default kod nomodify notrap nopeer noquery     拒絕IPv4的使用者

restrict -6 default kod nomodify notrap nopeer noquery   拒絕IPv6的使用者

restrict 220.130.158.71  放行tock.stdtime.gov.tw進入本NTP伺服器

restrict 59.124.196.83   放行tick. stdtime.gov.tw進入本NTP伺服器

restrict 59.124.196.84   放行time. stdtime.gov.tw進入本NTP伺服器

restrict 127.0.0.1       這兩個是預設值

restrict -6 ::1

restrict 192.168.10.0 mask 255.255.255.0 nomodify 放行區域網路來源

#2、設定主機來源,可以先把本來的下面這些内容注釋掉

# Use public servers from the pool.ntp.org project.

# Please consider joining the pool (http://www.pool.ntp.org/join.html).

#server 0.rhel.pool.ntp.org iburst

#server 1.rhel.pool.ntp.org iburst

#server 2.rhel.pool.ntp.org iburst

#server 3.rhel.pool.ntp.org iburst

server 220.130.158.71 prefer  以這台主機最為優先

server 59.124.196.83

server 59.124.196.84

#3、預設時間差異分析檔案與咱不用的keys,不需要改變他

driftfile /var/lib/ntp/drift

keys /etc/ntp/keys

這樣就設定好了

3、NTP的啟動與觀察

#1、啟動NTP

[[email protected] zoneinfo]# /etc/init.d/ntpd start   啟動

Starting ntpd:                                             [  OK  ]

[[email protected] zoneinfo]# chkconfig ntpd on   設定開機啟動

[[email protected] zoneinfo]# tail /var/log/messages  檢視日志資訊

Jan 28 17:09:28 localhost ntpd[33990]: Deferring DNS for 1.rhel.pool.ntp.org 1

Jan 28 17:09:28 localhost ntpd[33990]: Deferring DNS for 2.rhel.pool.ntp.org 1

Jan 28 17:09:28 localhost ntpd[33990]: Deferring DNS for 3.rhel.pool.ntp.org 1

Jan 28 17:09:28 localhost ntpd[33990]: 0.0.0.0 c016 06 restart

Jan 28 17:09:28 localhost ntpd[33990]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM

Jan 28 17:09:28 localhost ntpd[33990]: 0.0.0.0 c011 01 freq_not_set

Jan 28 17:09:30 localhost ntpd_intres[33992]: host name not found: 0.rhel.pool.ntp.org

Jan 28 17:09:30 localhost ntpd_intres[33992]: host name not found: 1.rhel.pool.ntp.org

Jan 28 17:09:30 localhost ntpd_intres[33992]: host name not found: 2.rhel.pool.ntp.org

Jan 28 17:09:30 localhost ntpd_intres[33992]: host name not found: 3.rhel.pool.ntp.org

#2、檢視啟動的端口

[[email protected] zoneinfo]# netstat -tlunp | grep ntp

udp    0   0 192.168.211.128:123         0.0.0.0:*       33990/ntpd          

udp    0   0 127.0.0.1:123               0.0.0.0:*       33990/ntpd 

udp    0   0 0.0.0.0:123                 0.0.0.0:*       33990/ntpd          

udp    0   0 fe80::20c:29ff:fe82:6e49:123 :::*              33990/ntpd          

udp    0   0 ::1:123                     :::*            33990/ntpd          

udp    0   0 :::123                      :::*            33990/ntpd  

#主要是UDP資料包,并且在port 123這個端口

這就表示我們的NTP伺服器已經啟動了不過要與上層NTP伺服器連接配接還需要一些時間,通常啟動NTP後約在15分鐘内才會和上層NTP伺服器順利連接配接上。那要如何确認我們的NTP伺服器已經順利地更新了自己的時間呢?

 [[email protected] zoneinfo]# ntpstat   這是我自己的虛拟機,沒有上層伺服器

unsynchronised

  time server re-starting

   polling server every 8 s

[[email protected] zoneinfo]# ntpstat  鳥哥的例子

synchronized to NTP server (220.130.158.71) at stratum 3

time correct to within 538 ms

polling server every 128 s

這個指令可以列出我們的NTP伺服器是否已經與上層連接配接。由上述的輸出結果可以知道,時間已經校正約538ms,且每隔128秒會主動去更新時間。

[[email protected] zoneinfo]# ntpq –p

這個指令可以列出目前我們的NTP與相關上層NTP的狀态。

4、安全性設定

  伺服器防火牆在UDP port 123上打開

[[email protected] zoneinfo]# vi /etc/sysconfig/iptables

iptables –A INPUT –I $EXTIF –p udp –s 192.168.100.0/24 –dport 123 –j  ACCEPT

四、用戶端時間更新方式

1、Linux手動校時工作:date hwclock

date MMDDhhmmYYYYY 月份 日期 小時 分鐘 公元年

[[email protected] zoneinfo]# date 012809511016

date: cannot set date: Invalid argument

Sun Jan 28 09:51:00 LMT 1016

[[email protected] zoneinfo]#hwclock [-rw]

-r:read 讀出目前BIOS内的時間參數

-w:write,将目前的linux系統時間寫入BIOS中

查閱BIOS時間,并且寫入更改過的時間

[[email protected] zoneinfo]# date ;hwclock –r

[[email protected] zoneinfo]# hwclock –w;hwclock –r;date

[[email protected] zoneinfo]# date 012809572016

Thu Jan 28 09:57:00 CST 2016

[[email protected] zoneinfo]# date

Thu Jan 28 09:57:11 CST 2016

[[email protected] zoneinfo]# hwclock -r

Thu 28 Jan 2016 05:58:18 PM CST  -0.283336 seconds

[[email protected] zoneinfo]# hwclock -w

[[email protected] zoneinfo]# hwclock -r

Thu 28 Jan 2016 09:57:30 AM CST  -0.095152 seconds

[[email protected] zoneinfo]# date

Thu Jan 28 09:57:34 CST 2016

[[email protected] zoneinfo]#

2、Linux的網絡校時

因為NTP伺服器本來就會與上層時間伺服器進行時間的同步化,是以預設情況下,NTP伺服器不可以使用ntpdate。即ntpdate與ntpd不能同時啟用。

[[email protected] zoneinfo]#ntpdate 192.168.100.254 伺服器

用戶端最好也啟動一下NTP服務,通過NTP去主動的更新時間。

[[email protected] zoneinfo]#ntpdate 192.168.100.254

[[email protected] zoneinfo] #vi /etc/ntp.conf

restrict 192.168.100.254  放行伺服器來源

server 192.168.100.254   這就是伺服器

[[email protected] zoneinfo]#/etc/init.d/ntpd start

[[email protected] zoneinfo]#chkconfig ntpd on

這樣Client計算機就會主動到NTP伺服器上去更新時間了。

不這樣也可以

[[email protected] zoneinfo]#vi /etc/crontab

10 5 * * * root (/usr/sbin/ntpdate tock.ssdtime.gov.tw && /sbin/hwclock –w) &>/dev/null

這樣每天05:10LINUX系統就會自動進行網絡校時。

本文轉自aaa超超aaa 51CTO部落格,原文連結:http://blog.51cto.com/10983441/1739431

繼續閱讀