Related Posts Plugin for WordPress, Blogger...

網管人雜誌

          本文刊載於 網管人雜誌第 58 期 - 2010 年 11 月 1 日出刊,NetAdmin 網管人雜誌 為一本介紹 Trend Learning 趨勢觀念、Solution Learning 解決方案、Technology Learning 技術應用的雜誌,下列筆記為本站投稿網管人雜誌獲得刊登的文章,網管人雜誌於每月份 1 日出刊您可於各大書店中看到它或透過下列圖示連結至博客來網路書店訂閱它。

文章目錄

1、前言
2、實作環境
3、OpenNTPD Server 安裝及設定
          安裝 OpenNTPD 套件
          設定 OpenNTPD 服務設定檔
          設定 OpenNTPD 服務記錄檔
          啟動 OpenNTPD 服務
          查看與網際網路 NTP 伺服器時間校對狀況
4、OpenNTPD Client 安裝及設定
          FreeBSD OpenNTPD Client 安裝及設定
          CentOS OpenNTPD Client 安裝及設定
          OpenSUSE OpenNTPD Client 安裝及設定
          Solaris OpenNTPD Client 安裝及設定
5、NTPD Client 安裝及設定
          Windows NTPD Client 設定
          vSphere ESX Host NTPD Client 設定

1、前言

          網路時間協定 NTP (Network Time Protocol) 最初由德拉瓦州大學 (Delaware University) 的大衛米爾斯 (David L. Mills) 所設計,NTP 協定主要用意為透過網路封包交換 (UDP Protocol, Port 123) 將二端電腦的時鐘進行同步化,若讀者想更詳細了解整個 NTP 協定的規範、實作、分析…等內容可參考 RFC 1305 (NTP version 3)、RFC 5905 (NTP version 4)。

          或許您曾有這樣的經驗為何硬體設備上線運作一段時間之後每台機器時間便開始有誤差?  事實上在企業環境中不管是任何等級的硬體設備在運作一段時間之後機器的時間一定會與中原標準時間有些許誤差,即使是二台相同的硬體設備同時上線運作一時間之後彼此的時間也將不盡相同,會造成這樣的誤差結果主要是硬體設備中負責計算時間的晶體震盪元件(Crystal Oscillator) 在製造過程中或多或少都會有些許誤差,而正因為這些許的誤差導致所震盪出來的頻率無法完全精準,也因此導致硬體設備運作一段時間後造成時間誤差的主因。

          為何企業需要建置時間校對伺服器 (NTP Server)?  在企業營運環境中擁有為數眾多的伺服器,倘若伺服器之間的時間不同步可能會造成的影響為例如 Kerberos 驗證失敗,當伺服器之間的時間誤差超過 5 分鐘即會造成驗證失敗,例如 企業購物平台當前端 AP 伺服器與後端資料庫伺服器時間不同步則可能產生使用者下單記錄在資料庫伺服器上顯示為未來時間下單,又或者優惠活動時間明明已經結束但使用者仍然可以下單購買造成客服人員的困擾,又例如 公司財務報表產生時因為伺服器之間的時間不同步造成財務報表合併時在核對上出現困擾……等,以上舉例的種種問題原因便是出在伺服器之間時間不同步所造成。

          或許您會說把企業內部伺服器設定與網路上公開的 NTP 伺服器例如 國家時間與頻率標準實驗室建立的 NTP 伺服器進行時間校對不就解決問題了嗎? 話雖如此但您是否有想過企業環境有著為數眾多的伺服器,倘若每台伺服器都去跟網際網路上公開的 NTP 伺服器進行時間校對,不但浪費公司的頻寬對於防火牆管理上也必須多開啟一個 UDP 協定及存取 Port 123,況且在企業應用環境中有些伺服器是無法碰觸到網際網路的,因此在企業內部架設一台 NTP 伺服器由此伺服器去跟網際網路上公開的 NTP 伺服器進行時間校對,而之後企業內部環境中的伺服器在跟此台 NTP 伺服器進行時間校對,此一作法對於頻寬的使用、防火牆的管理、安全性的考量上來說是比較推薦的作法。

          此次實作的 OpenNTPD 伺服器與一般的 NTP 伺服器有著不同的特點,一般 NTP 伺服器與 NTP 客戶端的時間校對方式為 “一次性同步到位” 來調整系統時間,也就是不管目前 NTP 客戶端時間與 NTP 伺服器之間相差多少時間一律一次調整到位,這樣比較偏暴力性一次到位同步系統時間的方法在某些狀況下可能會對系統運作穩定性上產生問題,而此次實作的OpenNTPD 伺服器與OpenNTPD 客戶端的時間校對方式則為當OpenNTPD 客戶端與OpenNTPD 伺服器有時間誤差時,那麼OpenNTPD 客戶端每隔幾分鐘便進行 “微調” 系統時間,一直慢慢調整校對直到最後與OpenNTPD 伺服器時間達成一致,如此溫和的校對時間方法對於企業營運環境要求高穩定性伺服器來說相對是比較適合的。

