Windows NTP
启动windows ntp服务器设置如下:
打开注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config
AnnounceFlags修改为5
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpServer
Enabled修改为1
重启ntp服务
net stop w32time
net start w32time
AIX NTP服务
设置NTP服务器地址
编辑/etc/ntp.conf文件:
#broadcastclient
server 主时间服务器IP prefer #主时间服务器ip地址
server 从时间服务器IP
server 从时间服务器IP
#fudge 127.127.1.0 stratum 6 #将系统时钟层数调整为6
driftfile /etc/ntp.drift
tracefile /etc/ntp.trace
driftfile /etc/ntp.drift #在ntp进程停止时,自动将偏移量记入此文件
logfile /var/log/ntp.log #启动xntpd进程后,查看此文件是否正常生成
查询
lssrc -ls xntpd
启动 xntpd 守护进程
startsrc -s xntpd
停止 xntpd 守护进程
stopsrc -s xntpd
运行 xntpd 守护进程时使用认证密钥文件 /etc/ntp.new.keys
/usr/sbin/xntpd -k /etc/ntp.new.keys文件
/usr/sbin/xntpd 包含 xntpd 守护进程。
/etc/ntp.conf 包含缺省配置文件。
/etc/ntp.drift 包含缺省偏差文件。
/etc/ntp.keys 包含缺省的密钥文件
配置AIX成为NTP转发器的客户端
此配置的关键之处在于明确地指定广播方式和接收广播的模式。无须明确地指定时间服务器的地址。
编辑/etc/ntp.conf文件:
multicastclient #广播方式客户;使用多播模式;使用NTP默认的多播地址(224.0.1.1)
driftfile /etc/ntp.drift
tracefile /etc/ntp.trace
Linux NTP服务
ntp
/etc/ntp.conf
ntp服务器配置文件
/usr/share/zoneinfo/
时区配置文件
/etc/sysconfig/clock
时钟配置文件
/etc/localtime
本地时间配置文件
常用时间设置命令
date
hwclock
ntpd
ntpdate
修改时区步骤
查看当前时区和时间
date
编辑时钟配置文件
vi /etc/sysconfig/clock
zone=“asia”
从时区配置文件把相应的时区配置复制到本地时间配置文件
cp /usr/share/zoneinfo/asia /etc/localtime
/etc/ntp.conf服务详细配置
/etc/ntp.conf
利用 restrict 來管理权限控制
在 ntp.conf 档案內可以利用『 restrict 』來管理权限,这个参数的设定方式为:
restrict [你的IP] mask [netmask_IP] [parameter]
其中 parameter 的参数主要有以下這些:
ignore:拒绝所有类型的 NTP 连接;
nomodify: 用戶端不能使用 ntpc 与 ntpq 這两个程序來修改服务器的时间参数, 但客户端仍可通过这台服务器来进行网络对时;
noquery: 客户端不能夠使用 ntpq, ntpc 等指令來查询时间服务器,等于不提供 NTP 的网络对时;
notrap: 不提供 trap 这个远程事件登录 (remote event logging) 的功能。
notrust: 拒绝没有认证的客户端。
那如果你沒有在 parameter 的地方加上任何参数的话,这表示『该IP 或网段不受任何限制』。一般来说,我們可以先关闭 NTP 的使用权限,然后再一個一個的启用允许登录的网段。
利用 server 设定上层 NTP 服务器
上层NTP 服务器的设定方式为:
server [IP or hostname] [prefer]
在 server 后端可以接 IP 或主机名称perfer 表示『优先使用』的服务器
以 driftfile 记录时间差异
设定的方式如下:
driftfile [可以被 ntpd 寫入的目錄與檔案]
因為預設的 NTP Server 本身的時間計算是依據 BIOS 的晶片震盪週期頻率來計算的,但是這個數值與上層 Time Server 不見得會一致啊!所以 NTP 這個 daemon (ntpd) 會自動的去計算我們自己主機的頻率與上層 Time server 的頻率,並且將兩個頻率的誤差記錄下來,記錄下來的檔案就是在 driftfile 後面接的完整檔名當中了!關於檔名你必須要知道:
driftfile 後面接的檔案需要使用完整路徑檔名;
該檔案不能是連結檔;
該檔案需要設定成 ntpd 這個 daemon 可以寫入的權限。
該檔案所記錄的數值單位為:百萬分之一秒 (ppm)。
driftfile 後面接的檔案會被 ntpd 自動更新,所以他的權限一定要能夠讓 ntpd 寫入才行。在 CentOS 6.x 預設的 NTP 伺服器中,使用的 ntpd 的 owner 是 ntp ,這部份可以查閱 /etc/sysconfig/ntpd 就可以知道啦!
keys [key_file]
除了以 restrict 來限制用戶端的連線之外,我們也可以透過金鑰系統來給用戶端認證, 如此一來可以讓主機端更放心了。不過在這個章節裡面我們暫不討論這個部分,有興趣的朋友可以參考 ntp-keygen 這個指令的相關說明喔!
根據上面的說明,我們最終可以取得這樣的設定檔案內容喔 (底下僅修改部分資料,保留大部分的設定值喔)!
[root@www ~]# vim /etc/ntp.conf
# 先處理權限方面的問題,包括放行上層伺服器以及開放區網用戶來源:
restrict default kod nomodify notrap nopeer noquery <==拒絕 IPv4 的用戶
restrict -6 default kod nomodify notrap nopeer noquery <==拒絕 IPv6 的用戶
restrict 220.130.158.71 <==放行 tock.stdtime.gov.tw 進入本 NTP 伺服器
restrict 59.124.196.83 <==放行 tick.stdtime.gov.tw 進入本 NTP 伺服器
restrict 59.124.196.84 <==放行 time.stdtime.gov.tw 進入本 NTP 伺服器
restrict 127.0.0.1 <==底下兩個是預設值,放行本機來源
restrict -6 ::1
restrict 192.168.100.0 mask 255.255.255.0 nomodify <==放行區網來源
# 設定主機來源,請先將原本的 [0|1|2].centos.pool.ntp.org 的設定註解掉:
server 220.130.158.71 prefer <==以這部主機為最優先
server 59.124.196.83
server 59.124.196.84
# 預設時間差異分析檔案與暫不用到的 keys 等,不需要更動它:
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys
這樣就設定妥當了,準備來啟動 NTP 服務吧!
NTP 的啟動與觀察
設定完 ntp.conf 之後就可以啟動 ntp 伺服器了。啟動與觀察的方式如下:
#启动NTP
[root@www ~]# /etc/init.d/ntpd start
[root@www ~]# chkconfig ntpd on
[root@www ~]# tail /var/log/messages <==自行檢查看看有無錯誤
#观察启动端口状态:
[root@www ~]# netstat -tlunp | grep ntp
Proto Recv-Q Send-Q Local Address Foreign Address PID/Program name
udp 0 0 192.168.100.254:123 0.0.0.0:* 3492/ntpd
udp 0 0 192.168.1.100:123 0.0.0.0:* 3492/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 3492/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 3492/ntpd
udp 0 0 ::1:123 :::* 3492/ntpd
udp 0 0 :::123 :::* 3492/ntpd
# 主要是 UDP 封包,且在 port 123 這個埠口的啦!
這樣就表示我們的 NTP 伺服器已經啟動了,不過要與上層 NTP 伺服器連線則還需要一些時間, 通常啟動 NTP 後約在 15 分鐘內才會和上層 NTP 伺服器順利連接上。 那要如何確認我們的 NTP 伺服器有順利的更新自己的時間呢?你可以使用底下幾個指令來查閱喔 (請自行等待數分鐘後再以下列指令查閱):
[root@www ~]# ntpstat
synchronised to NTP server (220.130.158.71) at stratum 3
time correct to within 538 ms
polling server every 128 s
這個指令可以列出我們的 NTP 伺服器有跟上層連線否。由上述的輸出結果可以知道,時間有校正約 538 * 10^(-3) 秒,且每隔 64 秒會主動去更新時間喔!
[root@www ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*tock.stdtime.go 59.124.196.87 2 u 19 128 377 12.092 -0.953 0.942
+59-124-196-83.H 59.124.196.86 2 u 8 128 377 14.154 7.616 1.533
+59-124-196-84.H 59.124.196.86 2 u 2 128 377 14.524 4.354 1.079
這個 ntpq -p 可以列出目前我們的 NTP 與相關的上層 NTP 的狀態,上頭的幾個欄位的意義為:
remote:亦即是 NTP 主機的 IP 或主機名稱囉~注意最左邊的符號
如果有『 * 』代表目前正在作用當中的上層 NTP
如果是『 + 』代表也有連上線,而且可作為下一個提供時間更新的候選者。
refid:參考的上一層 NTP 主機的位址
st:就是 stratum 階層囉!
when:幾秒鐘前曾經做過時間同步化更新的動作;
poll:下一次更新在幾秒鐘之後;
reach:已經向上層 NTP 伺服器要求更新的次數
delay:網路傳輸過程當中延遲的時間,單位為 10^(-6) 秒
offset:時間補償的結果,單位與 10^(-3) 秒
jitter:Linux 系統時間與 BIOS 硬體時間的差異時間, 單位為 10^(-6) 秒。
事實上這個輸出的結果告訴我們,時間真的很準了啦!因為差異都在 0.001 秒以內, 可以符合我們的一般使用了。另外,你也可以檢查一下你的 BIOS 時間與 Linux 系統時間的差異, 就是 /var/lib/ntp/drift 這個檔案的內容,就能瞭解到咱們的 Linux 系統時間與 BIOS 硬體時鐘到底差多久?單位為 10^(-6) 秒啦!
要讓你的 NTP Server/Client 真的能運作,在上述的動作中得注意:
上述的 ntpstat 以及 ntpq -p 的輸出結果中,你的 NTP 伺服器真的要能夠連結上層 NTP 才行喔! 否則你的用戶端將無法對你的 NTP 伺服器進行同步更新的!重要重要!
你的 NTP 伺服器時間不可與上層差異太多。舉例來說,鳥哥測試 NTP 伺服器約在 2011/7/28 下午, 如果我的伺服器時間原本是錯誤的 2010/7/28,足足差了一年,那麼上層伺服器恐怕就不會將正確的時間傳給我! 這時就會造成困擾了!
伺服器防火牆在 UDP port 123 有沒有開啊?要特別注意的呢!
等待的時間夠不夠長?鳥哥設定 NTP 等過最久的時間大約是一小時!你有等這麼久過否?
安全性設定
NTP 伺服器在安全的相關性方面,其實剛剛我們在 /etc/ntp.conf 裡面的 restrict 參數中就已經設定了 NTP 這個 daemon 的服務限制範圍了!不過,在防火牆 iptables 的部分,還是需要開啟連線監聽的啦!所以,在你的 iptables 規則的 scripts 當中,需要加入這一段 (我是以開放 192.168.100.0/24 這個網域作為範例的!)
[root@www ~]# vim /usr/local/virus/iptables/iptables.allow
iptables -A INPUT -i $EXTIF -p udp -s 192.168.100.0/24 --dport 123 -j ACCEPT
[root@www ~]# /usr/local/virus/iptables/iptables.rule
若還要開放其他的網段或者用戶端主機,請自行修改 /etc/ntpd.conf 以及你的防火牆機制咯!
用戶端的時間更新方式
上頭介紹了 NTP 伺服器的安裝與設定,如果我們僅有十部不到的主機時,老實說,實在沒有架設 NTP 伺服器的需求。 只要能夠在你的主機上頭以 NTP 用戶端軟體來進行網路校時就能夠同步化時間了,沒必要時時刻刻進行時間的校正吧!^_^! 但是,如果是類似一定要時間同步的叢集電腦群或登錄伺服器群,那就得要使用時間伺服器比較好囉!
Linux 手動校時工作: date, hwclock
先來複習一下前面談到的重點,那就是 Linux 作業系統當中其實有兩個時間,分別是:
軟體時鐘: Linux 自己的系統時間,由 1970/01/01 開始記錄的時間參數
硬體時鐘: 電腦系統在 BIOS 記錄的實際時間,這也是硬體所記錄的
在軟體時鐘方面,我們可以透過 date 這個指令來進行手動修訂,但如果要修改 BIOS 記錄的時間,就得要使用 hwclock 這個指令來寫入才行。相關的用法如下:
[root@clientlinux ~]# date MMDDhhmmYYYY
選項與參數:
MM:月份
DD:日期
hh:小時
mm:分鐘
YYYY:西元年
# 1. 修改時間成為 1 小時後的時間該如何是好?
[root@clientlinux ~]# date
Thu Jul 28 15:33:38 CST 2011
[root@clientlinux ~]# date 072816332011
Thu Jul 28 16:33:00 CST 2011
# 瞧!時間立刻就變成一個小時後了!
[root@clientlinux ~]# hwclock [-rw]
選項與參數:
-r :亦即 read ,讀出目前 BIOS 內的時間參數;
-w :亦即 write ,將目前的 Linux 系統時間寫入 BIOS 當中啊!
# 2. 查閱 BIOS 時間,並且寫入更改過的時間囉!
[root@clientlinux ~]# date; hwclock -r
Thu Jul 28 16:34:00 CST 2011
Thu 28 Jul 2011 03:34:57 PM CST -0.317679 seconds
# 看一看,是否剛好差異約一個小時啊!這就是 BIOS 時間!
[root@clientlinux ~]# hwclock -w; hwclock -r; date
Thu 28 Jul 2011 04:35:12 PM CST -0.265656 seconds
Thu Jul 28 16:35:11 CST 2011
# 這樣就寫入囉~所以軟體時鐘與硬體時鐘就同步啦!很簡單吧!
這樣可以瞭解了嗎?當我們進行完 Linux 時間的校時後,還需要以 hwclock 來更新 BIOS 的時間,因為每次重新開機的時候,系統會重新由 BIOS 將時間讀出來,所以, BIOS 才是重要的時間依據吶。
Linux 的網路校時
在 Linux 的環境當中可利用 NTP 的用戶端程式,亦即是 ntpdate 這支程式就能夠進行時間的同步化。 不過你要知道的是,因為 NTP 伺服器本來就會與上層時間伺服器進行時間的同步化, 所以在預設的情況下,NTP 伺服器不可以使用 ntpdate !也就是說 ntpdate 與 ntpd 不能同時啟用的。 所以你不要在 NTP server 上頭執行這個指令呦!我們就來看看如何處理吧!
[root@clientlinux ~]# ntpdate [-dv] [NTP IP/hostname]
選項與參數:
-d :進入除錯模式 (debug) ,可以顯示出更多的有效資訊。
-v :有較多訊息的顯示。
[root@clientlinux ~]# ntpdate 192.168.100.254
28 Jul 17:19:33 ntpdate[3432]: step time server 192.168.100.254 offset -2428.396146 sec
# 最後面會顯示微調的時間有多少 (offset),因為這部主機時間差很多,所以秒數...
[root@clientlinux ~]# date; hwclock -r
四 7月 28 17:20:27 CST 2011
西元2011年07月28日 (週四) 18時19分26秒 -0.752303 seconds
# hwclock -w 寫入 BIOS 時間才行
[root@clientlinux ~]# vim /etc/crontab
# 加入這一行去!
10 5 * * * root (/usr/sbin/ntpdate tock.stdtime.gov.tw && /sbin/hwclock -w) &> /dev/null
使用 crontab 之後,每天 5:10 Linux 系統就會自動的進行網路校時囉!相當的簡易吧!不過,這個方式僅適合不要啟動 NTP 的情況。如果你的機器數量太多了,那麼用戶端最好也啟動一下 NTP 服務!透過 NTP 去主動的更新時間吧! 如何達成這個動作呢?也很簡單啊,修改 /etc/ntp.conf 即可:
[root@clientlinux ~]# ntpdate 192.168.100.254
# 由於 ntpd 的 server/client 之間的時間誤差不允許超過 1000 秒,
# 因此你得先手動進行時間同步,然後再設定與啟動時間伺服器呦!
[root@clientlinux ~]# vim /etc/ntp.conf
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
restrict 192.168.100.254 <==放行伺服器來源!
server 192.168.100.254 <==這就是伺服器!
# 很簡單,就是將原本的 server 項目註解,加入我們要的伺服器即可
[root@clientlinux ~]# /etc/init.d/ntpd start
[root@clientlinux ~]# chkconfig ntpd on
然後取消掉 crontab 的更新程序,這樣你的 client 電腦就會主動的到 NTP 伺服器去更新囉!也是輕鬆愉快啊! 不過針對用戶端來說,使用crontab 的方式來處理就是了。