Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2347152
  • 博文数量: 609
  • 博客积分: 10061
  • 博客等级: 上将
  • 技术积分: 5920
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-25 08:30
文章分类

全部博文(609)

文章存档

2010年(13)

2009年(39)

2008年(558)

我的朋友

分类: LINUX

2008-08-20 09:31:30

简易 NTP 服务器设定

套件安装:

      使用 RPM 安装
       
      一般来说, NTP Server 在各个 distribution 的功能差异应该不很大啦!所以比较建议使用 RPM 的方式来进行安装!您可以拿出 Linux 的原版光盘,mount 上之后,搜寻以 ntp 为开头的套件档名,然后给他安装上去,就可以了!不过,需要特别留意的是,当您安装好了 NTP 之后,系统会自动的将 ntp 启动喔!所以,如果您只是想利用 NTP 套件里面的 Client 功能,那么最好还是将 ntp 这个 daemon 关闭吧!
       
      [root@test root]# chkconfig --level 2345 ntpd off
      [root@test root]# /etc/rc.d/init.d/ntpd stop
       
      如此一来,您的 ntp 套件已经安装完毕,可以使用 ntp 的 client 功能去联机 Time server 进行网络校时了!至于 NTP Server 则需要继续的进行设定呢!
       
      使用 Tarball 安装
       
      使用 Tarball 来安装 NTP 其实也是不困难的!简单的很!请先到 NTP 的官方网站下载最新的 NTP 套件:,这里我以 ntp-4.1.2.tar.gz 这个版本为范例,假设您下载的套件放置在 /root 底下,那么可以这样做:
       
      0. 解压缩,并阅读一下 ntp 底下的 README 与 INSTALL:
      [root@test root]# cd /usr/local/src
      [root@test src]# tar -zxvf /root/ntp-4.1.2.tar.gz
      [root@test src]# cd ntp-4.1.2
      [root@test ntp-4.1.2]# vi INSTALL (vi README)
       
      1. 开始设定参数、编译与安装:
      [root@test ntp-4.1.2]# ./configure --help | more #可以察看一下可用的参数!
      [root@test ntp-4.1.2]# ./configure --prefix=/usr/local/ntp  \
      >  --enable-all-clocks --enable-parse-clocks
      [root@test ntp-4.1.2]# make clean ; make
      [root@test ntp-4.1.2]# make check  #确定一下,是否有问题!?
      [root@test ntp-4.1.2]# make install # 将数据给他安装在 /usr/local/ntp 底下
       
      设定完成之后,您就有 ntp 可以使用了!不过,无论怎么说,使用 RPM 来安装 NTP 还是比较简单一些啦! ^_^

