Linux的NTP配置總結
linux ntpd 總結
轉自:https://www.cnblogs.com/kerrycode/archive/2015/08/20/4744804.html
在Linux系統中,為了避免主機時間因為在長時間執行下所導致的時間偏差,進行時間同步(synchronize)的工作是非常必要的。Linux系統下,一般使用ntp服務來同步不同機器的時間。NTP 是網路時間協議(Network Time Protocol)的簡稱,幹嘛用的呢?就是通過網路協議使計算機之間的時間同步化。
安裝NTP包
檢查是否安裝了ntp相關包。如果沒有安裝ntp相關包,使用rpm或yum安裝,安裝也非常簡單方便。
[[email protected] ~]# rpm -qa | grep ntp
ntpdate-4.2.6p5-1.el6.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntp-4.2.6p5-1.el6.x86_64
NTP的配置
A: 配置/etc/ntp.conf
NTP Server的主要配置檔案為/etc/ntp.conf ,沒有修改過的ntp.conf檔案內容如下所示,配置選項都有相關注釋資訊(Linux 版本為Red Hat Enterprise Linux Server release 6.6 )
[[email protected] ~]# more /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
# 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
#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
# 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 loopstats peerstats
各個選項資訊:
#系統時間與BIOS事件的偏差記錄
driftfile /etc/ntp/drift
restrict 控制相關許可權。
語法為: restrict IP地址 mask 子網掩碼 引數
其中IP地址也可以是default ,default 就是指所有的IP
引數有以下幾個:
ignore :關閉所有的 NTP 聯機服務
nomodify:客戶端不能更改服務端的時間引數,但是客戶端可以通過服務端進行網路校時。
notrust :客戶端除非通過認證,否則該客戶端來源將被視為不信任子網
noquery :不提供客戶端的時間查詢:使用者端不能使用ntpq,ntpc等命令來查詢ntp伺服器
notrap :不提供trap遠端登陸:拒絕為匹配的主機提供模式 6 控制訊息陷阱服務。陷阱服務是 ntpdq 控制訊息協議的子系統,用於遠端事件日誌記錄程式。
nopeer :用於阻止主機嘗試與伺服器對等,並允許欺詐性伺服器控制時鐘
kod : 訪問違規時傳送 KoD 包。
restrict -6 表示IPV6地址的許可權設定。
1:設定NTP主機來源(其中prefer表示優先主機),192.168.7.49是本地的NTP伺服器,所以優先指定從該主機同步時間。
server 192.168.7.49 prefer
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
2:限制你允許的這些伺服器的訪問型別,在這個例子中的伺服器是不容許修改執行時配置或查詢您的Linux NTP伺服器
restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap
在上例中,掩碼地址擴充套件為255,因此從192.168.0.1-192.168.0.254的伺服器都可以使用我們的NTP伺服器來同步時間
#此時表示限制向從192.168.0.1-192.168.0.254這些IP段的伺服器提供NTP服務。
restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap noquery
#設定預設策略為允許任何主機進行時間同步
restrict default ignore
3:確保localhost(這個常用的IP地址用來指Linux伺服器本身)有足夠許可權.使用沒有任何限制關鍵詞的語法:
restrict 127.0.0.1
restrict -6 ::1
B:配置/etc/ntp/stpe-tickers檔案
修改/etc/ntp/stpe-tickers檔案,內容如下(當ntpd服務啟動時,會自動與該檔案中記錄的上層NTP服務進行時間校對)
[[email protected] ntp]# more /etc/ntp/step-tickers
# List of servers used for initial synchronization.
[[email protected] ntp]# vi /etc/ntp/step-tickers
# List of servers used for initial synchronization.
server 192.168.7.49 prefer
server 0.rhel.pool.ntp.org
server 1.rhel.pool.ntp.org
server 2.rhel.pool.ntp.org
server 3.rhel.pool.ntp.org
關於ntp.conf and step-tickers區別:
step-tickers is used by ntpdate where as ntp.conf is the configuration file for the ntpd daemon. ntpdate is initially run to set the clock before ntpd to make sure time is within 1000 sec. ntp will not run if the time difference between the server and client by more then 1000 sec ( or there about). The start up script will read step-tickers for servers to be polled by ntpdate.
C:配置/etc/sysconfig/ntpd檔案
ntp服務,預設只會同步系統時間。如果想要讓ntp同時同步硬體時間,可以設定/etc/sysconfig/ntpd檔案,在/etc/sysconfig/ntpd檔案中,新增 SYNC_HWCLOCK=yes 這樣,就可以讓硬體時間與系統時間一起同步。
#允許BIOS與系統時間同步,也可以通過hwclock -w 命令
SYNC_HWCLOCK=yes
IPTABLES 配置
由於NTP服務需要使用到UDP埠號123,所以當系統的防火牆(Iptables)啟動的情況下,必須開放UDP埠號123。
[[email protected] ~]# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[[email protected] ~]# /sbin/iptables -I INPUT -p udp --dport 123 -j ACCEPT
[[email protected] ~]# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:123
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[[email protected] ~]#
如果防火牆沒有開放UDP埠號123,有可能出現下面情況。
[[email protected] ~]# /usr/sbin/ntpq -c rv | grep stratum
stratum=16, precision=-24, rootdelay=0.000, rootdisp=3.525, refid=INIT,
A stratum level of 16 indicates that NTP is not synchronizing correctly.If a stratum level of 16 is detected, wait 15 minutes and issue the command again. It may take this long for the NTP server to stabilize.If NTP continues to detect a stratum level of 16, verify that the NTP port (UDP Port 123) is open on all firewalls between the cluster and the remote machine you are attempting to synchronize to.
啟動NTP服務
[[email protected] ~]# service ntpd status
ntpd is stopped
[[email protected] ~]# service ntpd start
Starting ntpd: [ OK ]
[[email protected] ~]#
service ntpd status #檢視ntpd服務狀態
service ntpd start #啟動ntpd服務
service ntpd stop #停止ntpd服務
service ntpd restart #重啟ntpd服務
檢查ntp服務是否開機啟動,將其設定為開機啟動。
[[email protected] ~]# chkconfig --list ntpd
ntpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[[email protected] ~]# runlevel
N 3
[[email protected] ~]# chkconfig ntpd on #在執行級別2、3、4、5上設定為自動執行
[[email protected] ~]# chkconfig --list ntpd
ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[[email protected] ~]#
如果要設定在執行級別上自動執行,可以使用下面命令
chkconfig --level 345 ntpd on
可以用下面命令檢測NTP服務是否執行
[[email protected] ~]# pgrep ntpd
2639
2641
[[email protected] ~]# netstat -tlunp | grep ntp #如果看到123埠,說明ntp服務成功啟動。
udp 0 0 192.168.7.224:123 0.0.0.0:* 2639/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 2639/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 2639/ntpd
udp 0 0 fe80::250:56ff:feb3:b5:123 :::* 2639/ntpd
udp 0 0 ::1:123 :::* 2639/ntpd
udp 0 0 :::123 :::* 2639/ntpd
[[email protected] ~]#
檢視ntp伺服器有無和上層ntp連通
[[email protected] ~]# ntpstat
synchronised to NTP server (192.168.7.49) at stratum 6
time correct to within 440 ms
polling server every 128 s
[[email protected] ~]#
檢視ntp伺服器與上層ntp的狀態
[[email protected] ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.7.49 192.168.7.50 5 u 13 64 3 5.853 1137178 2.696
[[email protected] ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.7.49 192.168.7.50 5 u 17 64 3 5.853 1137178 2.696
[[email protected] ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.7.49 192.168.7.50 5 u 1 64 1 0.937 -9.570 0.000
remote - 本機和上層ntp的ip或主機名,“+”表示優先,“*”表示次優先
refid - 參考上一層ntp主機地址
st - stratum階層
when - 多少秒前曾經同步過時間
poll - 下次更新在多少秒後
reach - 已經向上層ntp伺服器要求更新的次數
delay - 網路延遲
offset - 時間補償
jitter - 系統時間與bios時間差
要檢視 ntpd 程序的狀態,請執行以下命令,按 Ctrl+C 停止檢視程序。
第一列中的字元指示源的質量。星號 ( * ) 表示該源是當前引用。
remote 列出源的 IP 地址或主機名。
when 指出從輪詢源開始已過去的時間(秒)。
poll 指出輪詢間隔時間。該值會根據本地時鐘的精度相應增加。
reach 是一個八進位制數字,指出源的可存取性。值 377 表示源已應答了前八個連續輪詢。
offset 是源時鐘與本地時鐘的時間差(毫秒)。
ntpd、ntpdate的區別
下面是網上關於ntpd與ntpdate區別的相關資料。如下所示所示:
使用之前得弄清楚一個問題,ntpd與ntpdate在更新時間時有什麼區別。ntpd不僅僅是時間同步伺服器,它還可以做客戶端與標準時間伺服器進行同步時間,而且是平滑同步,並非ntpdate立即同步,在生產環境中慎用ntpdate,也正如此兩者不可同時執行。
時鐘的躍變,對於某些程式會導致很嚴重的問題。許多應用程式依賴連續的時鐘——畢竟,這是一項常見的假定,即,取得的時間是線性的,一些操作,例如資料庫事務,通常會地依賴這樣的事實:時間不會往回跳躍。不幸的是,ntpdate調整時間的方式就是我們所說的”躍變“:在獲得一個時間之後,ntpdate使用settimeofday(2)設定系統時間,這有幾個非常明顯的問題:
第一,這樣做不安全。ntpdate的設定依賴於ntp伺服器的安全性,攻擊者可以利用一些軟體設計上的缺陷,拿下ntp伺服器並令與其同步的伺服器執行某些消耗性的任務。由於ntpdate採用的方式是跳變,跟隨它的伺服器無法知道是否發生了異常(時間不一樣的時候,唯一的辦法是以伺服器為準)。
第二,這樣做不精確。一旦ntp伺服器宕機,跟隨它的伺服器也就會無法同步時間。與此不同,ntpd不僅能夠校準計算機的時間,而且能夠校準計算機的時鐘。
第三,這樣做不夠優雅。由於是跳變,而不是使時間變快或變慢,依賴時序的程式會出錯(例如,如果ntpdate發現你的時間快了,則可能會經歷兩個相同的時刻,對某些應用而言,這是致命的)。因而,唯一一個可以令時間發生跳變的點,是計算機剛剛啟動,但還沒有啟動很多服務的那個時候。其餘的時候,理想的做法是使用ntpd來校準時鐘,而不是調整計算機時鐘上的時間。
NTPD 在和時間伺服器的同步過程中,會把 BIOS 計時器的振盪頻率偏差——或者說 Local Clock 的自然漂移(drift)——記錄下來。這樣即使網路有問題,本機仍然能維持一個相當精確的走時。
參考資料: