網(wǎng)絡(luò)時(shí)間協(xié)議(NTP)用來(lái)同步網(wǎng)絡(luò)上不同主機(jī)的系統(tǒng)時(shí)間。你管理的所有主機(jī)都可以和一個(gè)指定的被稱(chēng)為 NTP 服務(wù)器的時(shí)間服務(wù)器同步它們的時(shí)間。而另一方面,一個(gè) NTP 服務(wù)器會(huì)將它的時(shí)間和任意公共 NTP 服務(wù)器,或者你選定的服務(wù)器同步。由 NTP 管理的所有系統(tǒng)時(shí)鐘都會(huì)同步精確到毫秒級(jí)。
在公司環(huán)境中,如果他們不想為 NTP 傳輸打開(kāi)防火墻,就有必要設(shè)置一個(gè)內(nèi)部 NTP 服務(wù)器,然后讓員工使用內(nèi)部服務(wù)器而不是公共 NTP 服務(wù)器。在這個(gè)指南中,我們會(huì)介紹如何將一個(gè) CentOS 系統(tǒng)配置為 NTP 服務(wù)器。在介紹詳細(xì)內(nèi)容之前,讓我們先來(lái)簡(jiǎn)單了解一下 NTP 的概念。
為什么我們需要 NTP?
由于制造工藝多種多樣,所有的(非原子)時(shí)鐘并不按照完全一致的速度行走。有一些時(shí)鐘走的比較快而有一些走的比較慢。因此經(jīng)過(guò)很長(zhǎng)一段時(shí)間以后,一個(gè)時(shí)鐘的時(shí)間慢慢的和其它的發(fā)生偏移,這就是常說(shuō)的 “時(shí)鐘漂移” 或 “時(shí)間漂移”。為了將時(shí)鐘漂移的影響最小化,使用 NTP 的主機(jī)應(yīng)該周期性地和指定的 NTP 服務(wù)器交互以保持它們的時(shí)鐘同步。
在不同的主機(jī)之間進(jìn)行時(shí)間同步對(duì)于計(jì)劃備份、入侵檢測(cè)記錄、分布式任務(wù)調(diào)度或者事務(wù)訂單管理來(lái)說(shuō)是很重要的事情。它甚至應(yīng)該作為日常任務(wù)的一部分。
NTP 的層次結(jié)構(gòu)
NTP 時(shí)鐘以層次模型組織。層級(jí)中的每層被稱(chēng)為一個(gè) stratum(階層)。stratum 的概念說(shuō)明了一臺(tái)機(jī)器到授權(quán)的時(shí)間源有多少 NTP 跳。
Stratum 0 由沒(méi)有時(shí)間漂移的時(shí)鐘組成,例如原子時(shí)鐘。這種時(shí)鐘不能在網(wǎng)絡(luò)上直接使用。Stratum N (N > 1) 層服務(wù)器從 Stratum N-1 層服務(wù)器同步時(shí)間。Stratum N 時(shí)鐘能通過(guò)網(wǎng)絡(luò)和彼此互聯(lián)。
NTP 支持多達(dá) 15 個(gè) stratum 的層級(jí)。Stratum 16 被認(rèn)為是未同步的,不能使用的。
準(zhǔn)備 CentOS 服務(wù)器
現(xiàn)在讓我們來(lái)開(kāi)始在 CentOS 上設(shè)置 NTP 服務(wù)器。
首先,我們需要保證正確設(shè)置了服務(wù)器的時(shí)區(qū)。在 CentOS 7 中,我們可以使用 timedatectl 命令查看和更改服務(wù)器的時(shí)區(qū)(比如,"Australia/Adelaide",LCTT 譯注:中國(guó)可設(shè)置為 Asia/Shanghai )
# timedatectl list-timezones | grep Australia
# timedatectl set-timezone Australia/Adelaide
# timedatectl
繼續(xù)并使用 yum 安裝需要的軟件
# yum install ntp
然后我們會(huì)添加全球 NTP 服務(wù)器用于同步時(shí)間。
# vim /etc/ntp.conf/p>
p> server 0.oceania.pool.ntp.org
server 1.oceania.pool.ntp.org
server 2.oceania.pool.ntp.org
server 3.oceania.pool.ntp.org
默認(rèn)情況下,NTP 服務(wù)器的日志保存在 /var/log/messages。如果你希望使用自定義的日志文件,那也可以指定。
logfile /var/log/ntpd.log
如果你選擇自定義日志文件,確保更改了它的屬主和 SELinux 環(huán)境。
# chown ntp:ntp /var/log/ntpd.log
# chcon -t ntpd_log_t /var/log/ntpd.log
現(xiàn)在初始化 NTP 服務(wù)并確保把它添加到了開(kāi)機(jī)啟動(dòng)。
# systemctl restart ntp
# systemctl enable ntp
驗(yàn)證 NTP Server 時(shí)鐘
我們可以使用 ntpq 命令來(lái)檢查本地服務(wù)器的時(shí)鐘如何通過(guò) NTP 同步。
下面的表格解釋了輸出列。
remote 源在 ntp.conf 中定義。‘*’ 表示當(dāng)前使用的,也是最好的源;‘+’ 表示這些源可作為 NTP 源;‘-’ 標(biāo)記的源是不可用的。
refid 用于和本地時(shí)鐘同步的遠(yuǎn)程服務(wù)器的 IP 地址。
st Stratum(階層)
t 類(lèi)型。 'u' 表示單播(unicast)。其它值包括本地(local)、多播(multicast)、廣播(broadcast)。
when 自從上次和服務(wù)器交互后經(jīng)過(guò)的時(shí)間(以秒數(shù)計(jì))。
poll 和服務(wù)器的輪詢(xún)間隔,以秒數(shù)計(jì)。
reach 表示和服務(wù)器交互是否有任何錯(cuò)誤的八進(jìn)制數(shù)。值 337 表示 100% 成功(即十進(jìn)制的255)。
delay 服務(wù)器和遠(yuǎn)程服務(wù)器來(lái)回的時(shí)間。
offset 我們服務(wù)器和遠(yuǎn)程服務(wù)器的時(shí)間差異,以毫秒數(shù)計(jì)。
jitter 兩次取樣之間平均時(shí)差,以毫秒數(shù)計(jì)。
控制到 NTP 服務(wù)器的訪問(wèn)
默認(rèn)情況下,NTP 服務(wù)器允許來(lái)自所有主機(jī)的查詢(xún)。如果你想過(guò)濾進(jìn)來(lái)的 NTP 同步連接,你可以在你的防火墻中添加規(guī)則過(guò)濾流量。
# iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 123 -j ACCEPT
# iptables -A INPUT -p udp --dport 123 -j DROP
該規(guī)則允許從 192.168.1.0/24 來(lái)的 NTP 流量(端口 UDP/123),任何其它網(wǎng)絡(luò)的流量會(huì)被丟棄。你可以根據(jù)需要更改規(guī)則。
配置 NTP 客戶(hù)端
1. Linux
NTP 客戶(hù)端主機(jī)需要 ntpupdate 軟件包來(lái)和服務(wù)器同步時(shí)間??梢暂p松地使用 yum 或 apt-get 安裝這個(gè)軟件包。安裝完軟件包之后,用服務(wù)器的 IP 地址運(yùn)行下面的命令。
# ntpdate server-IP-address>
基于 RHEL 和 Debian 的系統(tǒng)命令都相同。
2. Windows
如果你正在使用 Windows,在日期和時(shí)間設(shè)置(Date and Time settings)下查找網(wǎng)絡(luò)時(shí)間(Internet Time)。
3. Cisco 設(shè)備
如果你想要同步 Cisco 設(shè)備的時(shí)間,你可以在全局配置模式下使用下面的命令。
# ntp server server-IP-address>
來(lái)自其它廠家的支持 NTP 的設(shè)備有自己的用于網(wǎng)絡(luò)時(shí)間的參數(shù)。如果你想將設(shè)備和 NTP服務(wù)器同步時(shí)間,請(qǐng)查看設(shè)備的說(shuō)明文檔。
結(jié)論
總而言之,NTP 是在你的所有主機(jī)上同步時(shí)鐘的一個(gè)協(xié)議。我們已經(jīng)介紹了如何設(shè)置 NTP 服務(wù)器并使支持 NTP 的設(shè)備和服務(wù)器同步時(shí)間。
希望能對(duì)你有所幫助。