搭建自己的NTP時間服務器
網絡時間協議NTP(Network Time Protocol)是用於互聯網中時間同步的標準互聯網協議。NTP的用途是把計算機的時間同步到某些時間標準。目前採用的時間標準是世界協調時UTC(Universal Time Coordinated)。NTP的主要開發者是美國特拉華大學的David L. Mills教授。
NTP對於我們個人來說有什麼用呢,簡單的講,當你的計算機時間不準確了,你可以接入到互聯網,從網上同步一下時間,看多方便。
對於企業來說,當你有成百上千的計算機,都不能直接連接互聯網,時間不統一影響業務,如果一臺一臺的修改,那不得累死人啊。這時搭建一個自己的NTP服務器就顯出它的優勢了。
下面我們就來學習一下如何搭建自己的NTP時間服務器。
一、NTP服務器的安裝
想要學習當然是得先安裝上,不然怎麼學?
安裝方法有:
1、RPM安裝
2、YUM安裝
3、源碼編譯安裝
# wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.6p4.tar.gz
# tar zxvf ntp-4.2.6.tar.gz
# cd ntp-4.2.6
# ./configure --prefix=/usr/local/ntp --enable-all-clocks --enable-parse-clocks
# make && make install
二、NTP的配置文件和相關命令
NTP的配置文件:
/etc/ntp.conf NTP服務的配置文件。
1)、權限的設定主要以 restrict 這個參數來設定,主要的語法爲:
restrict IP地址 mask 子網掩碼 參數
其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP
參數有以下幾個:
ignore :關閉所有的 NTP 聯機服務
nomodify:客戶端不能更改服務端的時間參數,但是客戶端可以通過服務端進行網絡校時。
notrust :客戶端除非通過認證,否則該客戶端來源將被視爲不信任子網
noquery :不提供客戶端的時間查詢
2)、用server這個參數設定上級時間服務器,語法爲:
server IP地址或域名 [prefer]
IP地址或域名就是我們指定的上級時間服務器,如果 Server 參數最後加上 prefer,表示我們的 NTP 服務器主要以該部主機時間進行校準。
3)、解決NTP服務器校準時間時的傳送延遲
使用driftfile參數設置:
driftfile 文件名
在與上級時間服務器聯繫時所花費的時間,記錄在driftfile參數後面的文件內。
注意: driftfile 後面接的文件需要使用完整的路徑文件名,不能是鏈接文件,並且文件的權限需要設定成 ntpd守護進程可以寫入。
/usr/share/zoneinfo/ 這個目錄下存放的是各個時區對應的設定文件。
/etc/localtime 本地系統時間設定文件。
/etc/sysconfig/clock 本機時區設定文件。
當我們修改了上圖中ZONE選項中的時區時,系統就對去/usr/share/zoneinfo/取對應的時區設定文件,複製爲本地/etc/localtime。
相關命令:
date 修改和顯示日期和時間的命令。
hwclock 將當前系統時間寫入CMOS的命令,只有root用戶纔可以使用。
ntpd NTP服務的守護進程文件,需要先啓動它才能提供NTP服務。
ntpdate 客戶端時間同步
三、配置NTP
# vi /etc/ntp.conf
#========權限控制============
restrict default kod nomodify notrap nopeer noquery 拒絕IPV4用戶
restrict -6 default kod nomodify notrap nopeer noquery 拒絕IPV6用戶
restrict 210.72.145.44 授權國家授時中心服務器訪問本地NTP
restrict 133.100.11.8 授權133.100.11.8訪問本地NTP
restrict 127.0.0.1
restrict -6 ::1
restrict 192.168.100.0 mask 255.255.255.0 nomodify 本地網段授權訪問
#=========源服務器===========
server 210.72.145.44 prefer 指定上級更新時間服務器,優先使用這個地址
server 133.100.11.8
#=========差異分析===========
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys
# service ntpd start RPM和YUM安裝的啓動方式
#/usr/local/ntp/bin/ntpd -c /etc/ntp.conf -p /tmp/ntpd.pid 源碼編譯安裝的啓動方式
ntpd啓動後,客戶機要等幾分鐘再與其進行時間同步,否則會提示“no server suitable for synchronization found”錯誤。
# netstat -tlunp | grep ntp 如果看到123端口,說明ntp服務成功啓動。
# ntpstat 查看ntp服務器與上級服務器是否通訊
# ntpq –p 查看本地NTP與上級服務器的通訊情況
四、客戶端如何更新時間
linux上:
# ntpdate 192.168.100.10
手工更新太麻煩,我們寫個任務計劃定時更新
# vi /var/spool/cron/root
0 1 * * * /usr/sbin/ntpdate 192.168.18.2
windows上:
五、NTPD服務端設置
(1)確認NTPD服務已經開啓,時區設置正確,
(2)確認NTPD能夠作爲客戶端從上級NTP服務器獲取時間,
(3)NTPD服務的主要配置文件默認是/etc/ntp.conf。
(4)設置配置文件中的“restrict”項,主要用於控制客戶端對服務器的訪問,一般設置如下:
restrict default kod nomodify notrap nopeer noquery
#禁用全部地址對NTPD各服務的訪問
restrict 127.0.0.1
#允許本機地址(127.0.0.1)對NTPD各服務的訪問
restrict xx.xx.xx.xx mask xx.xx.xx.xx nomodify
#允許設置的可信任地址段對NTPD各服務的訪問,但不允許此地址段內客戶端修改NTPD服務器時間(nomodify)。
(5)設置配置文件中的“server”項,主要用於NTPD的上級服務器、本機時鐘的同步,以及時鐘的層次stratum:
server 127.127.1.0
#NTPD把本地主機的時鐘也看作外部時鐘源來處理,分配的地址是127.127.1.0
fudge 127.127.1.0 stratum 1
#設置本地時鐘源的層次爲1,這樣如果NTPD服務從本地時鐘源獲取時間的話,NTPD對外宣佈的時間層次爲2。
server 10.138.1.240
#設置上級時鐘源爲10.138.1.240,上級時鐘源的層次是1,NTPD從上級時鐘源獲取到時間,對外宣佈的時間層次爲2。只有在上級時鐘源失效時,NTPD纔會使用127.127.1.0的本地時鐘。
(6)配置完畢,重啓NTPD服務,使配置更改生效。
六、NTPD服務調試過程遇到的問題
NTP時間同步失敗的原因很多,但排除配置不當和外部因素後,NTP協議本身的特性也需要考慮到,在Linux NTPD服務調試的過程中,遇到以下問題:
(1)NTPD服務剛啓動後,客戶端無法同步時間,在過了幾分鐘之後,客戶端才能成功成功同步時間。
(2)網絡上存在多個NTP服務器時,客戶端單獨只從A服務器或B服務器同步時間都能成功,但如果把從A服務同步時間的客戶機重新設置,改爲從B服務器同步,很有可能不能成功同步時間,重啓客戶機上的同步服務之後,發現客戶機又能夠成功從B服務器同步了。
層的概念
這些問題主要涉及到NTP的層(stratum)的概念,頂層是1,值爲0時表示層數不明,層的值是累加的,比如NTP授時方向是A-〉B-〉C,假設A的stratum值是3,那麼B從A獲取到時間,B的stratum置爲4,C從B獲取到時間,C的值被置爲5。一般只有整個NTP系統最頂層的服務器stratum才設爲1。
NTP同步的方向是從stratum值較小的節點向較大的節點傳播,如果某個NTP客戶端接收到stratum比自己還要大,那麼NTP客戶端認爲自己的時間比接受到的時間更爲精確,不會進行時間的更新。
對於大部分NTP軟件系統來說,服務啓動後,stratum值初始是0,一旦NTP服務獲取到了時間,NTP層次就設置爲上級服務器stratum+1。對於具備衛星時鐘、原子鐘的專業NTP設備,一般stratum值初始是1。
NTPD的運行過程
NTPD啓動後,stratum值初始是0,此時NTPD接收到NTP請求,回覆stratum字段爲0的NTP包,客戶端接收後,發現stratum字段無效,拒絕更新時間,造成時間更新失敗。
幾分鐘後,NTPD從上級服務器獲取到了更新,設置了正確的stratum,回覆stratum字段爲n+1的NTP包,客戶端接收後,確認stratum有效,成功進行時間更新。
在NTPD上級服務器不可用的情況下,NTPD將本機時鐘服務模擬爲一個上級NTP服務器,地址使用環回127.127.1.0,服務啓動幾分鐘後,NTPD從127.127.1.0更新了時鐘,設置了有效的stratum,客戶端接收後,成功進行時間更新。
對應的/etc/ntp.conf配置項如下:
server 127.127.1.0
#NTPD把本地主機的時鐘也看作外部時鐘源來處理,分配的地址是127.127.1.0
fudge 127.127.1.0 stratum 1
#設置本地時鐘源的層次爲1,這樣如果NTPD服務從本地時鐘源獲取時間的話,NTPD對外宣佈的時間層次爲2。