Server 端的设定

      好了,假设您已经使用 RPM 来安装了 NTP 这个套件,那么我们就可以来谈一谈怎么设定 NTP 主机啦!
       
      NTP 的套件结构
       
      NTP 套件的结果主要分为两部份,一个是 NTP Server 的部分,一个则是 NTP Client 的部分,在这个章节里面,我们不谈比较困难的设定,主要介绍较为简易的设定而已喔!所以,您需要注意到的档案与指令有底下这几个:
       
          o 与 NTP 及时区有关的几个设定档:

             
                + /etc/ntp.conf :这个是 NTP daemon 的主要设定档,依据不同的版本放置的目录可能会不同,不过档名都是一样的!使用 locate ntp.conf 搜寻一下您的系统有没有这个档案吧!这也是 NTP 唯一的一个设定档案!

                +   /usr/share/zoneinfo:这是个目录,这个目录是 Linux 本身提供的,而不是 NTP 所提供的。在这个目录下的档案其实是规定了各主要时区的时间设定档案,例如台湾地区的时区设定档案在 /usr/share/zoneinfo/Asia/Taipei 就是了!这个目录里面的档案与底下要谈的两个档案( clock 与 localtime )是有关系的喔!

                +   /etc/sysconfig/clock:这个档案其实也不包含在 NTP 的 daemon 当中,因为这个是 linux 的主要时区设定档案啊!每次开机后,Linux 会自动的读取这个档案来设定自己系统所预设要显示的时间说!举个例子来说,在我们台湾地区的本地时间设定中,这个档案内应该会出现一行『ZONE="Asia/Taipei"』的字样,这表示我们的时间设定档案『要取用 /usr/share/zoneinfoe/Asia/Taipei 那个档案』的意思!

                +   /etc/localtime:这个档案就是『本地端的时间设定档』啦!刚刚那个 clock 档案里面规定了使用的时间设定档 (ZONE) 为 /usr/share/zoneinfo/Asia/Taipei ,所以说,这就是本地端的时间了,此时, Linux 系统就会将 Taipei 那个档案复制一份成为 /etc/localtime ,所以未来我们的时间显示就会以 Taipei 那个时间设定档案为准。好了,如果现在我这部主机搬到日本东京去了,那么我应该如何调整时间呢?其实什么调整都不需要,因为我们的 localtime 主要是分析与 UTC 时间的时差来显示的格式,所以,您只要将 /etc/sysconfig/clock 里面的 ZONE 设定成为 Asia/Tokyo 并且将 /usr/share/zoneinfo/Asia/Tokyo 复制成为 /etc/localtime ,呵呵!什么设定都不需要更动,就能显示时间为日本东京的时间了!这样是否能够了解?
          o   与 NTP 及时间有关的执行档:

             
                + /bin/date:这个是 Linux 系统上面常见的日期与时间输出指令,用途很广喔!除了输出时间外,也可以修改时间。

                +   /sbin/hwclock:这是一个 root 才能执行的指令,因为 Linux 系统上面 BIOS 时间与 Linux 系统时间是分开的,所以使用 date 这个指令调整了时间之后,还需要使用 hwclock 才能将修改过后的时间写入 BIOS 当中!

                +   /usr/sbin/ntpd:这就是 NTP 的主要 daemon 档案啦!得要启动他才能提供 NTP 服务。注意,这个指令预设会参考 /etc/ntp.conf 里面的设定喔!

                +   /usr/sbin/ntpdate:这个就是 Client 端用来连接 NTP Server 的主要执行档啰!如果您没有要启用 NTP 而仅想要使用 NTP Client 功能的话,那么只会用到这个指令而已啦!

                +   /usr/sbin/ntptrace:这个指令可以用来追踪某部时间服务器的时间对应关系,这也是个很有用的指令喔!底下我们会介绍如何使用这支程序!
              主机的规划技巧建议
       
      因为 NTP daemon 并没有花费什么硬盘空间,所以主机的规划上面就没有太多的考虑了!
       
      编辑主要设定档 /etc/ntp.conf
       
      在 NTP Server 的设定上面,其实最好不要对 Internet 无限制的开放,尽量仅提供您自己内部的 Client 端联机进行网络校时就好。此外, NTP Server 总也是需要网络上面较为准确的主机来自行更新自己的时间啊,所以在我们的 NTP Server 上面也要找一部最靠近自己的 Time Server 来进行自我校正喔!事实上,就如同前面的说明, NTP 这个服务也是 Server/Client 的一种模式 (当然也提供 Peer/Peer ,不过我们这里主要讨论 Server/Client 的架构 ) ,在 Internet 上面提供了多部主要的 (Primary) 时间服务器,如下的网页连结所示。不过,虽然 Primary Time Servers 不少,然而 Client 数量更是大的惊人,为了不让 Primary 的时间服务器负载太大,所以就有 Secondary (次要的) 时间服务器的出现了!这个 Secondary 主要就是利用 Primary 主机进行时间调校后,再提供 Internet 上面的 Client 进行校时。
       
          o 主要时间服务器:~mills/ntp/clock1a.html
          o 次要时间服务器:~mills/ntp/clock2a.html
       
      如果想要在台湾地区进行网络校时,那么 time.stdtime.gov.tw 这个国家单位的第二层主机 ( stratum-2 ) 应该是比较合适的!一般来说,我们在进行 NTP 主机的设定时,都会先选择数部上层的 Time Server 来做为我们这一部 NTP Server 的校正之用,选择多部的原因是因为可以避免因为某部时间服务器突然挂点时,其它主机仍然可以提供我们的 NTP 主机来自我更新啊!然后我们的 NTP Server 才提供给自己的 Client 端更新时间。如此一来,国家单位的 time.stdtime.gov.tw 负载才不会太大,而我们的 Client 也可以很快速的达到校时的动作!
       
      这里还是需要注意一下,台湾地区的主要 ( 或称为第一层 stratum-1 ) 时间服务器 IP 为:
          o 210.59.157.40
          o 210.59.157.41
          o 210.59.157.151
      而第二层的主机有很多,例如:
          o 210.59.157.10

            210.59.157.30
            202.39.157.155  
      基于上面的说明,我的 NTP 服务器主要的设定项目是这样的:
       
          o 以上面提到的六部时间服务器作为我的 NTP server 的上层主机;
          o 不对 Internet 提供公开的服务,仅针对内部网域 192.168.0.0/24 提供服务;
          o 亦对网络上 192.168.100.20 这个 IP 提供服务;
          o 内部私有网络的网络校时不需要认证机制;
       
      这样的设定真的是很简单喔!我们就来设定一下吧!
       
      [root@test root]# vi /etc/ntp.conf
      # 1. 关于权限设定部分
      #  权限的设定主要以 restrict 这个参数来设定,主要的语法为:
      #
      #  restrict IP mask netmask_IP parameter
      #
      #  其中 IP 可以是软件地址,也可以是 default ,default 就类似 0.0.0.0 咯!
      #  至于 paramter 则有:
      #   ignore :关闭所有的 NTP 联机服务
      #   nomodify:表示 Client 端不能更改 Server 端的时间参数,不过,
      #        Client 端仍然可以透过 Server 端来进行网络校时。
      #   notrust :该 Client 除非通过认证,否则该 Client 来源将被视为不信任网域
      #   noquery :不提供 Client 端的时间查询
      #  如果 paramter 完全没有设定,那就表示该 IP (或网域) 『没有任何限制!』
      #
      #  在我们这个例子当中,因为拒绝所有,仅开放 192.168.0.0/24 ,
      #  并且让 127.0.0.1 以及本机 IP 192.168.0.2 可以不受限制,所以:
      restrict default ignore # 关闭所有的 NTP 要求封包
      restrict 127.0.0.1    # 开启内部递归网络接口 lo
      restrict 192.168.0.2  # 主机本身的 IP 也同时开启!
      restrict 192.168.100.20 mask 255.255.255.255 nomodify
      # 针对另一个 IP 开放让他可以更新时间!
      restrict 192.168.0.0 mask 255.255.255.0 nomodify
      # 在网域里面的 client 可以进行网络校时,但不会影响 Server !
       
      # 2. 上层主机的设定
      #  上层主机我们选择 time.stdtime.gov.tw ,要设定上层主机主要以 server
      #  这个参数来设定,语法为:
      #
      #  server [IP|FQDN] [prefer]
      #
      #  Server 后面接的就是我们上层 Time Server 啰!而如果 Server 参数
      #  后面加上 perfer 的话,那表示我们的 NTP 主机主要以该部主机来作为
      #  时间校正的对应。另外,为了解决更新时间封包的传送延迟动作,
      #  所以可以使用 driftfile 来规定我们的主机
      #  在与 Time Server 沟通时所花费的时间,可以记录在 driftfile
      #  后面接的档案内,例如下面的范例中,我们的 NTP server 与
      #  time.stdtime.gov.tw 联机时所花费的时间会记录在 /etc/ntp/drift 档案内
      # 先输入第二层主机的 IP
      server 210.59.157.10  prefer
      server 210.59.157.30  prefer
      server 202.39.157.155  prefer
      # 第一层的主机就列为参考用!
      server 210.59.157.40
      server 210.59.157.41
      server 202.39.157.151
      # 当然要让 Server 可以进入我们的 NTP 主机啦!权限要开放啊!
      restrict 210.59.157.10
      restrict 210.59.157.30
      restrict 202.39.157.155
      restrict 210.59.157.40
      restrict 210.59.157.41
      restrict 202.39.157.151
      driftfile /etc/ntp/drift
       
      在上面的设定当中,最有趣的应该要算 driftfile 那个咚咚了!因为我们的 NTP Server 本身的时间计算是依据 BIOS 的芯片震荡周期频率来计算的,但是这个数值与上层 Time Server 不见得会一致啊!所我 NTP 这个 daemon 会自动的去计算我们自己主机的频率与上层 Time server 的频率,并且将两个频率的误差记录下来,记录下来的档案就是在 driftfile 后面接的完整档名当中了!我们这里是以预设的档案 /etc/ntp/drift 来设定,您也可以自行设定其它的档名,不过请注意:
          o driftfile 后面接的档案需要使用完整路径文件名;
          o 该档案不能是连结档;
          o 该档案需要设定成 ntpd 这个 daemon 可以写入的权限。
      driftfile 后面接的档案会被 ntpd 自动更新,所以他的权限一定要能够让 ntpd 写入才行。在 Red Hat 9 预设的 NTP 服务器中,使用的 ntpd 的 owner 是 ntp ,所以 /etc/ntp/drift 需要设定成 ntp 这个 user 可以写入喔!至于 owner 怎么会是 ntp 呢?请查阅 /etc/sysconfig/ntpd 就可以知道啦!而 /etc/ntp/drift 的内容则是仅有一行,里面的数据是具有小数点的浮点数字,单位则是百万分之一(ppm)。
       
      事实上 ntp.conf 里头还有很多很有趣的设定,例如认证的机制、登入的 Client 观察以及其它的相关设定等等,不过这里我们就不多加介绍了!
       
      NTP 的启动与观察
       
      在设定好了 ntp.conf 之后,就可以来启动 NTP 这个 Time Server 了!我们可以这样做喔:
       
      [root@test root]# /etc/rc.d/init.d/ntpd start
      [root@test root]# netstat -unl | grep 123
      udp        0      0 192.168.0.2:123         0.0.0.0:*
      udp        0      0 127.0.0.1:123           0.0.0.0:*
      udp        0      0 0.0.0.0:123             0.0.0.0:*
      # 请注意喔,NTP 使用的是 UDP 的封包!而且 port number 为 123,
      # 此外,我有两个接口,以及对外提供服务,所以自然就会有三个!
       
      [root@test root]# ntptrace 192.168.0.2
      192.168.0.2: stratum 3, offset 0.000056, synch distance 0.65865
      210.59.157.10: stratum 2, offset -0.228265, synch distance 0.22488
      ntp0.usno.navy.mil: stratum 1, offset -0.250685, synch distance 0.00038,

      # 我们也可以利用 ntptrace 来追踪一下到底我们的主机有没有正确的先经过
      # 上层 Time Server 的校时了呢?如上所示,我们的主机 192.168.0.2
      # 是第三层的时间服务器 (stratum 3),与目前本机的时间误差(offset)
      # 以及若要同步更新时(synch distance)的时间损耗,同时,也会将这个第三层
      # 对哪一部第二层主机进行校时也列出来!有时候您会发现这样的错误讯息:
      192.168.0.2: stratum 16, offset 0.000048, synch distance 0.00087
      0.0.0.0:        *Not Synchronized*
      # 这表示我们的主机尚未与 Internet 的上层 Time Server 进行校时,
      # 最可能发生这样的错误在 ntp.conf 里面的 restrict 设定了!
      # 此外,当启动 ntpd 后,您至少需要等待 5 分钟左右,这段时间
      # 我们的 NTP Server 会不断的与上层时间服务器联系,如果尚未联系成功,
      # 那么我们的 NTP 主机就会暂时无法让 Client 端来进行更新喔!
      # 所以如果未能更新,不要太紧张,先等待一阵子再说吧!
       
      如果 ntptrace 可以成功的话,那就表示您的主机 OK 啦!

Client 端的设定:

      好了,再来就是要在 Client 端来向 Time Server 要求网络校时啦!不过,我们先谈一谈如何手动修正时间吧!
       
      如何调整 Linux 系统的时区与手动设定时间 (date MMDDhhmmYYYY)
       
      我们在前面说过, Linux 的时区档案放置在 /etc/localtime ,这是一个时间格式的档案,而不是 ASCII 类型的档案喔!(file /etc/localtime 可以看出),至于所有的 Time Zone 则放置在 /usr/share/zoneinfo 这个目录下。请注意:
       
          o 当 /etc/localtime 存在时,系统的时区以该档案代表的时区来显示、
          o 当 /etc/localtime 不存在时,系统的时区主要以 GMT (或 UTC) 为准;
       
      所以,如果您想要变更您 Linux 系统的时区,那么只要在 /usr/share/zoneinfo 里面找到您需要的时区档案,然后将他复制一份成为 /etc/localtime 就可以顺利的更新时区设定了!另外,同时建议修正一下 /etc/sysconfig/clock 这个档案里面的 ZONE 设定值!以我们台湾的 Time zone 为例,在 /etc/sysconfig/clock 这个档案当中应该是『ZONE="Asia/Taipei"』这就表示我们的时区档案为 /usr/share/zoneinfo/Asia/Taipei 这个档案啰!请对应着修改成您所想要的时区吧!
       
      好了,时区修正完毕了,那么时间呢?!呵呵!目前 Linux 系统上面有两个时间喔,一个是 Linux 系统,另一个则是 BIOS 时间(真正的硬件记录的时间)!我们可以使用 date 这个指令来手动修正目前主机的时间,不过, date 这个指令仅修正 Linux 时间而已,我们还需要以 hwclock 这个指令来将 BIOS 时间也更新才行!
       
      [root@test root]# date MMDDhhmmYYYY
      MM:月份
      DD:日期
      hh:小时
      mm:分钟
      YYYY:公元年
      [root@test root]# date 082110002003
      Thu Aug 21 10:00:00 CST 2003
      # 时间立刻就修正了!
       
      [root@test root]# hwclock [-rw]
      -r:检视目前的 BIOS 时间
      -w:将目前 Linux 的时间写入 BIOS 当中!
      [root@test root]# date ; hwclock -r
      Thu Aug 21 10:01:46 CST 2003
      Thu 21 Aug 2003 09:57:52 AM CST  0.647923 seconds
      # 你可以看到, date 与 hwclock -r 所显示的时间是『不一致的』!
      # 这就是因为 Linux 时间与 BIOS 时间不一致所导致的一个问题!
      # 我们需要以 hwclock -w 来将 Linux 时间写入 BIOS 喔!
      [root@test root]# hwclock -w
      [root@test root]# date ; hwclock -r
      Thu Aug 21 10:03:42 CST 2003
      Thu 21 Aug 2003 10:03:43 AM CST  0.113323 seconds
      # 呵呵!这样时间就一致啦!
       
      这样可以了解了吗?!没错,当我们进行完 Linux 时间的校时后,还需要以 hwclock 来更新 BIOS 的时间,因为每次开机的时候,系统会重新由 BIOS 将时间读出来,所以, BIOS 才是重要的时间依据吶!
       
      如何在 Linux 系统自动网络校时?
       
      在 Linux 上面进行网络校时简单的很,直接以 ntpdate 这个指令来执行即可!如下所示:
       
      [root@test root]# ntpdate 192.168.0.2
      # 那个 192.168.0.2 是我们刚刚建立的 NTP Server ,您也可以选择
      # time.stdtime.gov.tw 这部主机来校时喔!
      21 Aug 10:05:29 ntpdate[23420]: step time server 192.168.0.2 offset -236.117047 sec
      [root@test root]# hwclock -w
      # 这样时间就修正了!若要每日进行时间校正,可以写入 cron
       
      [root@test root]# vi /etc/crontab
      # 加入这一行:
      10 5 * * * root /usr/sbin/ntpdate 192.168.0.2 ; /sbin/hwclock -w
       
      使用 cron 之后,每天 5:10 Linux 系统就会自动的进行网络校时啰!相当的简易吧!
       
      如何在 Windows 系统上面进行网络校时?
       
      在 Windows 上面进行网络校时也很简单,目前已经有很多热心人士写好了在 Windows 上面的网络校时软件了!例如全中文接口的 ntpclock1_21.exe ,您可以在以下的网站下载:
       
          o
          o
       
      上面同时列出使用说明,请自行参考喔!当然,您也可以在鸟哥的网站下载:
       
          o

安全相关方面

    NTP 服务器在安全的相关性方面,其实刚刚我们在 /etc/ntp.conf 里面的 restrict 参数中就已经设定了 NTP 这个 daemon 的服务限制范围了!不过,在防火墙 iptables 的部分,还是需要启用的啦!所以,在您的 iptables 规则的脚本 (scripts) 当中,需要加入这一段 (我是以开放 192.168.0.0/24 这个网域作为范例的!)
     
    /sbin/iptables -A INPUT -p UDP -i eth0 -s 192.168.0.0/24  \
    > --dport 123 -j ACCEPT
     
    若还要开放其它的网段或者主机,请自行修改您的防火墙机制咯!

阅读(2150) | 评论(0) | 转发(0) |
0

上一篇:id man 页

下一篇:什么是GMT,什么是UTC

给主人留下些什么吧!~~