站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

OpenNTPD-架設網路對時伺服器

前言

[OpenNTPD] 是 OpenBSD 的子計劃之一其目標就是提供一個安全的 NTP Service;當您的區網有許多伺服器,而每一台伺服器各自去和 stratum 1/2 public ntp servers 對時是浪費網路資源且不智的做法。較好的作法是 DMZ 裡一、二台伺服器 (屆時擔任 NTP Server 角色) 和外面 stratum 1/2 ntp servers 對時,而其它 DMZ 或 LAN 的機器 (屆時擔任 NTP Client 角色) 與之對時。

實作環境

安裝及設定

NTP Server 設定

步驟1.安裝 openntpd

安裝過程中系統會自動幫您新增 _ntp 這個 user、group,而屆時也會以這個帳號來啟動 openntpd 服務。

 #cd /usr/ports/net/openntpd         //切換至安裝路徑 
 #make install clean                 //安裝並清除安裝過程中不必要的檔案 

步驟2.設定 ntp.conf

修改 NTP 設定檔 ntpd.conf 將離您地區較近的時間校對伺服器加入 (此例為填入台灣及亞洲時間校對伺服器)

 #vi /usr/local/etc/ntpd.conf        //修改 openntpd 設定檔
 listen on 192.168.1.10              //指定屆時 openntpd 的 IP
 server tick.stdtime.gov.tw          //指定 Time Server
 server tock.stdtime.gov.tw
 server clock.stdtime.gov.tw
 server watch.stdtime.gov.tw
 server time.stdtime.gov.tw
 server ntp.ntu.edu.tw
 server 3.tw.pool.ntp.org
 server 1.asia.pool.ntp.org
 server 3.asia.pool.ntp.org

步驟3.修改 /etc/rc.conf、syslog.conf

修改 /etc/rc.conf 以便系統重新開機時能自動啟動 openntpd 服務

 #vi /etc/rc.conf                
 openntpd_enable="YES"

修改 /etc/syslog.conf 以便讓我們隨時檢查 NTP Server 去跟外面 Time Server 對時及調整本機時間的訊息

 #vi /etc/syslog.conf
 ntp.info                                        /var/log/openntpd.log

加入上列一行後我們先建立 openntpd.log 這個空檔後在 reload syslogd 服務

 #touch /var/log/openntpd.log                   //建立 openntpd.log 空檔
 #/etc/rc.d/syslogd reload                      //重新載入 syslogd 服務

步驟4.啟動 openntpd 服務

依如下方式啟動 openntpd 服務

 #/usr/local/etc/rc.d/openntpd.sh start         //啟動 openntpd 服務
 Starting openntpd.

檢查 openntpd 服務是否啟動成功

 # ps ax |grep ntpd
 72621  ??  Is     0:00.00 ntpd: [priv] (ntpd)
 72622  ??  S      0:00.16 ntpd: ntp engine (ntpd)
 73161  p3  R+     0:00.00 grep ntpd

啟動成功後可發現內部的 NTP Server (192.168.1.10) 已經開始跟外面的 Time Server 連接

 #sockstat |grep ntpd
 _ntp     ntpd       72622 3  dgram  -> /var/run/logpriv
 _ntp     ntpd       72622 4  udp4   192.168.1.10:54512     220.130.158.51:123
 _ntp     ntpd       72622 5  stream -> ??
 _ntp     ntpd       72622 6  udp4   192.168.1.10:123       *:*
 _ntp     ntpd       72622 7  udp4   192.168.1.10:51987     220.130.158.71:123
 _ntp     ntpd       72622 8  udp4   192.168.1.10:49509     220.130.158.72:123
 _ntp     ntpd       72622 9  udp4   192.168.1.10:62446     220.130.158.54:123
 _ntp     ntpd       72622 10 udp4   192.168.1.10:51543     192.115.133.35:123
 _ntp     ntpd       72622 11 udp4   192.168.1.10:58900     140.112.4.189:123
 _ntp     ntpd       72622 12 udp4   192.168.1.10:62115     61.70.206.117:123
 _ntp     ntpd       72622 13 udp4   192.168.1.10:52513     60.56.119.79:123
 _ntp     ntpd       72622 14 udp4   192.168.1.10:56684     220.130.158.52:123
 root     ntpd       72621 3  dgram  -> /var/run/logpriv
 root     ntpd       72621 4  stream -> ??

使用 ntptrace 指令來了解內部的 NTP Server (192.168.1.10) 與外部 Time Server 對時狀況

 #ntptrace 220.130.158.72
 220-130-158-72.HINET-IP.hinet.net: stratum 2, offset 0.002189, root distance 0.012691

或使用 ntpq 指令來了解內部的 NTP Server (192.168.1.10) 與外部 Time Server 對時狀況

 #ntpq -p 220.130.158.72
     remote           refid      st t when poll reach   delay   offset  jitter
 ==============================================================================
 +220-130-158-50. .IRIG.           1 u  187 1024  231   20.874   -0.271 499.767
 *220-130-158-70. .IRIG.           1 u  492 1024   67   12.691    2.189   0.957
 +220-130-158-51. 220.130.158.50   2 u    - 1024  167   75.498   28.432  13.156
  220-130-158-71. 220.130.158.50   2 u    - 1024  377    1.329   -3.495   0.151

步驟5.查看 openntpd.log

我們可以查看剛才設定的 openntpd.log 來了解目前本機的時間校對情況 (大約 3 ~ 5 分鐘調整 1 秒),基本上 openntpd 是慢慢調整時間,若您想一次就調整好可以利用 -s 來一次把時間調到標準 (有可能會出事?)

 #tail /var/log/openntpd.log
 Jul 31 15:09:46 mybsd ntpd[72622]: listening on 192.168.1.10
 Jul 31 15:09:46 mybsd ntpd[72622]: ntp engine ready
 Jul 31 15:10:03 mybsd ntpd[72622]: peer 220.130.158.72 now valid           //此 Time Server 有效
 Jul 31 15:10:04 mybsd ntpd[72622]: peer 61.70.206.117 now valid            //此 Time Server 有效
 Jul 31 15:10:06 mybsd ntpd[72622]: peer 220.130.158.52 now valid           //此 Time Server 有效
 Jul 31 15:11:06 mybsd ntpd[72621]: adjusting local clock by 454.400335s    //本機校時狀態
 Jul 31 15:15:25 mybsd ntpd[72621]: adjusting local clock by 453.485940s
 Jul 31 15:18:56 mybsd ntpd[72621]: adjusting local clock by 452.473868s
 Jul 31 15:22:45 mybsd ntpd[72621]: adjusting local clock by 451.561672s
 Jul 31 15:26:03 mybsd ntpd[72621]: adjusting local clock by 450.369801s
 Jul 31 15:29:52 mybsd ntpd[72621]: adjusting local clock by 449.532482s
 Jul 31 15:33:40 mybsd ntpd[72621]: adjusting local clock by 448.585979s

NTP Client 設定 (FreeBSD)

步驟1.安裝 openntpd

安裝過程中系統會自動幫您新增 _ntp 這個 user、group,屆時也會以這帳號來啟動 openntpd 服務。

 #cd /usr/ports/net/openntpd         //切換至安裝路徑 
 #make install clean                 //安裝並清除安裝過程中不必要的檔案

步驟2.設定 ntp.conf

修改 NTP 設定檔 ntp.conf 將內部的 NTP Server IP Address 加入

 #vi /usr/local/etc/ntp.conf         //修改 openntpd 設定檔
 server 192.168.1.10                 //指定內部的 NTP Server IP

步驟3.修改 /etc/rc.conf、syslog.conf

修改 /etc/rc.conf 以便重開機時能自動載入 openntpd 服務

 #vi /etc/rc.conf                
 openntpd_enable="YES"

修改 /etc/syslog.conf 以便讓我們了解跟內部 NTP Server 對時及調整本機時間的訊息

 #vi /etc/syslog.conf
 ntp.info                                        /var/log/openntpd.log

建立 openntpd.log 這個空檔後在 reload syslogd 服務

 #touch /var/log/openntpd.log                   //建立 openntpd.log 空檔
 #/etc/rc.d/syslogd reload                      //重新載入 syslogd 服務

步驟4.啟動 openntpd 服務

依如下方式啟動 openntpd 服務

 #/usr/local/etc/rc.d/openntpd.sh start         //啟動 openntpd 服務
 Starting openntpd.

檢查 openntpd 服務是否啟動成功

 #ps ax |grep ntpd
 5500  ??  Is     0:00.01 ntpd: [priv] (ntpd)
 5501  ??  I      0:00.02 ntpd: ntp engine (ntpd)
 5524  p0  R+     0:00.00 grep ntpd

可發現有去跟內部的 NTP Server (192.168.1.10) 連接

 #sockstat |grep ntpd
 _ntp     ntpd       5501  3  dgram  -> /var/run/logpriv
 _ntp     ntpd       5501  4  udp4   172.18.1.12:63701    192.168.1.10:123      //開始跟內部 NTP Server 溝通
 _ntp     ntpd       5501  5  stream -> ??
 root     ntpd       5500  3  dgram  -> /var/run/logpriv
 root     ntpd       5500  4  stream -> ??

步驟5.查看 openntpd.log

我們可以查看剛才設定的 openntpd.log 來了解目前本機的時間校對情況 (大約 3 ~ 5 分鐘調整 1 秒),基本上 openntpd 是慢慢調整時間,若您想一次就調整好可以利用 -s 來一次把時間調到標準 (有可能會出事?)

 #tail /var/log/openntpd.log
 Aug  1 17:21:08 testbsd ntpd[5443]: ntp engine exiting
 Aug  1 17:21:08 testbsd ntpd[5442]: Terminating
 Aug  1 17:21:08 testbsd ntpd[5501]: ntp engine ready
 Aug  1 17:21:30 testbsd ntpd[5501]: peer 192.168.1.10 now valid               //內部 NTP Server 有效
 Aug  1 17:22:24 testbsd ntpd[5500]: adjusting local clock by 398.739917s      //本機校時狀態
 Aug  1 17:25:39 testbsd ntpd[5500]: adjusting local clock by 397.073363s

NTP Client 設定 (Solaris 9)

步驟1.設定 ntp.conf

修改 NTP 設定檔 ntp.conf 將內部的 NTP Server IP Address 加入

 #cd /etc/inetd ; cp ntp.client ntp.conf        //複製 ntp client 範例檔來修改
 #vi ntp.conf                                   //加入如下三行
 server 192.168.1.10                            //指定內部的 NTP Server IP                        
 driftfile /var/ntp/ntp.drift                   //記載 System Clock 性能
 logfile /var/ntp/ntp.log                       //指定時間校對記錄檔路徑

步驟2.建立相關檔案 ntp.drift、ntp.log

利用 touch 指令建立屆時存取時間校對存放訊息檔案

 #touch /var/ntp/ntp.drift                      //屆時存放 System Clock 性能記錄檔
 #touch /var/ntp/ntp.log                        //屆時存放時間校對記錄檔

步驟3.啟動 xnptd 服務

執行如下指令來啟動 xnptd 服務

 #/etc/init.d/xntpd start                       //啟動 xnptd 服務

檢查 xntpd 服務是否啟動成功

 #ps -ef |grep ntpd
    root  9715     1  0 15:57:23 ?        0:00 /usr/lib/inet/xntpd

使用 ntpq 指令來了解跟內部 NTP Server (192.168.1.10) 對時狀況

 #ntpq -p
     remote           refid      st t when poll reach   delay   offset    disp
 ==============================================================================
 *192.168.1.10     220.130.158.51   3 u   21   64  377     0.46    1.764    0.23

使用 ntptrace 指令來了解跟內部 NTP Server (192.168.1.10) 對時狀況

 #ntptrace -n 127.0.0.1
 127.0.0.1: stratum 4, offset 0.000028, synch distance 0.01624
 192.168.1.10: stratum 3, offset 0.001898, synch distance 0.00569
 220.130.158.51: stratum 2, offset 0.020941, synch distance 0.03044
 220.130.158.50: stratum 1, offset 0.180524, synch distance 1.00000, refid 'IRIG'

使用 snoop 指令來了解跟內部 NTP Server (192.168.1.10) 對時狀況

 #snoop |grep -i ntp
 Using device /dev/bge0 (promiscuous mode)
 192.168.1.11 -> 192.168.1.10  NTP  client (Wed Aug  1 11:41:34 2007)
 192.168.1.10 -> 192.168.1.11  NTP  server (Wed Aug  1 11:41:34 2007)

步驟4.查看 ntp.log、messages

查看 /var/ntp/ntp.log 來了解跟內部 NTP Server (192.168.1.10) 對時狀況

 #tail /var/ntp/ntp.log
 1 Aug 16:01:39 xntpd[9715]: synchronized to 192.168.1.10 , stratum=3
 1 Aug 12:47:43 xntpd[8605]: time reset (step) 171.638805 s

查看 /var/ntp/ntp.log 來了解跟內部 NTP Server (192.168.1.10) 對時狀況

 #tail -f /var/adm/messages |grep ntp
 Aug  1 14:53:58 sundev ntpdate[9394]: [ID 558275 daemon.notice] adjust time server 192.168.1.10  offset 0.004170 sec
 Aug  1 14:54:00 sundev xntpd[9396]: [ID 702911 daemon.notice] xntpd 3-5.93e Mon Sep 20 15:47:11 PDT 1999 (1)
 Aug  1 14:54:00 sundev xntpd[9396]: [ID 301315 daemon.notice] tickadj = 5, tick = 10000, tvu_maxslew = 495, est. hz = 100
 Aug  1 14:54:00 sundev xntpd[9396]: [ID 798731 daemon.notice] using kernel phase-lock loop 0041

NTP Client 設定 (Windows)

我們可使用 [國家時間與頻率標準實驗室][NTP 校時軟體(目前最新版本為 V2.1)] 來讓 Windows 機器也能跟 FreeBSD 所架設的 NTP Server 對時。

  1. 下載 [http://www.stdtime.gov.tw/chinese/EXE/NTPClock.exe],並安裝它
  2. 在【時間伺服器】欄位上填上 FreeBSD NTP Server IP Address --> 按下【增加】
  3. 勾選【信任未同步伺服器時間】
  4. 預設為一個小時跟指定的 NTP Server 對時若想馬上對時可按下【立即查尋主機時間】

有關於 NTPClock 軟體的操作可參考 [標準時間網路校時客戶端程式 (NTPClock) 操作說明]

參考

[潛艦 | http://to2100.idv.tw , Network Lab@FreeBSD . » FreeBSD Openntpd]

[Setup OpenNTPD - OSWikiHK]

[OpenNTPD Org]

[When {Puffy} Meets ^RedDevil^: FreeBSD Openntpd]

[HOWTO NTP Using OpenNTPD - Gentoo Linux Wiki]

[OpenNTPD OpenBSD Config Files]

[NTPPoolServers < Servers < NTP]

[pool.ntp.org: NTP Servers in Asia, asia.pool.ntp.org]

[pool.ntp.org: NTP Servers in Taiwan, tw.pool.ntp.org]

[Configuring OpenNTPD on OpenBSD 3.7]

[ports/114191: (patch) net/openntpd should use syslog facility LOG_NTP]

[ntp]

[OpenNTPD - Wikipedia, the free encyclopedia]

[Quick HOWTO : Ch24 : The NTP Server - Linux Home Networking]

[docs.sun.com: System Administration Guide: Resource Management and Network Services]

[鳥哥的 Linux 私房菜 -- NTP 時間伺服器]

Me FAQ

Q.openntpd.log 內沒有任何訊息寫入?

Error Message:

當我啟動 openntpd 服務想查看 openntpd.log 時,但該 log 內容都是空的

Ans:

請確定以下事項

若還是沒有訊息寫入指定的 log 內就設定為輸出 all.log 看看是否 ok,之前碰到的問題是修改 syslogd 寫 daemon.info 但 log 內容都是空的,看了這篇後 [ports/114191: (patch) net/openntpd should use syslog facility LOG_NTP] 改為 ntp.info 後 log 就有訊息寫入了。

Q.啟動 openntpd 服務失敗 fatal: bad privsep dir permissions?

Error Message:

安裝 openntpd 於 CentOS 主機上啟動 openntpd 服務失敗並且出現如下錯誤訊息

 #service openntpd start
  Starting ntpd:                                             [  OK  ]
 #service openntpd status
  ntpd dead but subsys locked
 #tail /var/log/messages
  Jun 20 09:32:34 centos5 ntpd[16938]: fatal: bad privsep dir permissions   //目錄權限錯誤 (/var/empty/ntp)
  Jun 20 09:32:34 centos5 ntpd[16937]: dispatch_imsg in main: pipe closed
  Jun 20 09:32:34 centos5 ntpd[16937]: Terminating

Ans:

從上述的錯誤訊息得知是 fatal: bad privsep dir permissions 目錄權限錯誤 (/var/empty/ntp),將該目錄權限改為 root 後 openntpd 服務便可正常啟動

 #ll /var/empty/ntp
  drwx------ 3 _ntp _ntp 4096 Jun 20 09:09 ntp
 #chown root /var/empty/ntp
 #service openntpd start
  Starting ntpd:                                             [  OK  ]
 #service openntpd status
  ntpd (pid 21696) is running...

Q.無法與 OpenNTPD 時間伺服器對時 Server dropped: Leap not in sync?

Error Message:

當 OpenNTPD 時間伺服器上線並且都跟網際網路上的 NTP 時間伺服器對時正常後想要跟它對時,卻一直得到如下的錯誤訊息說無法跟 OpenNTPD 對時。

 4 Jul 16:26:10 ntpdate[16856]: no server suitable for synchronization found

若是想 OpenNTPD 時間伺服器服務重新啟動則一開始會得到下列錯誤訊息表示 OpenNTPD 還沒開始進行對時 (Server dropped: strata too high) 因此不提供對時服務

 #ntpdate -d ntp.weithenn.org
 transmit(ntp.weithenn.org)
 receive(ntp.weithenn.org)
 ntp.weithenn.org: Server dropped: strata too high
 server ntp.weithenn.org, port 123
 stratum 3, precision -21, leap 11, trust 000
 refid [ntp.weithenn.org], delay 0.02562, dispersion 0.00005
 transmitted 4, in filter 4
 reference time:    d1bbfe9f.6c6997ff  Mon, Jul  4 2011 16:55:59.423
 originate timestamp: d1bc00f2.35ce57ff  Mon, Jul  4 2011 17:05:54.210
 transmit timestamp:  d1bc00f2.35c673b5  Mon, Jul  4 2011 17:05:54.210
 filter delay:  0.02562  0.02592  0.02571  0.02573
          0.00000  0.00000  0.00000  0.00000
 filter offset: -0.00000 0.000152 0.000042 0.000054
          0.000000 0.000000 0.000000 0.000000
 delay 0.02562, dispersion 0.00005
 offset -0.000001
 4 Jul 17:05:54 ntpdate[18208]: no server suitable for synchronization found

經過幾分鐘後仍然後無法對時不過得到的錯誤訊息有點不同,也就是 OpenNTPD 時間伺服器尚未完成時間校對 (Server dropped: Leap not in sync)' 因此不提供對時服務

 #ntpdate -d ntp.weithenn.org
 transmit(ntp.weithenn.org)
 receive(ntp.weithenn.org)
 ntp.weithenn.org: Server dropped: Leap not in sync
 server ntp.weithenn.org, port 123
 stratum 3, precision -21, leap 11, trust 000
 refid [ntp.weithenn.org], delay 0.02573, dispersion 0.00000
 transmitted 4, in filter 4
 reference time:    d1bbfe9f.6c6997ff  Mon, Jul  4 2011 16:55:59.423
 originate timestamp: d1bc0073.863ebfff  Mon, Jul  4 2011 17:03:47.524
 transmit timestamp:  d1bc0073.4552c16d  Mon, Jul  4 2011 17:03:47.270
 filter delay:  0.02586  0.02573  0.02574  0.02574[ 0.00000 0.00000 0.00000 0.00000 filter offset: 0.253520 0.253535 0.253532 0.253529 0.000000 0.000000 0.000000 0.000000 delay 0.02573, dispersion 0.00000 offset 0.253535 4 Jul 17:03:47 ntpdate[18208]: no server suitable for synchronization found

Ans:

原因在於此台主機是裝在 VMware vSphere 內的虛擬主機,有加上 /boot/loader.conf 加入 Kern.hz="100" 參數防止 FreeBSD 運作於 VM 時會有時間異常變慢的問題,但此參數卻造成 FreeBSD 成為 OpenNTPD 時間伺服器時的阻礙,請將此參數拿掉 (主機需要重新開機才會生效) 並且指定對時的網際網路 NTP 伺服器不要太多筆即可,待 OpenNTPD 服務運作一段時間後您可以看到 /var/log/openntpd 記錄檔內出現 ntpd[792]: clock is now synced 字眼表示 OpenNTPD 對時完成,此時 NTP Client 再去對時便可成功!!

 #tail -f /var/log/openntpd
  Jul  5 12:25:07 ntp ntpd[1217]: listening on ntp.weithenn.org
  Jul  5 12:25:07 ntp ntpd[1217]: ntp engine ready
  Jul  5 12:25:26 ntp ntpd[1217]: peer 220.130.158.72 now valid
  Jul  5 12:25:28 ntp ntpd[1217]: peer 59.124.196.84 now valid
  Jul  5 12:26:21 ntp ntpd[1216]: adjusting local clock by -0.523646s
  Jul  5 12:26:25 ntp ntpd[1216]: clock is now synced

此時 NTP Client 再次嘗試對時即可成功!! 雖然如此不建議將 OpenNTPD 時間服務運作於虛擬主機上,原因是因為虛擬主機使用的 CPU 資源會隨著 Host 的負載而受到影響因此會連帶影響到身為虛擬主機的時間運作,因此建議虛擬主機只要透過所安裝 VMware Tools 跟 Host 進行對時即可,再下列連結中也有人討論到這個問題。

[openntpd on openbsd on esx]

Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com