2、實作環境

OpenNTPD Server
  • 作業系統: FreeBSD 8
  • 安裝套件: openntpd-4.6_1,2
  • IP 位址 : 10.10.25.66
  • 開啟服務: UDP Protocol, Port 123

OpenNTPD Client
  • 作業系統: FreeBSD 8.0
  • 安裝套件: openntpd-4.6_1,2、gcc-4.2.1.20070719、gmake-3.81_3
  • 作業系統: CentOS 5.5 (2.6.18-194.el5)
  • 安裝套件: openntpd-3.9p1、gcc-4.1.2-48.el5、make-3.81-3.el5
  • 作業系統: OpenSUSE 11 (2.6.25.5-1.1-pae)
  • 安裝套件: openntpd-3.9p1、gcc-4.3-39.1、make-3.81-103.1、syslogd-1.4.1-677.1
  • 作業系統: Solaris 10
  • 安裝套件: openntpd-3.9p1、gcc-4.1.2-48.el5、make-3.81-3.el5、binutils-2.20.1、libintl-3.4.0

NTPD Client
  • 作業系統: Windows 7 Professional
  • 操作平台: VMware vSphere ESX 4.0

3、OpenNTPD Server 安裝及設定

安裝 OpenNTPD 套件

          OpenNTPD 套件為凡事講求高品質程式碼及系統高安全性 OpenBSD 的子計劃項目之一,也因此它繼承OpenBSD 的設計理念OpenNTPD 其目標就是提供使用者一個既安全又穩定的 NTP 服務,在 OpenNTPD 安裝過程中系統會自動建立 _ntp 這個使用者帳號及群組至系統中,而屆時也會利用此一帳號來啟動 OpenNTPD 服務避免因為服務使用 root 帳號啟動造成此服務若被攻陷便可取得系統管理者權限的安全性漏洞風險,另外在開始安裝 OpenNTPD 套件以前請先執行更新 Ports Tree 的動作以便確保您所安裝的 OpenNTPD 套件為最新發行的穩定版本,那麼就讓我們開始來安裝 OpenNTPD 套件吧!! 請鍵入如下指令切換至 openntpd 套件路徑後執行套件安裝的動作並清除安裝過程中所產生的暫存檔案。
# cd /usr/ports/net/openntpd
# make install clean          


設定 OpenNTPD 服務設定檔

          套件安裝完成後便可開始著手設定 OpenNTPD 的設定檔來指定屆時要聆聽 (Listen) 此服務的 IP 位址,及此台 OpenNTPD 伺服器要去跟哪些網際網路上公開且可信度高的 Stratum NTP 伺服器網址進行時間校對,此次實作中我們指定的 NTP 伺服器位址有 中華電信研究所時間與頻率國家標準實驗室 (5台)、台大網際網路時間伺服器 (2台)、NTP 組織亞洲區NTP Server (4台),至於 OpenNTPD 伺服器會去找哪一台 NTP 伺服器進行時間校對呢? 基本上 OpenNTPD 伺服器會依當時的頻寬情況自行選擇最合適的 NTP 伺服器進行時間校對,OpenNTPD 伺服器設定檔內容如下:
# cat /usr/local/etc/ntpd.conf
   listen on 10.10.25.66      
   server tick.stdtime.gov.tw  
   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 ntp2.ntu.edu.tw      
   server 0.asia.pool.ntp.org    
   server 1.asia.pool.ntp.org  
   server 2.asia.pool.ntp.org  
   server 3.asia.pool.ntp.org     


設定 OpenNTPD 服務記錄檔

          設定完 OpenNTPD 服務設定檔之後為了方便觀察日後時間校對的運作情況,我們可以建立專屬 OpenNTPD 服務記錄檔來記錄整個時間校對的詳細情況而非與系統預設的 /var/log/message 記錄檔一起混用,請您修改 FreeBSD 管理記錄檔內設定檔內容將 OpenNTPD 服務的記錄寫入指定檔案後重新載入 syslogd 服務,屆時 OpenNTPD 服務啟動時便會開始將相關訊息寫入指定檔案中。
# vi /etc/syslog.conf                                                  
    ntp.info                     /var/log/openntpd.log
# touch /var/log/openntpd.log                                        
# /etc/rc.d/syslogd reload                                               


啟動 OpenNTPD 服務

          準備好 OpenNTPD 服務設定檔及記錄檔等相關環境設定後即可準備啟動 OpenNTPD 服務,為了使 OpenNTPD 服務能在 FreeBSD 重新開機時自動載入此服務請修改 /etc/rc.conf 設定檔內容修改完成後即可啟動 OpenNTPD 服務,啟動 OpenNTPD 服務後您可以發現伺服器開始檢查本身跟網際網路 NTP 伺服器是否可以溝通並開始進行時間校對的動作,恭喜您已經完成 OpenNTPD 伺服器的架設。
# vi /etc/rc.conf                                                            
   openntpd_enable="YES"                    //加上此行                  
# /usr/local/etc/rc.d/openntpd  start                                        
# tail /var/log/openntpd.log
    Sep  2 16:15:30 ntpserver ntpd[2153]: listening on 10.10.25.66
    Sep  2 16:15:30 ntpserver ntpd[2153]: ntp engine ready
    Sep  2 16:15:48 ntpserver ntpd[2153]: peer 220.130.158.72 now valid
    Sep  2 16:15:50 ntpserver ntpd[2153]: peer 220.130.158.51 now valid
    Sep  2 16:15:52 ntpserver ntpd[2153]: peer 211.39.136.4 now valid
    Sep  2 16:15:52 ntpserver ntpd[2153]: peer 218.50.1.115 now valid
    Sep  2 16:15:53 ntpserver ntpd[2153]: peer 220.130.158.71 now valid
    Sep  2 16:15:53 ntpserver ntpd[2153]: peer 123.146.124.27 now valid
    Sep  2 16:15:54 ntpserver ntpd[2153]: peer 220.130.158.54 now valid
    Sep  2 16:16:49 ntpserver ntpd[2152]: adjusting local clock by 1.992184s
    Sep  2 16:18:58 ntpserver ntpd[2152]: adjusting local clock by 1.348287s
    Sep  2 16:22:48 ntpserver ntpd[2152]: adjusting local clock by 0.922526s
    Sep  2 16:24:22 ntpserver ntpd[2152]: adjusting local clock by 0.875526s
    Sep  2 16:28:42 ntpserver ntpd[2152]: adjusting local clock by 0.744633s


查看與網際網路 NTP 伺服器時間校對狀況

          若您想了解目前架設的 OpenNTPD 伺服器與網際網路 NTP 伺服器的時間校對狀況,您可使用 ntpq 指令配合 –p 參數來顯示時間校對詳細情況,如下即為 OpenNTPD 伺服器與中華電信研究所時間與頻率國家標準實驗室其中一台 NTP 伺服器的時間校對情況。
ntpserver# ntpq -p clock.stdtime.gov.tw
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*220-130-158-50. .IRIG.           1 u    2 1024  337   17.374   -1.407   1.169
-tick.stdtime.go 220.130.158.50   2 u   19 1024  377   25.768    0.652  33.620
-time.stdtime.go 220.130.158.50   2 u  932 1024  275   56.610    4.381   6.099
-tock.stdtime.go 220.130.158.50   2 u   59 1024  377    1.293   -2.758   0.119
 220-130-158-70. .IRIG.           1 u  37m 1024    4   11.944   -0.547   0.001
+time-a.nist.gov .ACTS.           1 u  335 1024  377  207.035   -5.718   2.708
+ntp0.usno.navy. .USNO.           1 u  973 1024  377  236.477    7.646   0.062

