NTP服務器知識整理

1. 什麼是GMT (格林威治) 時間與UTC 時間?

GMT時間是以太陽經過格林威治的那一刻來做爲計時的標準,地球共有24 個時區,而以格林威治時間(GMT) 爲標準時間,臺灣本地時間爲GMT + 8 小時。不許確,可是方便記憶與理解。
UTC時間是使用『原子震盪週期』所計算的物理時鐘。最準確。
兩個時間計時的方式不一樣,GMT與UTC時間有差很少16分鐘的偏差!css

2. 如今,你將有一個月的時間要出差到美國的紐約去,時間會不一致啊!你該如何手動的調整時間參數呢?

由於時區資料檔在/usr/share/zoneinfo 內,在該目錄內會找到/usr/share/zoneinfo/America/New_York 這個時區檔。而時區設定檔在/etc/sysconfig/clock ,且目前的時間格式在/etc/localtime ,因此你應該這樣作:linux

[root@www ~]# date Thu Jul 28 15:08:39 CST 2011 <==重點是CST這個時區喔! [root@www ~]# vim /etc/sysconfig/clock ZONE=" America/New_York " <==改的是這裏啦! [root@www ~]# cp /usr/share/zoneinfo/America/New_York /etc/localtime [root@www ~]# date Thu Jul 28 03:09:21 EDT 2011 <==時區與時間都改變了! 
3. NTP服務配置文件參數講解。
  • 利用restrict 來管理權限控制
restrict [你的IP] mask [netmask_IP] [parameter]

其中parameter 的參數主要有底下這些:vim

  1. ignore:拒絕全部類型的NTP連線;
  2. nomodify:用戶端不能使用ntpc與ntpq這兩支程式來修改伺服器的時間參數,但用戶端仍可透過這部主機來進行網路校時的;
  3. noquery:用戶端不可以使用ntpq, ntpc等指令來查詢時間伺服器,等於不提供NTP的網路校時囉;
  4. notrap: 不提供trap這個遠端事件登陸(remote event logging)的功能。
  5. notrust:拒絕沒有認證的用戶端。
  6. kod: 向不安全的訪問者發送Kiss-Of-Death報文[1]
  7. nopeer: 提供時間服務,但不做爲對等體,阻止主機嘗試與服務器對等,不容許欺詐性服務器控制時鐘。

那若是你沒有在parameter的地方加上任何參數的話,這表示『該IP或網段不受任何限制』的意思喔!通常來講,咱們能夠先關閉NTP的使用權限,而後再一個一個的啓用容許登入的網段。centos

常見的配置以下:安全

# 1.對於默認的客戶端拒絕全部的操做 restrict default kod nomodify notrap nopeer noquery <==拒絕IPv4的用戶 restrict -6 default kod nomodify notrap nopeer noquery <==拒絕IPv6的用戶 # 2.啓內部遞歸網絡接口lo 即容許本機地址一切的操做 restrict 127.0.0.1 <==底下兩個是預設值,放行本機來源 restrict -6 ::1 # 3.容許上層時間服務器主動修改本機時間 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伺服器 # 4.放行網段來源 restrict 192.168.100.0 mask 255.255.255.0 nomodify <==放行區網來源 
  • 利用server 設定上層NTP 伺服器
server [IP or hostname] [ key n ] [ version n ] [ prefer ] [ mode n ] [ minpoll n ] [ maxpoll n ] [ iburst ]
  1. host:是上層NTP服務器的IP地址或域名。
  2. key: 表示全部發往服務器的報文包含有祕鑰加密的認證信息,n是32位的整數,表示祕鑰號。
  3. version: 表示發往上層服務器的報文使用的版本號,n默認是3,能夠是1或者2。
  4. prefer: 若是有多個server選項,具備該參數的服務器優先使用。
  5. mode: 指定數據報文mode字段的值。
  6. minpoll: 指定與查詢該服務器的最小時間間隔爲2的n次方秒,n默認爲6,範圍爲4-14。
  7. maxpoll: 指定與查詢該服務器的最大時間間隔爲2的n次方秒,n默認爲10,範圍爲4-14。
  8. iburst: 當初始同步請求時,採用突發方式接連發送8個報文,時間間隔爲2秒。

常見的配置以下:ruby

# 5.默認的一個內部時鐘數據,用在沒有外部 NTP 服務器時,使用它爲局域網用戶提供服務
server 127.127.1.0
fudge  127.127.1.0 stratum 10

