close

時間伺服器

NIS-Installation 不管你的電腦有多昂貴,總無法放下內置時鐘不怎麼準確的感覺。工作數天後,它可能會與實際時間相差數秒...



永遠不用再設定你的時鐘了

作為網絡上的一台電腦,準確的時鐘是必須的。假如文件有多於一個複本,你怎麼確定哪一個是最新的版本?再者,很多保安日誌都會寫入時間印記,以確保資料封包不會被中途截取或更改。


但由於生產商使用較差的硬體,令時鐘在一段時間後變得過快或過慢,經常相隔數天便要重設時鐘,十分費時。

如果出色的編程員還未為這問題找到解決方法,可以在網絡上找一些特別的時間伺服器。那些伺服器時鐘大致以原子能時鐘直接調較,而且能夠透過一種特別的協定,將時間告知其他電腦。


不過實際上是更複雜的事情,你可能還未忘記,由伺服器往用戶端的資訊訊號,只能在有限的時間內傳送 (那是自愛因斯坦發表相對論開始已知的)。更加複雜的是,你要考慮互聯網永不會有同樣的速度...

時間的準確度很大程度在於所用的時間伺服器,可以準確至百萬分之一秒。


通常只有講求非常準確的時間印記的研究機構才需要這種精確度。


對「標準」的桌面電腦而言,十分之一秒的準確度已足夠。因此,高度精確的時間伺服器 (稱為 Stratum-1-Server) 是受密碼保護的,不是所有人也可以向伺服器提出請求,以免伺服器負荷過重。


向一台 stratum-1-server 而非原子時鐘或 GPS 訊號 (稱為 Stratum-2-Server) 取得訊號的時間伺服器大多供所有人使用 (沒有密碼保護),而且可以用作時間伺服器。

以下有一些時間伺服器可供選擇:


安裝

所需的軟件可以在 www.ntp.org  找到,同時,傳輸協定的新版本亦已面世。如 xntp3-x.xx 的封包使用舊的協定版本,而新版本則稱為 ntp-4.0.*.tar.gz。由於新版本 4 兼容「舊」版本,你可以 (而且應該) 使用較新的版本。
很多發行本都會跟來版本 3 ntp,但由於有保安漏洞,編譯原始碼的工夫是值得的。

下載原始碼套件及卸載至 /tmp 目錄後:

>> tar zxvf ntp-4.0.*.tar.gz -C /tmp/
只需執行 configure-script:
>> cd /tmp/ntp-4.0.99k23/
>> ./configure
完成這 script 後,系統會透過以下指令檢查編譯原始碼:
>> make
並透過以下指令將它們複製 (不需要的) 至預設的目錄:
>> make install
設定檔案 - 可以在 /etc/ntp.conf 找到 - 至少有以下數行: 

/etc/ntp.conf
server timeserver1.uni-sonstwo.de
driftfile /etc/ntp.drift


建議你輸入多於一個時間伺服器,讓軟件自行決定哪一個較準確。使用哪一個伺服器是它自己的原則,使用最近的一個應該是最好的。以下是一些供免費使用的德國時間伺服器:

server ntp0.fau.de
server ntps1-0.uni-erlangen.de
server ntps1-1.uni-erlangen.de
server ntps1-1.rz.Uni-Osnabrueck.de
設定檔案將程式設定妥當後可立刻使用,只需利用以下選項,在 ntpd 子目錄執行 (以 root 身份) 程式:
>> cd ntpd
>> ./ntpd -d -l/var/log/ntp.log
你會看到類似如下的東西: 

Messages
create_sockets(123)
interface

OK
interface

OK
bind() fd 3, family 2, port 123, addr 0.0.0.0, flags=1
bind() fd 6, family 2, port 123, addr 127.0.0.1, flags=0
bind() fd 7, family 2, port 123, addr 192.168.1.11, flags=1
bind() fd 8, family 2, port 123, addr 172.16.186.1, flags=1
init_io: maxactivefd 8
resolving ntp0.fau.de
report_event: system event 'event_restart' (0x01) status 'sync_alarm,
sync_unspec, 1 event, event_unspec' (0xc010)
auth_agekeys: at 1 keys 1 expired 0
peer_clear: at 2 assoc ID 0
newpeer: 192.168.1.11->194.178.31.21 mode 3 vers 4 poll 6 10
flags 1 1 ttl 0 key 00000000



日誌檔案 (/var/log/ntp.log) 應會有類似如下的記錄:

ntpd[1733]: logging to file /var/log/ntp.log
ntpd[1733]: ntpd 4.0.99k23 Sam Apr 14 22:06:04 CEST 2001 (1)
ntpd[1733]: signal_no_reset: signal 13 had flags 4000000
ntpd[1733]: precision = 35 usec
ntpd[1733]: kernel time discipline status 0040
ntpd[1733]: frequency initialized -26.854 from /etc/ntp.drift
等候一會後, ntp 將系統時間設定至準確的值。過程都在細小的步驟進行,以免遺漏數秒或時間重覆而產生問題。
假如準確的時間與系統時鐘相差大於 1000 秒,npd 會假設是硬件時鐘出錯以外的更大問題,而不會設定時間,並自動關閉。縱然差別那麼大,仍要強行令 ntpd 設定時間,你可以使用 -g 選項啟動它。

要在電腦啟動時自動設定時鐘,只需將以下數行加到你的 /sbin/init.d/boot.local 檔案中 (當然還要按你的系統更改路徑):

/usr/local/ntp-4.0.99k23/ntpd/ntpd -g -l/var/log/ntp.log
或編寫一段 init-script。使用 SuSE 7.0 的 script 如下: 

/sbini/init.d/ntpd
. /etc/rc.status
. /etc/rc.config

base=${0##*/}
link=${base#*[SK][0-9][0-9]}

test $link = $base && START_FOO=yes
test "$START_FOO" = yes || exit 0

rc_reset
case "$1" in
start)
echo -n "Starting service nptd"

startproc /pfad/zu/ntp-4.0.99k23/ntpd/ntpd -g -l/var/log/ntp.log

# Remember status and be verbose
rc_status -v
;;
stop)
echo -n "Shutting down service foo"
## Stop daemon with killproc(8) and if this fails
## set echo the echo return value.

killproc -TERM /pfad/zu/ntp-4.0.99k23/ntpd/ntpd

# Remember status and be verbose
rc_status -v
;;
restart)
## If first returns OK call the second, if first or
## second command fails, set echo return value.
$0 stop && $0 start

# Remember status and be quiet
rc_status
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
rc_exit



網路中的 NTP 

大型的網絡中,令每一台工作站向官方的 Stratus-2-Server 取得正確的時間是沒有意義的。伺服器很容易會負荷過重,建議你在本地網絡上選取一台伺服器作為時間伺服器 (就稱它為Stratus-3-)。


運行 ntpd 的電腦就可以成為時間伺服器。


在更大型的網絡上,建立超過一台時間伺服器,向不同的 Stratus-2- (甚至是 Stratus-1-) 伺服器取得時間,對伺服器的可靠性會有幫助。

假如本地網絡中擁有 IP 192.168.0.1 的電腦用作時間伺服器,用戶端的 /etc/ntpd.conf 只需包含這台電腦作伺服器: 

/etc/ntpd.conf
server 192.168.0.1
driftfile /etc/ntp.drift


 

因此即使官方的 Stratus-2-Server 刪除後,用戶端仍然能取得準確的時間。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Bluelove1968 的頭像
    Bluelove1968

    藍色情懷

    Bluelove1968 發表在 痞客邦 留言(0) 人氣()