4、OpenNTPD Client 安裝及設定

          建立內部環境使用的 OpenNTPD 伺服器完成後接下來便是 OpenNTPD 客戶端的設定,本次舉例的 OpenNTPD Client安裝及設定共有 FreeBSD、CentOS、OpenSUSE、Solaris 等四種常見的 Unix-Like作業系統;雖然 OpenNTPD 並沒有提供支援 Windows 作業系統的 OpenNTPD 套件,但您仍可使用 Windows 內建的 NTP 功能與 OpenNTPD 伺服器進行時間校對,在後面的內容便會提到如何設定。

FreeBSD OpenNTPD Client 安裝及設定

          在 FreeBSD 中設定 OpenNTPD Server 及 Client 流程其實一模一樣,差別僅僅在於 OpenNTPD Client 設定檔內容僅有一行就是指定 OpenNTPD Server IP 位址即可,其餘安裝及設定方式跟 OpenNTPD Server 皆完全相同,也就是安裝 OpenNTPD 套件、設定 OpenNTPD 設定檔及記錄檔、啟動 OpenNTPD 服務即可完成 OpenNTPD Client 設定,在開始設定以前我們先故意將系統時間調快 5分鐘再進行後續的安裝及設定作業,如此一來等啟動 OpenNTPD 服務後便可發現系統開始跟 OpenNTPD 伺服器慢慢進行時間校對。
# cd /usr/ports/net/openntpd                                              
# make install clean                                                        
# vi /usr/local/etc/ntp.conf                                                
  server 10.10.25.66                                                      
# vi /etc/syslog.conf                                                        
  ntp.info                        /var/log/openntpd.log    
# touch /var/log/openntpd.log                                              
# /etc/rc.d/syslogd reload                                                  
# /usr/local/etc/rc.d/openntpd.sh start                                      
# tail /var/log/openntpd.log                                                  
 Sep  2 17:21:08 bsdclient ntpd[5501]: ntp engine ready                    
 Sep  2 17:21:30 bsdclient ntpd[5501]: peer 10.10.25.66 now valid        
 Sep  2 17:22:24 bsdclient ntpd[5500]: adjusting local clock by 308.739917s
 Sep  2 17:25:39 bsdclient ntpd[5500]: adjusting local clock by 306.073363s
 Sep  2 17:28:19 bsdclient ntpd[5500]: adjusting local clock by 305.052321s
 Sep  2 17:32:47 bsdclient ntpd[5500]: adjusting local clock by 302.013123s
 Sep  2 17:37:01 bsdclient ntpd[5500]: adjusting local clock by 301.034892s


CentOS OpenNTPD Client 安裝及設定

          在安裝 OpenNTPD Client 以前請您先使用 rpm –qa 指令來確認 CentOS 是否已經安裝 gcc 及 make 套件 (若系統沒有安裝請使用指令 YUM 套件管理工具進行安裝) 以便等一下安裝 OpenNTPD 套件時能順利進行編譯 (Compiler) 及安裝 (make) 的動作,並且在設定前先故意將系統時間調快 5分鐘待之後啟動 OpenNTPD 服務後可發現系統開始跟 OpenNTPD 伺服器慢慢進行時間校對。

下載 OpenNTPD 套件後編譯及安裝
因為在 CentOS 中 YUM 套件管理工具並未收錄 OpenNTPD 套件,因此請自行從 OpenBSD 的鏡像站台下載 OpenNTPD 套件並進行解壓縮及編譯並安裝的動作,請先利用 wget 指令下載 OpenNTPD 套件至個人家目錄下 package 資料夾內,並將 OpenNTPD 套件檔案解壓縮後執行 ./configure 及 make、make install 指令來進行套件編譯及安裝的動作。
# mkdir ~/package  ;  cd ~/package                                      
# wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenNTPD/openntpd-3.9p1.tar.gz
# tar zxvf openntpd-3.9p1.tar.gz                                            
# cd openntpd-3.9p1                                                        
# ./configure                                                              
# make                                                                      
# make install                                                                  


建立 _ntp 使用者帳號及群組並修改 OpenNTPD 設定檔
          安裝 OpenNTPD 套件至系統完成後,請使用 useradd 及 groupadd 指令配合相關參數來新增 _ntp 使用者帳號及群組,並設定 OpenNTPD 設定檔指定 OpenNTPD 伺服器 IP 位址及設定OpenNTPD 記錄檔,設定完成後請重新載入系統日誌服務 syslogd 讓變更生效即可。