# 6.定義使用上層ntp服務
server 220.130.158.71 iburst minpoll 5 maxpoll 10  prefer  <==以這部主機爲最優先
server 59.124.196.83  iburst minpoll 5 maxpoll 10
server 59.124.196.84  iburst minpoll 5 maxpoll 10
  • 以driftfile 記錄時間差別
driftfile [能夠被ntpd 寫入的目錄與檔案]

由於預設的NTP Server 自己的時間計算是依據BIOS 的晶片震盪週期頻率來計算的,可是這個數值與上層 Time Server 不見得會一致。因此NTP 這個daemon (ntpd) 會自動的去計算咱們本身主機的頻率與上層 Time server的頻率,而且將兩個頻率的偏差記錄下來,記錄下來的檔案就是在driftfile 後面接的完整檔名當中了!
關於檔名你必需要知道:bash

  1. driftfile 後面接的檔案須要使用完整路徑檔名;
  2. 該檔案不能是連結檔;
  3. 該檔案須要設定成ntpd 這個daemon 能夠寫入的權限。
  4. 該檔案所記錄的數值單位爲:百萬分之一秒(ppm)。

driftfile 後面接的檔案會被ntpd 自動更新,因此他的權限必定要可以讓ntpd 寫入才行。在CentOS 6.x 預設的NTP 伺服器中,使用的ntpd 的owner 是ntp ,這部份能夠查閱/etc/sysconfig/ntpd 就能夠知道啦!服務器

常見的配置以下:網絡

driftfile /var/lib/ntp/drift 
  • keys [key_file]

除了以restrict 來限制用戶端的連線以外,咱們也能夠透過金鑰系統來給用戶端認證, 如此一來可讓主機端更放心了。能夠參考ntp-keygen 這個指令的相關說明。運維

  • 其它的配置
pidfile   /var/run/ntpd.pid <==進程位置 logfile /var/log/ntp.log <==日誌文件 service 192.168.75.132 <==監聽地址 
4. 防火牆設置

ntp這個daemon是以port 123爲連結的端口(使用UDP封包)

[root@www ~]# vim /usr/local/virus/iptables/iptables.allow iptables -A INPUT -i eth0 -p udp -s 192.168.100.0/24 --dport 123 -j ACCEPT 
5. NTP啓動與觀察

設定完ntp.conf 以後就能夠啓動ntp 服務器了。啓動與觀察的方式以下:

# 1.啓動NTP [root@www ~]# /etc/init.d/ntpd start [root@www ~]# chkconfig ntpd on [root@www ~]# tail /var/log/messages <==自行檢查看看有無錯誤 # 2.觀察啓動的埠口看看: [root@www ~]# netstat -tlunp | grep ntp Proto Recv-Q Send-Q Local Address Foreign Address PID/Program name udp 0 0 192.168.100.254:123 0.0.0.0:* 3492/ntpd udp 0 0 192.168.1.100:123 0.0.0.0:* 3492/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 3492/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 3492/ntpd udp 0 0 ::1:123 :::* 3492/ntpd udp 0 0 :::123 :::* 3492/ntpd # 主要是UDP 封包,且在port 123 這個端口的啦! 

這樣就表示咱們的NTP伺服器已經啓動了,不過要與上層NTP服務器連線則還須要一些時間, 一般啓動NTP後約在15分鐘內纔會和上層NTP伺服器順利鏈接上。

請自行等待數分鐘後再如下列指令查閱:

[root@www ~]# ntpstat
synchronised to NTP server (220.130.158.71) at stratum 3 time correct to within 538 ms polling server every 128 s 

這個指令能夠列出咱們的NTP 服務器有跟上層連線否。由上述的輸出結果能夠知道,時間有校訂約 538 * 10^(-3) 秒(538ms),且每隔128 秒會主動去更新時間!

[root@www ~]# ntpq -p remote refid st t when poll reach delay offset jitter ================================================== ============================ *tock.stdtime.go 59.124.196.87 2 u 19 128 377 12.092 -0.953 0.942 +59-124-196-83.H 59.124.196.86 2 u 8 128 377 14.154 7.616 1.533 +59-124-196-84.H 59.124.196.86 2 u 2 128 377 14.524 4.354 1.079 

這個ntpq -p 能夠列出目前咱們的NTP 與相關的上層NTP 的狀態,上頭的幾個欄位的意義爲:

  1. remote:亦便是NTP主機的IP或主機名稱。注意最左邊的符號[2]:
  2. refid:參考的上一層NTP主機的位址
  3. st:就是stratum階層。
  4. when:幾秒鐘前曾經作過期間同步化更新的動做;
  5. poll:下一次更新在幾秒鐘以後;
  6. reach:已經向上層NTP伺服器要求更新的次數
  7. delay:網路傳輸過程中延遲的時間,單位爲10^(-3)秒,即毫秒
  8. offset:時間補償的結果,單位與10^(-3)秒,即毫秒
  9. jitter:Linux系統時間與BIOS硬體時間的差別時間,單位爲10^(-3)秒,即毫秒。

差別都在0.001 秒之內, 能夠符合咱們的通常使用了。另外,你也能夠檢查一下你的BIOS 時間與Linux 系統時間的差別, 就是/var/lib/ntp/drift 這個檔案的內容,就能瞭解到我們的Linux 系統時間與BIOS 硬體時鐘到底差多久。

6. 客戶端時間更新方式
  • 修改BIOS 記錄的時間
[root@clientlinux ~]# hwclock [-rw] 選項與參數: -r :亦即read ,讀出目前BIOS 內的時間參數; -w :亦即write ,將目前的Linux 系統時間寫入BIOS 當中啊! # 2.查閱BIOS時間,而且寫入更改過的時間囉! [root@clientlinux ~]# date; hwclock -r Thu Jul 28 16:34:00 CST 2011 Thu 28 Jul 2011 03:34:57 PM CST -0.317679 seconds #看一看,是否恰好差別約一個小時啊!這就是BIOS時間! [root@clientlinux ~]# hwclock -w; hwclock -r; date Thu 28 Jul 2011 04:35:12 PM CST -0.265656 seconds Thu Jul 28 16:35:11 CST 2011 #這樣就寫入囉~因此軟體時鐘與硬體時鐘就同步啦!很簡單吧! 
  • ntpdate進行時間的同步
[root@clientlinux ~]# ntpdate [-dv] [NTP IP/hostname] 選項與參數: -d :進入除錯模式(debug) ,能夠顯示出更多的有效資訊。 -v :有較多訊息的顯示。 [root@clientlinux ~]# ntpdate 192.168.100.254 28 Jul 17:19:33 ntpdate[3432]: step time server 192.168.100.254 offset -2428.396146 sec #最後面會顯示微調的時間有多少(offset),由於這部主機時間差不少,因此秒數... [root@clientlinux ~]# date; hwclock -r 四7月28 17:20:27 CST 2011 西元2011年07月28日(週四) 18時19分26秒 -0.752303 seconds #知道想要表達什麼嗎?對啊!還得hwclock -w寫入BIOS時間才行啊! [root@clientlinux ~]# vim /etc/crontab #加入這一行去! 10 5 * * * root (/usr/sbin/ntpdate tock.stdtime.gov.tw && /sbin/hwclock -w) &> /dev/null 
  • NTP服務更新時間

ntpdate這個方式僅適合不要啓動NTP 的狀況。若是你的機器數量太多了,那麼用戶端最好也啓動一下NTP 服務。經過NTP 去主動的更新時間。

[root@clientlinux ~]# ntpdate 192.168.100.254 #因爲ntpd的server/client之間的時間偏差不容許超過1000秒, # 所以你得先手動進行時間同步,而後再設定與啓動時間伺服器呦! [root@clientlinux ~]# vim /etc/ntp.conf #server 0.centos.pool.ntp.org #server 1.centos.pool.ntp.org #server 2.centos.pool.ntp.org restrict 192.168.100.254 <==放行伺服器來源! server 192.168.100.254 <==這就是伺服器! #很簡單,就是將本來的server項目註解,加入咱們要的伺服器便可 [root@clientlinux ~]# /etc/init.d/ntpd start [root@clientlinux ~]# chkconfig ntpd on 

而後取消掉crontab 的更新程序,這樣你的client 電腦就會主動的到NTP 伺服器去更新。


  1. KOD是NTPv4提出的一種全新的訪問控制技術,主要用於服務器向客戶端上提供狀態報告和接入控制等信息。在服務器上使能KOD功能後,服務器會根據系統的運行狀態向客戶端發送DENY Kiss和RATE Kiss碼。當客戶端接收到DENY Kiss碼,客戶端將斷開與服務器的全部鏈接,並中止向服務器發送報文。當客戶端接收到RATE Kiss碼,客戶端將當即縮短與該服務器的輪詢時間間隔,且之後每次接收到RATE Kiss碼,輪詢時間間隔都會進一步縮短。

  2. 若是有『 * 』表明目前正在做用當中的上層NTP;若是是『 + 』表明也有連上線,並且可做爲下一個提供時間更新的候選者。

做者:小小運維 連接:https://www.jianshu.com/p/98a889b0412e 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
相關文章
相關標籤/搜索