關於 NTP 的一些問題

首先是關於時區的問題,經度的零點在 Greenwich,因此就有了 GMT(Greenwich Mean Time) 的概念,GMT 以東的快(+),以西的慢(-),比如大陸就是 GMT+8,也就是比 GMT 快 8 h。GMT 爲 0 點的時候,大陸已經早上 8 點了。然後還有個國際日期變更線的問題,這個在太平洋上,也就是精讀爲 180 的那個線,如果從大陸飛到美國,時間需要減少 1d,相反則需要加 1d。
由於地球自轉等原因,GMT 跟實際的時間不是很一樣,計算機使用 UTC 來表示『正確』的時間,這兩者大概有 16min 的差距。

對於計算機來說,分爲軟件跟硬件只分,軟件的是指系統本身的,從 1970 年 1 月 1 日開始算,date 命令就是計的這個時間:
$ date +%s
1357465568

$ date
Sun Jan  6 17:46:02 CST 2013

硬件的就是 BIOS 上的時鐘,這個跟系統上的可能會有時差,可以使用 hwclock 來同步:
# hwclock -r/w

客戶端同步服務器有兩種方式:
1. 使用 ntpdate 直接同步
2. 安裝 ntpd 作爲服務器下層的一個 stratum

注意:二者不能同時使用,在啓用了 ntpd 的情況下,是不能執行 ntpdate 的,否則會出現下面的錯誤:
# ntpdate 0.cn.pool.ntp.org
2 Dec 14:27:55 ntpdate[26982]: the NTP socket is in use, exiting

所以,最簡單的方式是把 ntpdate 放到 cron 裏面去:
*/30 * * * * root (/usr/sbin/ntpdate 192.168.1.1 && /sbin/hwclock -w) &> /dev/null

可以將 debug 以及 verbose 的信息加到 alias 裏面去:
alias ntpdate='ntpdate -d -v'

不過,ntpdate 這個命令官方 不提倡使用,可以使用 ntpd 替代,可以通過默認的包管理器安裝。
有個問題是,ntpd 默認會監聽所有的端口,像這樣:
# netstat -tunlp | grep ntp
udp        0      0 192.168.10.254:123        0.0.0.0:*                           32266/ntpd
udp        0      0 111.111.111.111:123     0.0.0.0:*                           32266/ntpd
udp        0      0 127.0.0.1:123           0.0.0.0:*                           32266/ntpd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           32266/ntpd
udp6       0      0 :::123                  :::*                                32266/ntpd

我們明顯不希望這樣,因此需要指定端口。Ubuntu 10.04 的版本是 4.2.4p8,12.04 的是 4.2.6p3,前者不能在 ntp.conf 裏面指定 interface。

網上有說可以通過在 /etc/default/ntp 中加入 -I ethx 來指定端口,或者直接通過 ntpd -I ethx 的方式來啓動,不過我沒嘗試成功,所以直接通過在 ntp.conf 裏面指定 interface 就好了,像 下面 這樣:
interface ignore ipv6
interface listen ipv4

關於安全的問題,對查詢的客戶端一般是不開放 nomodify 的權限的,默認的規則可以像下面這樣:
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 192.168.1.1 mask 255.255.255.0 nomodify

這個客戶端就不能修改,但是可以通過 ntpq 或者 ntpdc 遠程查詢到當前 ntp server 的信息了:
$ ntpdc 192.168.1.1

上面這個進入一個交互式的 shell,輸入『?』獲取幫助,可以直接通過參數進行非交互式的查詢:
$ ntpdc -c monlist 192.168.1.1

使用 ntpd 查詢:
ntpq 192.168.10.254

其他的一些有用的命令:
# ntpq -p
# ntpq -c lpeer
# ntpdc -c monlist
# ntpdc  -l
# ntpdc  -s

在使用 ntpq -p 查詢的過程中,曾出現如下的 error log:
# ntpq -p
localhost: timed out, nothing received
***Request timed out
原因很簡單,ntpd 需要有 loopback 的參與,而默認是拒絕所有,將 loopback 放行就好了:
restrict 127.0.0.1

關於 ntpq 的顯示的信息的解釋,可以看這裏( 1,2 )。

ref:
https://wiki.archlinux.org/index.php/Network_Time_Protocol_daemon

http://mdshaonimran.wordpress.com/2012/04/26/ntp-server-how-to/

本文轉載自推酷網,原文鏈接:http://www.tuicool.com/articles/Iv2QNf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章