# groupadd _ntp                                                              
# useradd -g _ntp -s /sbin/nologin -d /var/empty/ntp -c 'OpenNTP Daemon' _ntp
# mkdir /var/empty/ntp                                                        
# cp /usr/local/etc/ntpd.conf  /usr/local/etc/ntpd.conf.def                      
# vi /usr/local/etc/ntpd.conf                                                    
    server 10.10.25.66                                                            
# vi /etc/syslog.conf                                                            
    daemon.info                                        /var/log/openntpd.log    
# touch /var/log/openntpd.log                                                  
# service syslogd reload                                                           


增加 OpenNTPD 至服務清單內並啟動 OpenNTPD 服務
          將 openntpd 增加至 CentOS 內建的服務清單內,設定當 CentOS 重新開機時能夠自動啟動 OpenNTPD 服務來自動與 OpenNTPD 伺服器進行時間校對作業,完成設定後即可啟動 OpenNTPD 服務並透過記錄檔來觀察主機與 OpenNTPD 伺服器進行時間校對的情況。
# cp  ~/package/openntpd-3.9p1/contrib/redhat/ntpd  /etc/init.d/openntpd
# chmod +x /etc/init.d/openntpd                                              
# vi /etc/init.d/openntpd                                                      
   prog="ntpd"                                                                
   PATH=/usr/local/sbin:$PATH     //加上此行                                
# chkconfig --add openntpd                                                    
# chkconfig openntpd on                                                      
# chkconfig --list openntpd                                                    
   openntpd        0:off   1:off   2:on    3:on    4:on    5:on    6:off    
# service openntpd start                                                        
   Starting ntpd:                                             [  OK  ]          
# tail /var/log/openntpd.log                                                    
   Sep  6 16:44:35 centosclient ntpd[11689]: ntp engine ready                  
   Sep  6 16:44:58 centosclient ntpd[11689]: peer 10.10.25.66 now valid      
   Sep  6 16:45:55 centosclient ntpd[11688]: adjusting local clock by 316.846255s
   Sep  6 16:49:51 centosclient ntpd[11688]: adjusting local clock by 314.083845s
   Sep  6 16:53:13 centosclient ntpd[11688]: adjusting local clock by 313.456357s
   Sep  6 16:57:09 centosclient ntpd[11688]: adjusting local clock by 310.352313s
   Sep  6 17:00:02 centosclient ntpd[11688]: adjusting local clock by 308.014113s


CentOS NTPD Client 設定
事實上,你也可以直接採用內建的 NTPD 機制進行對時。


OpenSUSE OpenNTPD Client 安裝及設定

          在安裝 OpenNTPD Client 以前請先使用指令 rpm –qa 確定 OpenSUSE 是否已經安裝 gcc 及 make 套件 (若系統沒有安裝請使用 YAST 套件管理工具進行安裝) 以便後續安裝 OpenNTPD 套件時能順利進行編譯及安裝的動作,另外由於 OpenSUSE 採用的日誌檔機制為 syslog-ng 而非一般 Linux 使用的 syslogd 為了使設定方便也請安裝 syslogd 套件,最後則於設定前先故意先將系統時間調快 5分鐘以便屆時啟動 OpenNTPD 服務後可透過查看記錄檔了解系統跟 OpenNTPD 伺服器是否有慢慢進行時間校對的情況。

下載 OpenNTPD 套件後編譯及安裝
          因為在 OpenSUSE 中 YAST 套件管理工具並未收錄 OpenNTPD 套件,因此請自行從 OpenBSD 的鏡像站台下載 OpenNTPD 套件並進行解壓縮及編譯並安裝的動作,請先利用 wget 指令下載 OpenNTPD 套件至個人家目錄下 package 資料夾內,並將 OpenNTPD 套件檔案解壓縮後執行 ./configure、make、make install 指令來進行套件編譯及安裝的動作。
# mkdir ~/package ; cd ~/package                                          
# wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenNTPD/openntpd-3.9p1.tar.gz
# tar zxvf openntpd-3.9p1.tar.gz                                            
# cd openntpd-3.9p1                                                        
# ./configure                                                              
# make                                                                    
# make install                                                                


建立 _ntp 使用者帳號及群組並修改 OpenNTPD 設定檔
          安裝 OpenNTPD 套件至系統完成後,請使用 useradd 及 groupadd 指令配合相關參數來新增 _ntp 使用者帳號及群組至系統中,並設定 OpenNTPD 設定檔指定 OpenNTPD 伺服器 IP 位址及設定OpenNTPD 記錄檔,並且使用指令 /sbin/syslogd 來手動啟動剛才透過 YAST 套件管理工具安裝的系統日誌服務 syslogd 即可。
# groupadd _ntp                                                              
# useradd -g _ntp -s /sbin/nologin -d /var/empty/ntp -c 'OpenNTP Daemon' _ntp
# mkdir /var/empty/ntp                                                        
# cp /usr/local/etc/ntpd.conf  /usr/local/etc/ntpd.conf.def                      
# vi /usr/local/etc/ntpd.conf                                                    
   server 10.10.25.66                                                            
# vi /etc/syslog.conf                                                            
   daemon.info                                        /var/log/openntpd.log    
# touch /var/log/openntpd.log                                                  
# /sbin/syslogd                                                                    


增加 OpenNTPD 至服務清單內並啟動 OpenNTPD 服務
          將 openntpd 增加至 OpenSUSE 內建的服務清單內,設定當 OpenSUSE 重新開機時能夠自動啟動 OpenNTPD 服務以便自動與 OpenNTPD 伺服器進行時間校對,完成設定後即可啟動 OpenNTPD 服務並透過觀察記錄檔了解目前主機與 OpenNTPD 伺服器進行時間校對的情況,而因為 OpenSUSE 系統再經過了 Novell 公司的改寫後與一般 Linux 有些許不同,因此我們必須修改 openntpd 內相關的內容才能讓程序在 OpenSUSE 系統中順利的跑起來,複製 openntpd 至 /etc/init.d 資料夾下之後,著手修改 openntpd 檔案內容請將 /etc/init.d/functions 內容修改為 /etc/rc.status 並請將 daemon ntpd 修改為 exec ntpd,完成修改並存檔之後便可以順利讓 openntpd 服務順利運作於 OpenSUSE 系統上。
# cp  ~/package/openntpd-3.9p1/contrib/redhat/ntpd  /etc/init.d/openntpd  
# chmod +x /etc/init.d/openntpd                                              
# vi /etc/init.d/openntpd                                                      
   . /etc/rc.status               //將預設值修改為 /etc/rc.status
   prog="ntpd"                                                                
   PATH=/usr/local/sbin:$PATH     //加上此行                              
   start() {                                                                    
        echo -n $"Starting $prog: "                                          
        exec ntpd                 //把 daemon 改成 exec                  
        RETVAL=$?                                                          
        echo                                                                
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ntpd                  
        return $RETVAL                                                      
   }                                                                            
# chkconfig --set openntpd on                                                
# chkconfig --list openntpd                                                    
   openntpd        0:off   1:off   2:off    3:on    4:off    5:on    6:off    
# service openntpd start                                                      
# tail /var/log/openntpd.log                                                    
   Sep  7 12:25:15 suseclient ntpd[9398]: ntp engine ready                      
   Sep  7 12:25:35 suseclient ntpd[9398]: peer 10.10.25.66 now valid          
   Sep  7 12:25:23 suseclient ntpd[9397]: adjusting local clock by 298.146225s
   Sep  7 12:29:57 suseclient ntpd[9397]: adjusting local clock by 295.083441s
   Sep  7 12:33:11 suseclient ntpd[9397]: adjusting local clock by 294.446332s
   Sep  7 12:37:49 suseclient ntpd[9397]: adjusting local clock by 291.152317s
   Sep  7 12:42:22 suseclient ntpd[9397]: adjusting local clock by 288.413122s   


OpenSUSE NTPD Client 設定
事實上,你也可以直接採用內建的 NTPD 機制進行對時。





Solaris OpenNTPD Client 安裝及設定

          在安裝 OpenNTPD Client 以前請先使用 pkginfo 指令來確定 Solaris 是否已經安裝 gcc、make、binutils、libintl 套件 (若系統沒有安裝請至 ftp.sunfreeware.com 下載後使用 gzip、pkgadd 指令進行套件安裝) 以便後續安裝 OpenNTPD 套件時能順利進行編譯及安裝的動作,並且於設定前先故意將系統時間調快 5分鐘以便後續啟動 OpenNTPD 服務後檢查系統是否有跟 OpenNTPD 伺服器慢慢進行時間校對。

