NTP - 架設時間校對伺服器

1、前言

NTP (Network Time Protocol) 是由美國德拉瓦大學的 D.L. Mills 教授於 1985 年提出,而 NTP 倒底有什麼功用呢? 當您的區網內有許多伺服器,而每一台伺服器各自去和 stratum 1/2 public ntp servers 對時是浪費網路資源且不智的做法。比較好的作法是在區網裡有一台伺服器和外面 stratum 1/2 ntp servers 對時,並將對時訊息廣播到區網裡。


而認證方式為使用 Symmetric-Key 即兩邊 (NTP Server 及 NTP Client) 存放同樣的 Key Files 好有個依據來確認 Broadcast NTP Client 所收到的 Broadcast NTP 封包是由 NTP Server所發出來的。這個 Key Files 可以利用 ntp-genkeys 產生,然後存放至您想要存放的地方,例如 /etc/ntp.keys (記得設定權限 chmod 600)。





文章目錄

1、前言
2、實作環境
3、NTP Server 設定
          步驟1.設定 ntp.conf
          步驟2.產生 ntp.keys
          步驟3.修改 /etc/rc.conf
          步驟4.啟動 ntp 服務
4、NTP Client 設定 (FreeBSD)
          步驟1.設定 ntp.conf
          步驟2.修改 /etc/rc.conf
          步驟3.複製 ntp.keys
          步驟4.啟動 ntp 服務
5、NTP Client 設定 (Windows)
          使用 Windows 架設 NTP Server
6、參考
7、Me FAQ
          Q1.一直出現類似 ntpd[3628]: kernel time sync enabled 2001 訊息?
          Q2.啟動 ntpd 服務出現 ntpd[9554]: no IPv6 interfaces found 訊息?
          Q3.安裝 NTPClock 中文版為何介面裡中文字變成問號?





2、實作環境

  • FreeBSD 5.x、6.x
  • ntpd 4.x.x
  • NTPClock.exe (Windows NTP Client Software)





3、NTP Server 設定

步驟 1、設定 ntp.conf

設定 NTP 設定檔 ntp.conf 將離您地區較近的時間校對伺服器加入 (此例為填入台灣及亞洲時間校對伺服器)。
vi /etc/ntp.conf             //修改 ntp.conf 內容如下
 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 time.chttl.com.tw
 server 0.asia.pool.ntp.org
 server 1.asia.pool.ntp.org
 server 2.asia.pool.ntp.org
 broadcast 192.168.10.255 key 1 //設定區網內的 Broadcast 資訊
 driftfile /var/db/ntp.drift    //記載 NTP Server 的 System Clock 性能
 keys /etc/ntp.keys             //指定存放 Broadcast Key Files 路徑
 trustedkey 1 2
 requestkey 2
 controlkey 2




步驟 2、產生 ntp.keys

ntpd 4.0.x 跟 ntpd 4.2.x 用來產生 Broadcast Key Files 指令是不同的,詳細原因請參考  FreeBSD src repository

