如何在 Linux 上安裝、設定 NTP 伺服器和用戶端?

2019-05-04 13:39:00

你也許聽說過這個詞很多次或者你可能已經在使用它了。在這篇文章中我將會清晰的告訴你 NTP 伺服器和用戶端的安裝。

之後我們將會了解 Chrony NTP 用戶端的安裝

什麼是 NTP 服務?

NTP 意即網路時間協定Network Time Protocol。它是通過網路在計算機系統之間進行時鐘同步的網路協定。換言之,它可以讓那些通過 NTP 或者 Chrony 用戶端連線到 NTP 伺服器的系統保持時間上的一致(它能保持一個精確的時間)。

NTP 在公共網際網路上通常能夠保持時間延遲在幾十毫秒以內的精度,並在理想條件下,它能在區域網下達到低於一毫秒的延遲精度。

它使用使用者資料包協定(UDP)在埠 123 上傳送和接受時間戳。它是個 C/S 架構的應用程式。

NTP 用戶端

NTP 用戶端將其時鐘與網路時間伺服器同步。

Chrony 用戶端

Chrony 是 NTP 用戶端的替代品。它能以更精確的時間更快的同步系統時鐘,並且它對於那些不總是線上的系統很有用。

為什麼我們需要 NTP 服務?

為了使你組織中的所有伺服器與基於時間的作業保持精確的時間同步。

為了說明這點,我將告訴你一個場景。比如說,我們有兩個伺服器(伺服器 1 和伺服器 2)。伺服器 1 通常在 10:55 完成離線作業,然後伺服器 2 在 11:00 需要基於伺服器 1 完成的作業報告去執行其他作業。

如果兩個伺服器正在使用不同的時間(如果伺服器 2 時間比伺服器 1 提前,伺服器 1 的時間就落後於伺服器 2),然後我們就不能去執行這個作業。為了達到時間一致,我們應該安裝 NTP。

希望上述能清除你對於 NTP 的疑惑。

在這篇文章中,我們將使用下列設定去測試。

  • NTP 伺服器: 主機名:CentOS7.2daygeek.com,IP:192.168.1.8,OS:CentOS 7
  • NTP 用戶端: 主機名:Ubuntu18.2daygeek.com,IP:192.168.1.5,OS:Ubuntu 18.04

NTP 伺服器端:如何在 Linux 上安裝 NTP?

因為它是 C/S 架構,所以 NTP 伺服器端和用戶端的安裝包沒有什麼不同。在發行版的官方倉庫中都有 NTP 安裝包,因此可以使用發行版的包管理器安裝它。

對於 Fedora 系統,使用 DNF 命令 去安裝 ntp。

$ sudo dnf install ntp

對於 Debian/Ubuntu 系統,使用 APT-GET 命令 或者 APT 命令 去安裝 ntp。

$ sudo apt install ntp

對基於 Arch Linux 的系統,使用 Pacman 命令 去安裝 ntp。

$ sudo pacman -S ntp

對 RHEL/CentOS 系統,使用 YUM 命令 去安裝 ntp。

$ sudo yum install ntp

對於 openSUSE Leap 系統,使用 Zypper 命令 去安裝 ntp。

$ sudo zypper install ntp

如何在 Linux 上設定 NTP 伺服器?

安裝 NTP 軟體包後,請確保在伺服器端的 /etc/ntp.conf 檔案中取消以下設定的注釋。

預設情況下,NTP 伺服器設定依賴於 X.distribution_name.pool.ntp.org。 如果有必要,可以使用預設設定,也可以存取https://www.ntppool.org/zone/@站點,根據你所在的位置(特定國家/地區)進行更改。

比如說如果你在印度,然後你的 NTP 伺服器將是 0.in.pool.ntp.org,並且這個地址適用於大多數國家。

# vi /etc/ntp.confrestrict default kod nomodify notrap nopeer noqueryrestrict -6 default kod nomodify notrap nopeer noqueryrestrict 127.0.0.1restrict -6 ::1server 0.asia.pool.ntp.orgserver 1.asia.pool.ntp.orgserver 2.asia.pool.ntp.orgserver 3.asia.pool.ntp.orgrestrict 192.168.1.0 mask 255.255.255.0 nomodify notrapdriftfile /var/lib/ntp/driftkeys /etc/ntp/keys

我們僅允許 192.168.1.0/24 子網的用戶端存取這個 NTP 伺服器。

由於預設情況下基於 RHEL7 的發行版的防火牆是開啟的,因此要允許 ntp 服務通過。

# firewall-cmd --add-service=ntp --permanent# firewall-cmd --reload

更新設定後要重新啟動服務:

對於 sysvinit 系統。基於 Debian 的系統需要去執行 ntp 而不是 ntpd

# service ntpd restart# chkconfig ntpd on

對於 systemctl 系統。基於 Debian 的需要去執行 ntpntpd

# systemctl restart ntpd# systemctl enable ntpd

NTP 用戶端:如何在 Linux 上安裝 NTP 用戶端?

正如我在這篇文章中前面所說的。NTP 伺服器端和用戶端的安裝包沒有什麼不同。因此在用戶端上也安裝同樣的軟體包。

對於 Fedora 系統,使用 DNF 命令 去安裝 ntp。

$ sudo dnf install ntp

對於 Debian/Ubuntu 系統,使用 APT-GET 命令 或者 APT 命令 去安裝 ntp。

$ sudo apt install ntp

對基於 Arch Linux 的系統,使用 Pacman 命令 去安裝 ntp。

$ sudo pacman -S ntp

對 RHEL/CentOS 系統,使用 YUM 命令 去安裝 ntp。

$ sudo yum install ntp

對於 openSUSE Leap 系統,使用 Zypper 命令 去安裝 ntp。

$ sudo zypper install ntp

我已經在 CentOS7.2daygeek.com` 這台主機上安裝和設定了 NTP 伺服器,因此將其附加到所有的用戶端機器上。

# vi /etc/ntp.conf
restrict default kod nomodify notrap nopeer noqueryrestrict -6 default kod nomodify notrap nopeer noqueryrestrict 127.0.0.1restrict -6 ::1server CentOS7.2daygeek.com prefer iburstdriftfile /var/lib/ntp/driftkeys /etc/ntp/keys

更新設定後重新啟動服務:

對於 sysvinit 系統。基於 Debian 的系統需要去執行 ntp 而不是 ntpd

# service ntpd restart# chkconfig ntpd on

對於 systemctl 系統。基於 Debian 的需要去執行 ntpntpd

# systemctl restart ntpd# systemctl enable ntpd

重新啟動 NTP 服務後等待幾分鐘以便從 NTP 伺服器獲取同步的時間。

在 Linux 上執行下列命令去驗證 NTP 服務的同步狀態。

# ntpq –p或# ntpq -pn     remote           refid      st t when poll reach   delay   offset  jitter==============================================================================*CentOS7.2daygee 133.243.238.163  2 u   14   64   37    0.686    0.151  16.432

執行下列命令去得到 ntpd 的當前狀態。

# ntpstatsynchronised to NTP server (192.168.1.8) at stratum 3   time correct to within 508 ms   polling server every 64 s

最後執行 date 命令。

# dateTue Mar 26 23:17:05 CDT 2019

如果你觀察到 NTP 中輸出的時間偏移很大。執行下列命令從 NTP 伺服器手動同步時鐘。當你執行下列命令的時候,確保你的 NTP 用戶端應該為未活動狀態。(LCTT 譯註:當時間偏差很大時,用戶端的自動校正需要花費很長時間才能逐步追上,因此應該手動執行以更新)

# ntpdate –uv CentOS7.2daygeek.com