下載 OpenNTPD 套件後編譯及安裝
          因為在 ftp.sunfreeware.com 中並未收錄 OpenNTPD 套件,因此我們將從 OpenBSD 鏡像站台上自行下載 OpenNTPD 套件後進行解壓縮及編譯並安裝的動作,請先利用 wget 指令下載 OpenNTPD 套件至 /opt 目錄下,並將 OpenNTPD 套件檔案解壓縮後執行 ./configure 及 make、make install 指令來進行套件編譯及安裝的動作。
# cd  /opt                                                                  
# wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenNTPD/openntpd-3.9p1.tar.gz
# gzip -d openntpd-3.9p1.tar.gz                                            
# tar xvf openntpd-3.9p1.tar                                                
# cd openntpd-3.9p1                                                        
# ./configure                                                              
# make                                                                    
# make install                                                                


建立 _ntp 使用者帳號及群組並修改 OpenNTPD 設定檔
          安裝 OpenNTPD 套件至系統後便可使用 useradd 及 groupadd 指令來建立 _ntp 使用者帳戶及群組於系統中 (請注意: 由於 Solaris 預設情況下並沒有 nologin 的使用者 Shell 可以指定,因此指定為 false),請設定 OpenNTPD 設定檔指定 OpenNTPD 伺服器的 IP 位址及設定OpenNTPD 記錄檔後重新啟動 Solaris 系統日誌服務 system-log (syslogd) 即套用剛才變更系統日誌服務設定檔的內容。
# groupadd _ntp                                                              
# useradd -g _ntp -s /usr/bin/false -d /var/empty/ntp -c 'OpenNTP Daemon' _ntp
# mkdir /var/empty/ntp                                                        
# cp /usr/local/etc/ntpd.conf  /usr/local/etc/ntpd.conf.def                      
# vi /usr/local/etc/ntpd.conf                                                    
   server 10.10.25.66                                                          
# vi  /etc/syslog.conf                                                          
   daemon.info                                        /var/log/openntpd.log  
# touch  /var/log/openntpd.log                                                
# svcadm  restart  system-log                                                   


增加 OpenNTPD 至服務清單內並啟動 OpenNTPD 服務
          將 openntpd 增加至 Solaris 系統預設啟動服務的資料夾內 (/etc/rc3.d),以便 Solaris 重新開機時能自動啟動 OpenNTPD 服務並自動與 OpenNTPD 伺服器進行時間校對,完成設定後即可啟動 OpenNTPD 服務並觀察主機與 OpenNTPD 伺服器進行時間校對的情況,將 openntpd 複製至 /etc/rc3.d 後更改名稱為 S99openntpd 以符合 Solaris 對於服務的命名規則,之後請修改 S99openntpd 內相關的內容使程序能在 Solaris 上順利執行,請將 S99openntpd 內 /etc/init.d/functions 該行內容註解掉及修改 daemon ntpd為 exec ntpd 並且將 killproc ntpd 修改為 /usr/bini/pkill ntpd,修改完成存檔離開之後即可順利讓 openntpd 服務順利運作於 Solaris 系統上。
# cp  ~/package/openntpd-3.9p1/contrib/redhat/ntpd  /etc/rc3.d/S99openntpd
# chmod root:sys  /etc/rc3.d/S99openntpd                                  
# chmod 744  /etc/rc3.d/S99openntpd                                      
# vi /etc/init.d/openntpd                                                      
   #. /etc/init.d/functions           //註解此行                      
   prog="ntpd"                                                                
   PATH=/usr/local/sbin:$PATH         //加上此行                      
   start() {                                                                    
        echo -n $"Starting $prog: "                                          
        exec ntpd                     //把 daemon 修改為 exec      
        RETVAL=$?                                                          
        echo                                                                
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ntpd                  
        return $RETVAL                                                      
   }                                                                            
   stop() {                                                                    
        echo -n $"Stopping $prog: "                                        
        /usr/bin/pkill ntpd 2>/dev/null  //把 killproc 修改為 /usr/bin/pkill
        RETVAL=$?                                                          
        Echo                                                                
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ntpd                  
        return $RETVAL                                                      
   }                                                                            