ntpd 4.0.x 使用指令 ntp-genkeys 來產生 Broadcast Key Files。
cd /tmp
ntp-genkeys -hlf    //產生 ntp MD5 key 內容如下
 1 M 1&{|h|Fd8eQYX|Z< # MD5 key
 2 M x>Dn%RxxLi@'~h0t # MD5 key
 3 M fWi(/rcr},Q=vG|4 # MD5 key
cp `ls -1t ntp.keys* | head -1` /etc/ntp.keys //複製到 /etc 下

ntpd 4.2.x 使用指令 ntp-keygen 來產生 Broadcast Key Files (Support IPv6)。
cd /tmp
dd if=/dev/urandom of=/root/.rnd bs=1024 count=1  //需先產生一個亂數檔
ntp-keygen -M                                         //產生 ntp MD5 key 內容如下
 1 M 1&{|h|Fd8eQYX|Z< # MD5 key
 2 M x>Dn%RxxLi@'~h0t # MD5 key
 3 M fWi(/rcr},Q=vG|4 # MD5 key
cp `ls -1t ntpkey_* | head -1` /etc/ntp.keys     //複製到 /etc 下

若您使用 ntpd 4.2.x 在沒有產生亂數檔以前就直接執行 ntp-keygen -M 指令時系統會告知沒有亂數檔所以無法產生 Broadcast Key Files 訊息如下:
 Using OpenSSL version 90705f
 RAND_load_file /home/user/weithenn/.rnd not found or empty




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

修改 rc.conf 內容以便系統重新開機時能自動啟動 NTP 服務。
vi /etc/rc.conf      //修改 rc.conf 內容如下
 ntpd_enable="YES"
 ntpd_flags="-p /var/run/ntpd.pid -f /var/db/ntpd.drift"




步驟 4、啟動 ntp 服務

依下列方式啟動 ntp 服務 (擇一即可)。
/usr/src/etc/rc.d/ntpd start   //啟動 ntp 服務 (方法一)
/etc/rc.d/ntpd start            //啟動 ntp 服務 (方法二)

啟動完成後確定 ntpd 執行序是否正在執行中。
ps ax | grep ntpd
 54100 ?? Ss 0:00.01 /usr/sbin/ntpd -p /var/run/ntpd.pid -f /var/db/ntpd.drift

檢查 ntpd 服務是否聆聽該服務 Port 123。
sockstat |grep ntpd
 root ntpd 54100 4 udp4 *:123 *:*
 root ntpd 54100 5 udp4 192.168.10.254:123 *:*
 root ntpd 54100 7 udp4 127.0.0.1:123 *:*






4、NTP Client 設定 (FreeBSD)

步驟 1、設定 ntp.conf

設定 NTP 設定檔 ntp.conf 設定此台機器為 Broadcast Client 及指定存放 Broadcast Key Files 路徑即可。
vi /etc/ntp.conf           //修改 ntp.conf 內容如下
 broadcastclient yes          //指定為 Broadcast Client
 driftfile /var/db/ntp.drift  //記錄此台機器的 System Clock 性能
 keys /etc/ntp.keys           //指定存放 Broadcast Key Files 路徑
 trustedkey 1 2
 requestkey 2
 controlkey 2




步驟 2、修改 /etc/rc.conf

修改 rc.conf 內容以便系統重新開機時能自動啟動 NTP 服務。
vi /etc/rc.conf       //以便重開機時能自動載入
 ntpd_enable="YES"
 ntpd_flags="-p /var/run/ntpd.pid -f /var/db/ntpd.drift"




步驟 3、複製 ntp.keys

記得將剛才 NTP Server 產生的 Broadcast Key Files (ntp.keys) 複製到您指定存放 Broadcast Key Files 路徑 (/etc/ntp.keys),否則此 NTP Client 將無法跟 NTP Server 進行對時。



步驟 4、啟動 ntp 服務

依下列方式啟動 ntp 服務 (擇一即可)。
/usr/src/etc/rc.d/ntpd start   //啟動 ntp 服務 (方法一)
/etc/rc.d/ntpd start           //啟動 ntp 服務 (方法二)

啟動完成後確定 ntpd 執行序是否正在執行中。
ps ax | grep ntpd
 54100 ?? Ss 0:00.01 /usr/sbin/ntpd -p /var/run/ntpd.pid -f /var/db/ntpd.drift






5、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. 預設為 1 個小時跟指定的 NTP Server 對時若想馬上對時可按下【立即查尋主機時間】。

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

使用 Windows 架設 NTP Server

若您想使用 Windows 來架設 NTP Server 也很簡單只要安裝 Meinberg NTP Download 依照指示設定即可,詳細安裝內容可參考 NTP Installer for Windows Systems : Readme
  1. 下載 http://www.meinberg.de/download/ntp/windows/ntp-4.2.0a@mbg-fluxcap-o-win32-setup.exe。
  2. 開始依照指示安裝 (使用系統帳號來啟動 NTP Service 會有問題?)。
  3. 系統服務多了 Network Time Protocol Daemon。




6、參考





7、Me FAQ

Q1.一直出現類似 ntpd[3628]: kernel time sync enabled 2001 訊息?

Error Message:
當我啟動 ntpd 服務後一直出現類似下列訊息?
 ntpd[679]: kernel time sync disabled 2041
 ntpd[3628]: kernel time sync enabled 6001
 ntpd[3628]: kernel time sync enabled 2001

Ans:
答案是這樣的訊息是正常的,以下為在 IRC bsdchat 中尋問到的解答。
 14:22 < weithenn_> 請教一下
 14:22 < weithenn_> ntpd 4.2.0-a 一直跳 ntpd3628: kernel time sync enabled 2001
 14:23 <@llwang> 正常吧
 14:25 <@llwang> 就只是 ntpd 告訴你它在調時間罷了

以下為網路上針對這樣訊息的解釋:



Q2.啟動 ntpd 服務出現 ntpd[9554]: no IPv6 interfaces found 訊息?

Error Message:
當我啟動 ntpd 服務後出現類似下列訊息?
 ntpd[9554]: no IPv6 interfaces found
Ans:
原因在於把核心 (kernel) 中內 INET6 選項給註解掉 (mark) 所導致的。



Q3.安裝 NTPClock 中文版為何介面裡中文字變成問號?

Error Message:
當我安裝 NTPClock 中文版後為何所有的中文字都變成問號 ?

Ans:
請檢查您的 Windows 主機其【地區及語言選項】是否為【中文(台灣)】。
 【開始】 >> 【控制台】 >> 【地區及語言選項】 >> 地區選項中標準及格式內是否為【中文(台灣)】