http://ntp.buptnet.edu.cn/ntp_chinese/
以前用公网的不知名 NTP Server ,一直很稳定。不过上次一次不稳导致一次重大事故,哎。。
想都没想到会这个地方出问题,这种基础服务还是自己搞比较好。
想做成只允许公司的服务器对时间。
如果用ip段来划分会没效率而且会漏掉,想做成客户端用key的方式认证再同步时间的方式。
查了些文档,自己总结了一下,留给自己以后看。
参考几个文档都详细的很 大家可以去参考。
鸟哥的文档:http://linux.vbird.org/linux_server/0440ntp.php
http://www.lupaworld.com/home-space-uid-56821-do-blog-id-237311.html
http://www.blogjava.net/spray/archive/2008/07/10/213964.html
还有一个小日本的变态文档,一个ntp可以写出2百多页。看不懂,找了几个主要的猜一下。
ntpcook-20070413-1.part1.rar
ntpcook-20070413-1.part2.rar
===========================================================================
NTP Server 作为默认项已经在RHEL上安装,只是没配置实用。
配置项在 /etc/ntp.conf
下面是几个主要的配置项:
restrict [目标ip or hostname] mask [netmask_IP] [parameter]
其中 parameter 的參數主要有底下這些:
- ignore: 拒絕所有類型的 NTP 連線;
- kod: 使用kod技术阻止"Kiss of Death"包(一种DOS攻击)对服务器的破坏.
- nomodify: 用戶端不能使用 ntpc 與 ntpq 這兩支程式來修改伺服器的時間參數, 但用戶端仍可透過這部主機來進行網路校時的;
- noquery: 用戶端不能夠使用 ntpq, ntpc 等指令來查詢時間伺服器,等於不提供 NTP 的網路校時囉;
- notrap: 不提供 trap 這個遠端事件登錄 (remote event logging) 的功能。
- notrust: 拒絕沒有認證的用戶端。 (这点是重点,机器的认证都靠他)
注:这里的 [ip or hostname] 除了 对时 的客户端,还包括校时的上层server。
如果上层server没配置就是default配置,建议对各个server都配置策略比较保险。
这些策略是没有先后顺序的,可以随便写。
上层 NTP Service :
server [IP or hostname] [minpool n] [maxpool n] [prefer]
可以有多个,加上 prefer 作为主服务器。
minpool 和 paxpool 是最大最小的同步时间按,后面的n是2的n次方的秒数。
例如 minpool 4 => 4^2=16秒
用下来感觉 prefer 和 minpool 有些互斥,同时使用会prefer会失效。
本机的层级数
fudge ip stratum n
stratum表示设置一个0-15的一个层数.值越小,表明离时间源更近,更准确,stratum为16时表示没有进行同步.
贴一张小日本变态文档图

如果需要验证key再能同步时间,就需要下面的配置
keys filename
trustedkey key_id
requestkey key_id
controlkey key_id
key 文件的位置。
trustedkey表示使用哪个keyid查询同步ntpd的时间.
requestkey和controlkey也用于ntp的工具,如ntpdc等.
说到这里就需要写一下如何生成key:
ntp-keygen -M
执行后会在本地生成 MD5的key文件,还有公钥私钥文件。
我们只需要 MD5的key,里面有16个key。复制到 /etc/ntp/keys 并使ntp用户可读。
下面只需要在ntp中指定使用那个就好,如:
trustedkey 1 2 #使用第一 第二个key
日志文件:
logfile /var/log/ntp
把时间写入 BIOS:
修改 /etc/sysconfig/ntpd
- OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid"
-
- # Set to 'yes' to sync hw clock after successful ntpdate
- SYNC_HWCLOCK=yes
-
- # Additional options for ntpdate
- NTPDATE_OPTIONS=""
何况系统还会通过ntp去校时,2者时间肯定不同。 可以通过 hwclock来看bios时间。
把时间写入bios可以保证下次重启时间不错。
好了,主要的内容都介绍了。下面是我自己配置的一些东西。
- # default
- restrict default kod nomodify notrap nopeer noquery
- # Up link
- restrict 210.72.145.44 mask 255.255.255.255 kod nomodify
- restrict 133.100.11.8 mask 255.255.255.255 kod nomodify
- restrict clock.redhat.com kod nomodify
- # 认证用户可以对时
- restrict 0.0.0.0 mask 0.0.0.0 kod nomodify notrap nopeer noquery notrust
- restrict 127.0.0.1 mask 255.255.0.0 kod
- restrict 127.0.0.1
- # 定义服务器
- server 210.72.145.44 prefer
- server clock.redhat.com
- server 133.100.11.8 minpoll 4 maxpoll 4
- # 刚才算出来的key
- keys /etc/ntp/keys
- # 使用的key
- trustedkey 1 2
- # log file
- logfile /var/log/ntp
现在 ntpd架设好了,我们来通过 ntpdate来测试一下
ntpdate -d 是使用debug的方式来查看ntp校准的过程。
不带 key认证
- [root@10 ~]# ntpdate -d x.x.x.x
- 9 Jul 21:20:16 ntpdate[12981]: ntpdate 4.2.2p1@1.1570-o Thu May 14 13:01:42 UTC 2009 (1)
- Looking for host x.x.x.x and service ntp
- host found : x.x.x.x
- transmit(x.x.x.x)
- transmit(x.x.x.x)
- transmit(x.x.x.x)
- transmit(x.x.x.x)
- transmit(x.x.x.x)
- x.x.x.x: Server dropped: no data
- server x.x.x.x, port 123
- stratum 0, precision 0, leap 00, trust 000
- refid [x.x.x.x], delay 0.00000, dispersion 64.00000
- transmitted 4, in filter 4
- reference time: 00000000.00000000 Thu, Feb 7 2036 14:28:16.000
- originate timestamp: 00000000.00000000 Thu, Feb 7 2036 14:28:16.000
- transmit timestamp: d1c2d413.ebcfe586 Sat, Jul 9 2011 21:20:19.921
- filter delay: 0.00000 0.00000 0.00000 0.00000
- 0.00000 0.00000 0.00000 0.00000
- filter offset: 0.000000 0.000000 0.000000 0.000000
- 0.000000 0.000000 0.000000 0.000000
- delay 0.00000, dispersion 64.00000
- offset 0.000000
-
- 9 Jul 21:20:20 ntpdate[12981]: no server suitable for synchronization found
- [root@10 ~]# ntpdate -d -a 1 -k ./ntp_keys x.x.x.x
- 9 Jul 21:22:59 ntpdate[13040]: ntpdate 4.2.2p1@1.1570-o Thu May 14 13:01:42 UTC 2009 (1)
- Looking for host x.x.x.x and service ntp
- host found : x.x.x.x
- transmit(x.x.x.x)
- receive(x.x.x.x)
- receive: authentication passed
- transmit(x.x.x.x)
- receive(x.x.x.x)
- receive: authentication passed
- transmit(x.x.x.x)
- receive(x.x.x.x)
- receive: authentication passed
- transmit(x.x.x.x)
- receive(x.x.x.x)
- receive: authentication passed
- transmit(x.x.x.x)
- server x.x.x.x, port 123
- stratum 2, precision -20, leap 00, trust 000
- refid [x.x.x.x], delay 0.06380, dispersion 0.00066
- transmitted 4, in filter 4
- reference time: d1c2d2f5.bbcd2f73 Sat, Jul 9 2011 21:15:33.733
- originate timestamp: d1c2d4b3.9b59897f Sat, Jul 9 2011 21:22:59.606
- transmit timestamp: d1c2d4b3.8ea0cae6 Sat, Jul 9 2011 21:22:59.557
- filter delay: 0.06882 0.06567 0.06419 0.06380
- 0.00000 0.00000 0.00000 0.00000
- filter offset: 0.031020 0.030583 0.031800 0.030589
- 0.000000 0.000000 0.000000 0.000000
- delay 0.06380, dispersion 0.00066
- offset 0.030589
-
- 9 Jul 21:22:59 ntpdate[13040]: adjust time server x.x.x.x offset 0.030589 sec