# /etc/rc3.d/S99openntpd start                                                
# tail /var/log/openntpd.log
   Sep 14 14:00:34 solarisclient ntpd[1955]: [ID 754417 daemon.info] ntp engine ready
   Sep 14 14:00:51 solarisclient ntpd[1955]: [ID 292915 daemon.info] peer 10.10.25.66 now valid
   Sep 14 14:01:42 solarisclient ntpd[1954]: [ID 977784 daemon.info] adjusting local clock by 326.536819s
   Sep 14 14:03:22 solarisclient ntpd[1954]: [ID 977784 daemon.info] adjusting local clock by 326.535435s
   Sep 14 14:05:09 solarisclient ntpd[1954]: [ID 977784 daemon.info] adjusting local clock by 324.654330s
   Sep 14 14:06:48 solarisclient ntpd[1954]: [ID 977784 daemon.info] adjusting local clock by 320.442625s
   Sep 14 14:10:45 solarisclient ntpd[1954]: [ID 977784 daemon.info] adjusting local clock by 316.623553s


5、NTPD Client 安裝及設定

          由於 OpenNTPD 並沒有提供支援 Windows 作業系統的 OpenNTPD 套件,但您仍可使用 Windows 內建的 NTP 功能來與剛才架設的 OpenNTPD 伺服器進行時間校對,您會發現若您的電腦有加入 Windows 網域 (Domain) 內那麼您會發現無法使用網際網路時間同步處理工具來手動同步電腦時間,會有這樣的情況發生原因在於網域成員會自動與 AD 伺服器進行時間校對並將 AD 伺服器設定為預設的 NTP 伺服器,因此只有在工作群組 (WorkGroup) 中的 Windows 電腦才可手動與此次架設的 OpenNTPD 伺服器進行時間校對。
另外虛擬化風潮正夯但仍不可避免的問題是伺服器之間會有時間誤差的問題,並且由於企業導入虛擬化技術對伺服器進行整併作業 (Server Consolidation) 後每台 ESX Host 內有著數量龐大的 Guest OS作業系統在一台 ESX Host 之中,因此 ESX 主機的時間準確性將連帶影響到所有的 Guest OS,此次舉例 VMware vSphere ESX 4.0 如何設定其 NTP 客戶端功能來與剛才架設的 OpenNTPD 伺服器進行時間校對。

Windows NTPD Client 設定

          此次設定使用 Windows 7 Professional 作業系統來與方才架設的 OpenNTPD 伺服器進行時間校對,在進行時間校對以前請先將 Windows 7 系統時間調快 1 小時以便等一下測試時間同步功能 (請注意: 屆時進行時間校對時為一次性調整到位,而非慢慢微調系統時間),那麼就讓我們開始設定吧!!

請先點選工作列右下角的【時間】接著點選【變更日期與時間設定值】。

接著點選【網際網路時間】標籤後按下【變更設定】按鈕。

在網際網路時間設定視窗中請於伺服器欄位填入OpenNTPD 伺服器 IP 位址也就是 10.10.25.66 完成後按下【立即更新】按鈕,即可發現 Windows 7 系統時間調整到正確的時間。

vSphere ESX Host NTPD Client設定

          此次設定 NTP Client 的虛擬化平台為 VMware vSphere ESX 4.0 與剛才架設的 OpenNTPD 伺服器進行時間校對,在進行時間校對以前請先將 ESX Host 系統時間調快 1 小時以便等一下測試時間同步功能是否運作 (請注意: 屆時進行時間校對時為一次性調整到位,而非慢慢微調時間) 請使用 【vSphere Client】 連結 vSphere ESX Host 並成功登入後,請先點選右邊工作頁籤【Configuration】後點選位於 Software 下方的 【Time Configuration】 項目之後點選【Properties】,請先勾選 【NTP Client Enabled】 後按下【OK】來啟動 vSphere ESX Host 的 NTP Client 服務 (請注意: 未先行啟動 NTP Client 服務而與下列所提到的設定一併執行將會使 ESX Host 發生錯誤訊息)。

          當 vSphere ESX Host 的 NTP Client 服務順利啟動成功後依照先依上述步驟切換到 NTP Configuration 對話視窗時按下【Options】按鈕後點選【NTP Settings】接著便按下右方的【Add】按鈕來填入 OpenNTPD 伺服器 IP 位址也就是 10.10.25.66 後按下【OK】後接著勾選【Restart NTP service to apply changes】 後按下 【OK】按鈕,那麼 vSphere ESX Host 便會重新啟動NTP Client 服務來與 OpenNTPD 伺服器進行時間校對的作業。


文章標籤: