2012-04-16

NTP - 網路校時

Network Time Protocol (NTP) 主要的用途是拿來做網路校時,這個名詞凍仁還是學生時就在計算機概論一課程聽過,卻不知其重要性,直到吃了大虧才知道很多情況下是不容許時間有誤差的,尤其是具有唯一性的時候,索性幫公司架設了台 NTP Server 並讓區網內所有的 Server 都與它校時,這樣一來可與上層校時,二來也可讓區網內部的 Server 時間具有一致性

不能說從此就高枕無憂了,但狀況能少一個是一個,而且老舊的機器多少有些狀況,CMOS 換了也不見得有作用,既然可以靠軟體來解決就不必手軟了。

1. Server


1.1. 安裝 NTP 服務


1.1.1. Debian / Ubuntu

1.1.1.1. 查詢套件名稱。
[ jonny@debian-server ~ ]
$ sudo aptitude search ntp [Enter]
[sudo] password for jonny: 
p   chntpw                                                - NT SAM password recovery utility                                
p   cyrus-nntpd-2.2                                       - Cyrus mail system (NNTP support)                                
v   cyrus21-nntpd                                         -                                                                 
v   cyrus22-nntpd                                         -                                                                 
p   libnet-ntp-perl                                       - Perl module to query NTP servers                                
p   libnews-nntpclient-perl                               - Perl module to access NNTP servers                              
p   libxfontp-dev                                         - X11 font rasterisation library with Xprint support (development 
p   libxfontp1                                            - X11 font rasterisation library with Xprint support              
p   libxfontp1-dbg                                        - X11 font rasterisation library with Xprint support (debug packag
p   mountpy                                               - script for quick mounting of removable devices                  
p   ntp                                                   - Network Time Protocol daemon and utility programs
p   ntp-doc                                               - Network Time Protocol documentation                             
i   ntpdate                                               - client for setting system time from NTP servers
p   sinntp                                                - tiny non-interactive NNTP client

1.1.1.2. 安裝套件
[ jonny@debian-server ~ ]
$ sudo aptitude install ntp [Enter]

1.1.2. Redhat / CentOS

1.1.2.1. 查詢套件名稱 (此範例環境為 32 位元的 CentOS)。
[ jonny@centos-server ~ ]
$ yum search ntp [Enter]
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tc.edu.tw
 * extras: ftp.tc.edu.tw
 * updates: ftp.tc.edu.tw
====================================== Matched: ntp ======================================
adjtimex.i386 : A utility for adjusting kernel time variables.
chkfontpath.i386 : Simple interface for editing the font path for the X font server.
cyrus-imapd.i386 : A high-performance mail server with IMAP, POP3, NNTP and SIEVE support
inn.i386 : The InterNetNews (INN) system, an Usenet news server.
ntp.i386 : Synchronizes system time using the Network Time Protocol (NTP).
system-config-date.noarch : A graphical interface for modifying system date and time
xfce4-fsguard-plugin.i386 : Filesystem-Guard plugin for the Xfce panel

1.1.2.2. 安裝套件。
[ jonny@centos-server ~ ]
$ yum install ntp [Enter]

1.1.2.3. 開機自動啟動 NTP 服務。
[ jonny@centos-server ~ ]
$ chkconfig ntpd on [Enter]
ntpd         0:off 1:off 2:on 3:on 4:on 5:on 6:off

1.2. 環境設定


校時的 Server 不能亂選,一般只能使用 Level 3 以下的機器,除非真有那麼個本事管到 Lv 2 以上。
[ jonny@server ~ ]
$ sudo vi /etc/ntp.conf [Enter]
# = 上層校時伺服器設定 =

# - Debian 預設的校時伺服器。
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst

# - RHEL 預設的校時伺服器。
#server 0.rhel.pool.ntp.org
#server 1.rhel.pool.ntp.org
#server 2.rhel.pool.ntp.org

# - CentOS 預設的校時伺服器。
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org

# - Microsoft Windows 預設的校時伺服器。

server time.windows.com prefer # 主要校時的上層 NTP Server。

# - 台灣常用的校時伺服器。
server time.stdtime.gov.tw
server clock.stdtime.gov.tw
server watch.stdtime.gov.tw

# - 日本常用的校時伺服器。
#server 0.jp.pool.ntp.org
#server 1.jp.pool.ntp.org
#server 2.jp.pool.ntp.org
#server 3.jp.pool.ntp.org

# AWS 的校時伺服器。
#server 0.amazon.pool.ntp.org iburst
#server 1.amazon.pool.ntp.org iburst
#server 2.amazon.pool.ntp.org iburst
#server 3.amazon.pool.ntp.org iburst

# = 權限設定 =

# - 預設允許本機使用。

restrict 127.0.0.1
restrict -6 ::1

# - 允許 192.168.11.0/24 網段。
restrict 192.168.11.0     mask 255.255.255.0     nomodify

1.3. 防火牆及埠口


1.3.1. 允許 NTP 服務(udp)進入防火牆。
[ jonny@server ~ ]
$ sudo iptables -A INPUT -m udp -p udp --sport 123 -d 0/0 --dport 123 -j ACCEPT [Enter]

[ jonny@server ~ ]
$ sudo iptables -A FORWARD -m udp -p udp --sport 123 -d 0/0 --dport 123 -j ACCEPT

1.3.2. 察看有無傾聽(listen) 123 埠口(Port)。
[ jonny@server ~ ]
$ sudo netstat -nlp | grep ntp [Enter]
udp        0      0 10.150.85.145:123       0.0.0.0:*                           15748/ntpd
udp        0      0 127.0.0.1:123           0.0.0.0:*                           15748/ntpd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           15748/ntpd
udp6       0      0 fe80::1031:43ff:fe0:123 :::*                                15748/ntpd
udp6       0      0 ::1:123                 :::*                                15748/ntpd
udp6       0      0 :::123                  :::*                                15748/ntpd

1.4. 檢測 NTP 服務


1.4.1. 察看同步狀態 (不適用於 Debian 6)。
[ jonny@server ~ ]
$ ntpstat [Enter]
synchronised to NTP server (65.55.21.17) at stratum 3
    time correct to within 105 ms
    polling server every 1024 s

1.4.2. 察看與上層的同步狀態,各項說明請參考 鳥哥的 Linux 私房菜
[ jonny@server ~ ]
$ ntpq -p [Enter]
remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*wwwco1test12.mi 64.236.96.53     2 u   30   64  377  170.141   -3.533  18.675
+59-124-196-84.H 59.124.196.86    2 u   23   64  377   36.023   20.247  15.053
+clock.stdtime.g 220.130.158.70   2 u   20   64  377   40.096   -4.748  17.998
+59-124-196-85.H 59.124.196.86    2 u   25   64  377   34.366   17.730  10.913

2. Client


2.1. 校時成功。
[ jonny@client ~ ]
$ sudo /usr/sbin/ntpdate $HOST [Enter]
6 Apr 12:24:44 ntpdate[12172]: adjust time server $HOST offset 0.057422 sec

2.2. 校時失敗時,請檢查防火牆是否有開啟。
[ jonny@client ~ ]
$ sudo /usr/sbin/ntpdate $HOST [Enter]
6 Apr 12:23:36 ntpdate[12157]: no server suitable for synchronization found

2.3. 若不使用自家 NTP Server,在 Debian/Ubuntu 還有 ntpdate-debian 命令可用。
[ jonny@debian ~ ]
$ sudo ntpdate-debian [Enter]
16 Apr 22:01:17 ntpdate[20857]: adjust time server 91.189.94.4 offset 0.284967 sec

2.4. 寫入 BIOS。
[ jonny@debian ~ ]
$ sudo hwclock -w [Enter]

3. Cron Job


一切都搞定以後我們還可以將 client 端的校時工作丟到排程裡,這下就大功告成了!
[ jonny@debian ~ ]
$ sudo crontab -e [Enter]
[...]
* 1 * * * /usr/sbin/ntpdate $HOST &> /var/log/ntpdate.log

在 master, slave 或與金流有關的架構下請一定要定時做 NTP 校時,否則日後會很難追查 log。

延伸閱讀:
IPTables-Linux Firewall - 不自量力 の Weithenn

相關連結:
How do I synchronise my single Debian Linux desktop clock to network?
[備忘錄]Ubuntu 網路校時 @ 酒中狂士的狐狸窩 :: 痞客邦 PIXNET ::

資料來源:
鳥哥的 Linux 私房菜 -- NTP 時間伺服器
Debian / Ubuntu Linux Install NTPD To Synchronism Clock With Internet Standard Time Servers

3 則留言 :

  1. 手上還有一些 time server 列表
    不過有些不是台灣的

    tick.stdtime.gov.tw
    tock.stdtime.gov.tw
    stdtime.sinica.edu.tw
    time-a.nist.gov
    time-b.nist.gov
    tick.usno.navy.mil
    tock.usno.navy.mil

    回覆刪除
    回覆
    1. 感謝 @日落 提供,記得校時的 Server 是不能亂選,一般都只能用 Level 3 以下的,有空在補上詳細的說明文章了。

      刪除

謝謝您的寶貴意見,凍仁一定會盡快處理 ~^^