Redhat6.5下配置NTP時間服務器

Redhat6.5下配置NTP時間服務器

在配置服務之前需要知道的一些概念:

【整篇文章有很多是借鑑別人的,少部分是自己編寫的,希望能對大家有所裨益】

1.時間和時區

如果有人問你說現在幾點你看了看錶回答他說晚上8點了這樣回答看上去沒有什麼問題,但是如果問你的這個人在歐洲的話那麼你的回答就會讓他很疑惑,因爲他那裏還太陽當空呢.

 

這裏就有產生了一個如何定義時間的問題因爲在地球環繞太陽旋轉的24個小時中,世界各地日出日落的時間是不一樣的.所以我們纔有劃分時區(timezone) 的必要,也就是把全球劃分成24個不同的時區所以我們可以把時間的定義理解爲一個時間的值加上所在地的時區(注意這個所在地可以精確到城市)

 

地理課上我們都學過格林威治時間(GMT), 它也就是0時區時間但是我們在計算機中經常看到的是UTC. 它是Coordinated Universal Time的簡寫雖然可以認爲UTCGMT的值相等(誤差相當之小),但是UTC已經被認定爲是國際標準,所以我們都應該遵守標準只使用UTC

 

那麼假如現在中國當地的時間是晚上8點的話,我們可以有下面兩種表示方式

20:00 CST

12:00 UTC

 

這裏的CSTChinese Standard Time,也就是我們通常所說的北京時間了因爲中國處在UTC+8時區,依次類推那麼也就是12:00 UTC.

第一,不管通過任何渠道我們想要同步系統的時間,通常提供方只會給出UTC+0的時間值而不會提供時區(因爲它不知道你在哪裏).所以當我們設置系統時間的時候,設置好時區是首先要做的工作

第二,很多國家都有夏令時,那就是在一年當中的某一天時鐘撥快一小時(比如從UTC+8一下變成UTC+9),那麼同理到時候還要再撥慢回來.如果我們設置了正確的時區,當需要改變時間的時候系統就會自動替我們調整

 

2.如何設置Linux Time Zone

Linuxglibc提供了我們事先編譯好的許多timezone文件他們就放在/usr/share/zoneinfo這個目錄下,這裏基本涵蓋了大部分的國家和城市

# ls -F /usr/share/zoneinfo/

Africa/      Chile/   Factory    Iceland      Mexico/   posix/      Universal

America/     CST6CDT  GB         Indian/      Mideast/  posixrules  US/

Antarctica/  Cuba     GB-Eire    Iran         MST       PRC         UTC

Arctic/      EET      GMT        iso3166.tab  MST7MDT   PST8PDT     WET

Asia/        Egypt    GMT0       Israel       Navajo    right/      W-SU

Atlantic/    Eire     GMT-0      Jamaica      NZ        ROC         zone.tab

Australia/   EST      GMT+0      Japan        NZ-CHAT   ROK         Zulu

Brazil/      EST5EDT  Greenwich  Kwajalein    Pacific/  Singapore

Canada/      Etc/     Hongkong   Libya        Poland    Turkey

CET          Europe/  HST        MET          Portugal  UCT

在這裏面我們就可以找到自己所在城市的time zone文件那麼如果我們想查看對於每個time zone當前的時間我們可以用zdump命令

代碼:

# zdump Hongkong

Hongkong  Fri Jul  6 06:13:57 2007 HKT

 

那麼我們又怎麼來告訴系統我們所在time zone是哪個呢方法有很多,這裏舉出兩種

第一個就是修改/etc/localtime這個文件,這個文件定義了我麼所在的local time zone.

我們可以在/usr/share/zoneinfo下找到我們的time zone文件然後拷貝去到/etc/localtimezone(或者做個symbolic link)

 

假設我們現在的time zoneBST(也就是英國的夏令時間,UTC+1)

代碼:

# date

Thu Jul  5 23:33:40 BST 2007我們想把time zone換成上海所在的時區就可以這麼做

代碼:

# ln -sf /usr/share/zoneinfo/posix/Asia/Shanghai /etc/localtime

# date

Fri Jul  6 06:35:52 CST 2007

這樣時區就改過來了(注意時間也做了相應的調整)

 

3. Real Time Clock(RTC) and System Clock

 

說道設置時間這裏還要明確另外一個概念就是在一臺計算機上我們有兩個時鐘:一個稱之爲硬件時間時鐘(RTC),還有一個稱之爲系統時鐘(System Clock)

 

硬件時鐘是指嵌在主板上的特殊的電路它的存在就是平時我們關機之後還可以計算時間的原因

系統時鐘就是操作系統的kernel所用來計算時間的時鐘它從19701100:00:00 UTC時間到目前爲止秒數總和的值 在Linux下系統時間在開機的時候會和硬件時間同步(synchronization),之後也就各自獨立運行了

 

那麼既然兩個時鐘獨自運行,那麼時間久了必然就會產生誤差了,下面我們來看一個例子

代碼:

# date

Fri Jul  6 00:27:13 BST 2007

# hwclock --show

Fri 06 Jul 2007 12:27:17 AM BST  -0.968931 seconds

通過hwclock --show 命令我們可以查看機器上的硬件時間(always in local time zone), 我們可以看到它和系統時間還是有一定的誤差的那麼我們就需要把他們同步

 

如果我們想要把硬件時間設置成系統時間我們可以運行以下命令

代碼:

# hwclock --hctosys  

反之,我們也可以把系統時間設置成硬件時間

代碼:

# hwclock --systohc  

那麼如果想設置硬件時間我們可以開機的時候在BIOS裏設定.也可以用hwclock命令

代碼:

# hwclock --set --date="mm/dd/yy hh:mm:ss"  

如果想要修改系統時間那麼用date命令就最簡單了

代碼:

# date -s "dd/mm/yyyy hh:mm:ss"  

 

現在我們知道了如何設置系統和硬件的時間但問題是如果這兩個時間都不準確了怎麼辦那麼我們就需要在互聯網上找到一個可以提供我們準確時間的服務器然後通過一種協議來同步我們的系統時間,那麼這個協議就是NTP注意接下去我們所要說的同步就都是指系統時間和網絡服務器之間的同步了

 

一、NTP服務的簡介

NTPNetwork Time Protocol,網絡時間協議)是用來使計算機時間同步化的一種協議,它可以使計算機對其服務器或時鐘源做同步化,它可以提供 高精準度的時間校正。

二、使用的端口

 默認NTP服務端口:

 UDP/123

本文配置的NTP工作模式:

 使用client/server方式,該方式適用於一臺時間服務器接收上層時間服務器的時間信息,並提供時間信息給下層用戶。

三、測試環境:

NTPserver222.24.24.21

NTPclient222.24.24.19

 

配置環境

關閉selinux

 

vi /etc/selinux/config

 

SELINUX=disabled

 

關閉iptables

 

service iptables stop

 

chkconfig iptables off

 

四、安裝NTP軟件包

 

是否已經安裝了NTP包可以用這條命令來確定:

 

# rpm -qa | grep ntp

ntp-4.2.2p1-9.el5_4.1

出現以上代碼則表示已安裝NTP包,否則用下面方法安裝:

代碼:

# rpm -ivh ntp-4.2.2p1-5.el5.rpm 

或者用yum源安裝

yum -y install ntp   /*yum安裝NTP服務*/

 

chkconfig --add ntpd  /*添加NTP*/

 

chkconfig ntpd on   /*開機自啓動NTP服務*/

要找到在互聯網上給我們提供同步服務的NTP Server

http://www.pool.ntp.orgNTP的官方網站,在這上面我們可以找到離我們城市最近的NTP Server. NTP建議我們爲了保障時間的準確性,最少找兩個個NTP Server

那麼比如在英國的話就可以選擇下面兩個服務器

0.uk.pool.ntp.org

1.uk.pool.ntp.org

它的一般格式都是number.country.pool.ntp.org【數字、國家、ntp服務器】

 

第二步要做的就是在打開NTP服務器之前先和這些服務器做一個同步,使得我們機器的時間儘量接近標準時間.

這裏我們可以用ntpdate命令手動更新時間

代碼:

# ntpdate 0.uk.pool.ntp.org

6 Jul 01:21:49 ntpdate[4528]: step time server 213.222.193.35 offset -38908.575181 sec

# ntpdate 0.pool.ntp.org

6 Jul 01:21:56 ntpdate[4530]: adjust time server 213.222.193.35 offset -0.000065 sec

 

假如你的時間差的很離譜的話第一次會看到調整的幅度比較大,所以保險起見可以運行兩次那麼爲什麼在打開NTP服務之前先要手動運行同步呢?

1. 因爲根據NTP的設置,如果你的系統時間比正確時間要快的話那麼NTP是不會幫你調整的,所以要麼你把時間設置回去,要麼先做一個手動同步

2. 當你的時間設置和NTP服務器的時間相差很大的時候,NTP會花上較長一段時間進行調整.所以手動同步可以減少這段時間

 

五、配置NTP服務

 

vi /etc/ntp.conf

***************************************************************

 

# For more information about this file, see the man pages

# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).

 

driftfile /var/lib/ntp/drift

restrict default ignore 設置默認策略爲拒絕所有訪問方式的請求

# Permit time synchronization with our time source, but do not

# permit the source to query or modify the service on this system.

restrict default kod nomodify notrap nopeer noquery

restrict -6 default kod nomodify notrap nopeer noquery

 

# Permit all access over the loopback interface. This could

# be tightened as well, but to do so would effect some of

# the administrative functions.

restrict 127.0.0.1

restrict -6 ::1

 

# Hosts on local network are less restricted.

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 允許局域網內機器同步時間

 

# 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 210.72.145.44          #這是中國國家授時中心的IP

server 0.uk.pool.ntp.org

server 1.uk.pool.ntp.org

 

#broadcast 192.168.1.255 autokey # broadcast server

#broadcastclient # broadcast client

#broadcast 224.0.1.1 autokey # multicast server

#multicastclient 224.0.1.1 # multicast client

#manycastserver 239.255.254.254 # manycast server

#manycastclient 239.255.254.254 autokey # manycast client

 

restrict 0.centos.pool.ntp.org nomodify notrap noquery

restrict 1.centos.pool.ntp.org nomodify notrap noquery 允許與上層服務器同步時間

restrict 2.centos.pool.ntp.org nomodify notrap noquery

 

# Undisciplined Local Clock. This is a fake driver intended for backup

# and when no outside source of synchronized time is available.

server 127.127.1.0 # local clock  #外界同步源無法聯繫時,使用本地時間爲同步服務

fudge 127.127.1.0 stratum 0     #stratum  這行是時間服務器的層次。設爲0則爲頂級,如果要向別的NTP服務器更新時間,請不要把它設爲0

 

# Enable public key cryptography.

#crypto

 

includefile /etc/ntp/crypto/pw

 

# Key file containing the keys and key identifiers used when operating

# with symmetric key cryptography.

keys /etc/ntp/keys

 

# Specify the key identifiers which are trusted.

#trustedkey 4 8 42

 

# Specify the key identifier to use with the ntpdc utility.

#requestkey 8

 

# Specify the key identifier to use with the ntpq utility.

#controlkey 8

 

# Enable writing of statistics records.

#statistics clockstats cryptostats loops

 

 

六. 查看NTP服務的運行狀況

 

現在我們已經啓動了NTP的服務,但是我們的系統時間到底和服務器同步了沒有呢爲此NTP提供了一個很好的查看工具: ntpq (NTP query)

 

我建議大家在打開NTP服務器後就可以運行ntpq命令來監測服務器的運行.這裏我們可以使用watch命令來查看一段時間內服務器各項數值的變化

代碼:

# watch ntpq -p

Every 2.0s: ntpq -p                                  Sat Jul  7 00:41:45 2007

 

     remote           refid      st t when poll reach   delay   offset  jitter

===========================================================

+193.60.199.75   193.62.22.98     2 u   52   64  377    8.578   10.203 289.032

*mozart.musicbox 192.5.41.41      2 u   54   64  377   19.301  -60.218 292.411

 

現在我就來解釋一下其中的含義

 

  remote: 它指的就是本地機器所連接的遠程NTP服務器

      refid: 它指的是給遠程服務器(e.g. 193.60.199.75)提供時間同步的服務器

          st: 遠程服務器的層級別(stratum由於NTP是層型結構,有頂端的服務器,多層的Relay Server再到客戶端所以服務器從高到低級別可以設定爲1-16. 爲了減緩負荷和網絡堵塞,原則上應該避免直接連接到級別爲1的服務器的.

            t: 這個.....我也不知道啥意思^_^

    when: 我個人把它理解爲一個計時器用來告訴我們還有多久本地機器就需要和遠程服務器進行一次時間同步

       poll: 本地機和遠程服務器多少時間進行一次同步(單位爲秒). 在一開始運行NTP的時候這個poll值會比較小,那樣和服務器同步的頻率也就增加了,可以儘快調整到正確的時間範圍.之後poll值會逐漸增大,同步的頻率也就會相應減小

    reach: 這是一個八進制值,用來測試能否和服務器連接.每成功連接一次它的值就會增加

    delay: 從本地機發送同步要求到服務器的round trip time

    offset: 這是個最關鍵的值它告訴了我們本地機和服務器之間的時間差別. offset越接近於0,我們就和服務器的時間越接近

     jitter: 這是一個用來做統計的值它統計了在特定個連續的連接數裏offset的分佈情況簡單地說這個數值的絕對值越小我們和服務器的時間就越精確

 

那麼大家細心的話就會發現兩個問題第一我們連接的是0.uk.pool.ntp.org爲什麼和remote server不一樣第二那個最前面的+*都是什麼意思呢?

 

第一個問題不難理解,因爲NTP提供給我們的是一個cluster server所以每次連接的得到的服務器都有可能是不一樣.同樣這也告訴我們了在指定NTP Server的時候應該使用hostname而不是IP

 

第二個問題和第一個相關,既然有這麼多的服務器就是爲了在發生問題的時候其他的服務器還可以正常地給我們提供服務.那麼如何知道這些服務器的狀態呢這就是第一個記號會告訴我們的信息

 

它告訴我們遠端的服務器已經被確認爲我們的主NTP Server,我們系統的時間將由這臺機器所提供

它將作爲輔助的NTP Server和帶有*號的服務器一起爲我們提供同步服務*號服務器不可用時它就可以接管

- 遠程服務器被clustering algorithm認爲是不合格的NTP Server

遠程服務器不可用

 

瞭解這些之後我們就可以實時監測我們系統的時間同步狀況了

 

七. NTP安全設置

 

運行一個NTP Server不需要佔用很多的系統資源,所以也不用專門配置獨立的服務器,就可以給許多client提供時間同步服務但是一些基本的安全設置還是很有必要的

那麼這裏一個很簡單的思路就是第一我們只允許局域網內一部分的用戶連接到我們的服務器第二個就是這些client不能修改我們服務器上的時間

 

關於權限設定部分

權限的設定主要以 restrict 這個參數來設定,主要的語法爲:

restrict IP地址 mask 子網掩碼 參數

其中 IP 可以是IP地址,也可以是 default default 就是指所有的IP

參數有以下幾個:

ignore :關閉所有的 NTP 聯機服務

nomodify:客戶端不能更改服務端的時間參數,但是客戶端可以通過服務端進行網絡校時。

notrust :客戶端除非通過認證,否則該客戶端來源將被視爲不信任子網

noquery :不提供客戶端的時間查詢

注意:如果參數沒有設定,那就表示該 IP (或子網)沒有任何限制!

 

/etc/ntp.conf文件中我們可以用restrict關鍵字來配置上面的要求

 

首先我們對於默認的client拒絕所有的操作

代碼:

restrict default kod nomodify notrap nopeer noquery

 

然後允許本機地址一切的操作

代碼:

restrict 127.0.0.1

 

最後我們允許局域網內所有client連接到這臺服務器同步時間.但是拒絕讓他們修改服務器上的時間

代碼:

restrict 192.168.1.0 mask 255.255.255.0 nomodify

 

把這三條加入到/etc/ntp.conf中就完成了我們的簡單配置. NTP還可以用key來做authentication,這裏就不詳細介紹了

 

八. NTP client的設置

 

做到這裏我們已經有了一臺自己的Relay Server.如果我們想讓局域網內的其他client都進行時間同步的話那麼我們就都應該照樣再搭建一臺Relay Server,然後把所有的client都指向這兩臺服務器(注意不要把所有的client都指向Internet上的服務器). 只要在client/etc/ntp.conf加上這你自己的服務器就可以了

代碼:

server ntp1.leonard.com

server ntp2.leonard.com

 

LINUX客戶端使用

ntpdate 172.30.218.114

來向NTP服務器同步自己的時間

其它LINUX如果僅作爲只客戶端的話,則不能啓動ntpd服務!否則無法運行ntpdata 服務器地址 來同步時間

之後可以使用cron或修改crontab文件定期向NTP服務器更新時間,並用

# hwclock --systohc  

將系統時間設置爲硬件時間

 

 九、一些補充和拾遺(挺重要)

 

1. 配置文件中的driftfile是什麼?

我們每一個system clock的頻率都有小小的誤差,這個就是爲什麼機器運行一段時間後會不精確. NTP會自動來監測我們時鐘的誤差值並予以調整.但問題是這是一個冗長的過程,所以它會把記錄下來的誤差先寫入driftfile.這樣即使你重新開機以後之前的計算結果也就不會丟失了

 

2. 如何同步硬件時鐘?

NTP一般只會同步system clock. 但是如果我們也要同步RTC(hwclock)的話那麼只需要把下面的選項打開就可以了

代碼:

# vi /etc/sysconfig/ntpd

SYNC_HWCLOCK=yes

 

3、利用crontabLINUX NTP定時更新時間

注:讓linux運行ntpdate更新時間時,linux不能開啓NTP服務,否則會提示端口被佔用:如下

[root@ESXI ~]# ntpdate 1.rhel.pool.ntp.org                                 

20 May 09:34:14 ntpdate[6747]: the NTP socket is in use, exiting

 

crontab文件配置簡要說明

命令格式的前一部分是對時間的設定,後面一部分是要執行的命令。時間的設定我們有一定的約定,前面五個*號代表五個數字,數字的取值範圍和含義如下:

分鐘 (0-59)

小時 (0-23)

日期 (1-31)

月份 (1-12)

星期 (0-6)//0代表星期天

除了數字還有幾個個特殊的符號就是“*”、“/”和“-”、“,”,“*”代表所有的取值範圍內的數字,“/”代表每的意思,*/5”表示每5個單位,“-”代表從某個數字到某個數字,,”分開幾個離散的數字。以下舉幾個例子說明問題:

每天早上6點:

0 6 * * *  command

每兩個小時:

0 */2 * * *  command

晚上11點到早上8點之間每兩個小時,早上八點:

0 23-7/2,8 * * * command

每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點:

0 11 4 * 1-3 command

11日早上4點:

0 4 1 1 * command

 

3.3、設置開機自動啓動服務

運行setup或其它服務設置工具,將crond服務勾選上

chkconfig --level 2345 crond on  定義在這幾個系統運行級別上啓用crond (系統安裝完默認就是這個設置)

__________________________________________

 

十、.NTP客戶端的設置

 

一、LINUX做爲客戶端自動同步時間

如果想定時進行時間校準,可以使用crond服務來定時執行。

編輯 /etc/crontab 文件

加入下面一行:

 

30 8 * * * root /usr/sbin/ntpdate 192.168.0.1; /sbin/hwclock -w  #192.168.0.1NTP服務器的IP地址

然後重啓crond服務

service crond restart

這樣,每天 8:30 Linux 系統就會自動的進行網絡時間校準。

 

十一、WINDOWS 需要打開windows time服務和RPC的二個服務

如果在打開windows time 服務,時報 錯誤1058,進行下面操作

1.運行 cmd 進入命令行,然後鍵入

w32tm /register  進行註冊

正確的響應爲:W32Time 成功註冊。

 

2.如果上一步正確,用 net start "windows time" 或 net start w32time 啓動服務。

 

十三、.其它造成無法成功更新的原因:

1、客戶端的日期必須要設置正確,不能超出正常時間24小時,不然會因爲安全原因被拒絕更新。其次客戶端的時區必須要設置好,以確保不會更新成其它時區的時間。

2fudge 127.127.1.0 stratum 10 如果是LINUX做爲NTP服務器,stratum(層級)的值不能太大,如果要向上級NTP更新可以設成2

3LINUXNTP服務器必須記得將從上級NTP更新的時間從系統時間寫到硬件裏去 hwclock --systohc

     NTP一般只會同步system clock. 但是如果我們也要同步RTC(hwclock)的話那麼只需要把下面的選項打開就可以了

      代碼:

      # vi /etc/sysconfig/ntpd

      SYNC_HWCLOCK=yes

4Linux如果開啓了NTP服務,則不能手動運行ntpdate更新時間(會報端口被佔用),它只能根據/etc/ntp.conf server 字段後的服務器地址按一定時間間隔自動向上級NTP服務器更新時間。可以運行命令 ntpstat 查看每次更新間隔如:

[root@ESXI ~]# ntpstat

synchronised to NTP server (210.72.145.44) at stratum 2    #NTP服務器層次爲2,已向210.72.145.44 NTP同步過

   time correct to within 93 ms                                               #時間校正到相差93ms之內

   polling server every 1024 s                                                 #1024秒會向上級NTP輪詢更新一次時間 

發佈了19 篇原創文章 · 獲贊 17 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章