Linux NTP配置详解 (Network Time Protocol)

所需积分/C币:46 2019-07-02 13:34:17 543KB PDF
150
收藏 收藏
举报

Network Time Protocol (NTP) 也是RHCE新增的考试要求. 学习的时候也顺便复习了一下如 何设置Linux的时间,现在拿出来和大家分享 设置NTP服务器不难但是NTP本身是一个很复杂的协议. 这里只是简要地介绍一下实践方法 和上次一样,下面的实验都在RHEL5上运行
Z=America/Los Angeles; export Tztzselect 会让你选择所在的国家和城市俄我省略了这些步骤),最后输岀相应的TZ变量的值.那么如果你 设置了Tz的值之后时区就又会发生变化 代码: # date huJu51548:11PDT2007 通过这两个例子我们也可以发现TZ变量的值会 override /etc/localtime.也就是说当TZ变量没 有定义的时候系统才使用 etc/localtime来确定 etime zone.所以你想永久修改 time zone的话那 么可以把TZ变量的设置写入 letcprofile里 好了现在我们知道怎么设置时区了,下面我们就来看看如何设置 Linux的时间吧 3. Real Time Clock(RTC)and System Clock 说道设置时间这里还要明确另外一个概念就是在一台计算机上我们有两个时钟:一个称之为 硬件时间时钟(RTC,还有一个称之为系统时钟( System C|ock) 硬件时钟是指嵌在主板上的特殊的电路,它的存在就是平时我们关机之后还可以计算时间的 原因 系统时钟就是操作系统的 kernel所用来计算时间的时钟.它从1970年1月1日00:00:00UTC时 问到目前为止秒数总和的值在 Linux下系统时间在开机的时候会和硬件时间同步 ( synchronization),之后也就各自独立运行了 那么既然两个时钟独自运行那么时间久了必然就会产生误差了,下面我们来看一个例子 代码 da iJul600:27:13BST2007 hwclock --show ri 06 Jul 2007 12: 27: 17 AM BST -0.968931 seconds 通过 hwclock-show命令我们可以查看机器上的硬件时间( always in local time zone),我们 可以看到它和系统时间还是有一定的误差的,那么我们就需要把他们同步 如果我们想要把硬件时间设置成系统时间我们可以运行以下命令 代码 hwclock--hctosys 反之,我们也可以把系统时间设置成硬件时间 代码 hwclock --systoh 那么如果想设置硬件时间我们可以开机的时候在BOS里设定.也可以用 hwclock命令 代码: hwclock--set -date=mm/dd/yy hh: mm: ss 如果想要修改系统时间那么用date命令就最简单了 代码 date-s"dd/mm/yyyy hh: mm: ss 现在我们知道了如何设置系统和硬件的时间.但问题是如果这两个时间都不准确了怎么办? 那么我们就需要在互联网上找到一个可以提供我们准确时间的服务器然后通过一种协议来同 步我们的系统时间那么这个协议就是NTP了注意接下去我们所要说的同步就都是指系统时 间和网络服务器之间的同步了 4.设置 NTP Server前的准备 其实这个标题应该改为设置 NTP Relay Server"前的准备更加合适.因为不论我们的计算机 配置多好运行时间久了都会产生误差所以不足以给互联网上的其他服务器做 NTP Server.真 正能够精确地测算时间的还是原子钟.但由于原子钟十分的昂贵,只有少部分组织拥有,他们 连接到计算机之后就成了一台真正的 NtP Server.而我们所要做的就是连接到这些服务器上 同步我们系统的时间然后把我们自己的服务器做成 NTP Relay Server再给互联网或者是局 域网内的用户提供同步服务 好了前面讲了一大堆理论现在我们来动手实践一下吧.架设一个 NTP Relay Server其实非 常简单我们先把需要的RPM包装上 是否已经安装了NTP包可以用这条命令来确定: root@NTPser-# rpm -qa grep ntpl ntp42219e54.1 chkfontpath-1.10.1-1.1 出现以上代码则表示已安装NTP包,否则用下面方法安装 代码 rpm-ivh ntp-4.2. 2p1-5 el5 rpm 那么第一步我们就要找到在互联网上给我们提供同步服务的 NTP Server hto/ w.pool ntp or是NTP的官方网站,在这上面我们可以找到离我们城市最近的NTP Server NTP建议我们为了保障时间的准确性,最少找两个个 NTP Server 那么比如在英国的话就可以选择下面两个服务器 O uk pool. ntp. org 1.uk. pool. ntp ol 它的一般格式都是 number. country. pool. ntp.。rg 第二步要做的就是在打开NTP服务器之前先和这些服务器做一个同步,使得我们机器的时间 尽量接近标准时间 这里我们可以用 ntpdate命令手动更新时间 代码 ntpdate O uk pool. ntp. org 6Jul01: 21: 49 ntpdate[4528]: step time server 213. 222. 193.35 offset -38908.575181 sed ntpdate 0. pool. ntp. org 6Jul01: 21:56 ntpdate[ 4530]: adjust time server 213... 35 offset-0000065 sec 假如你的时间差的很离谱的话第一次会看到调整的幅度比较大,所以保险起见可以运行两次 那么为什么在打开NTP服务之前先要手动运行同步呢? 因为根据NTP的设置如果你的系统时间比正确时间要快的话那么NTP是不会帮你调整的, 所以要么你把时间设置回去,要么先做一个手动同步 2.当你的时间设置和NTP服务器的时间相差很大的时候NTP会花上较长一段时间进行调整. 所以手动同步可以减少这段时间 5.配置和运行 NTP Server 现在我们就来创建NTP的配置文件了,它就是/ etc/ntp.conf我们只需要加入上面的NTP seve和一个 driftfile航可以了 代码 VI/etc/ntp cont server2107214544#这是中国国家授时中心的旧 server O uk pool. ntp. org ser∨er1 uk pool. ntp. org udqe127.12710 stratum0 stratum这行是时间服务器的层次。设为0则为顶级,如果要 向别的NTP服务器更新时间,请不要把它设为0 driftfile /var/ib/ntp/ntp drift非常的简单.接下来我们就启动 NTP Server并且设置其在开 机后自动运行 代码 异/et/ntad/ ntpd start kconfig --level 35 ntpd or 6查看NTP服务的运行状况 现在我们已经启动了NTP的服务但是我们的系统时间到底和服务器同步了没有呢?为此 NTP提供了一个很好的查看工具:ntpq( NTP query) 我建议大家在打开NTP服务器后就可以运行ntpq命令来监测服务器的运行这里我们可以使 用 watch命令来查看一段时间内服务器各项数值的变化 代码 # watch ntpa Every 2.0s: ntpq-p Sat ju700:41452007 remote refid st t when poll reach delay offset jitter F19360199751936222982u5264377857810203289032 mozart.musicbox192541412u546437719.301-60218292411 现在我就来解释一下其中的含义 remote:它指的就是本地机器所连接的远程NTP服务器 refid:它指的是给远程服务器(e.g.193.60.199.75)提供时间同步的服务器 st:远程服务器的层级别( stratum).由于NTP是层型结构有顶端的服务器,多层的 Relay Server再到客户端.所以服务器从高到低级别可以设定为1-16.为了减缓负荷和网络堵 塞原则上应该避免直接连接到级别为1的服务器的 t:这个.我也不知道啥意思AA when:我个人把它理解为一个计时器用来告诉我们还有多久本地机器就需要和远程服务器 进行一次时间同步 po:本地机和远程服务器多少时间进行一次同步(单位为秒)在一开始运行NTP的时候 这个po值会比较小那样和服务器同步的频率也就增加了,可以尽快调警到正确的时间范围 之后po值会逐渐增大同步的频率也就会相应减小 reach:这是一个八进制值,用来测试能否和服务器连接每成功连接一次它的值就会增加 deay:从本地机发送同步要求到服务器的 round trip time offset:这是个最关键的值,它告诉了我们本地机和服务器之间的时间差别.ofse接近于 0,我们就和服务器的时间越接近 iter:这是—个用来做统计的值.它统计了在特定个连续的连接数里ofse的分布情况.简 单地说这个数值的绝对值越小我们和服务器的时间就越精确 那么大家细心的话就会发现两个问题第一我们连接的是0. uk pool. ntp. org为什么和 remote server不一样?第二那个最前面的+和都是什么意思呢? 第一个问题不难理解,因为NTP提供给我们的是一个 cluster server所以每次连接的得到的服 务器都有可能是不一样,同样这也告诉我们了在指定 NTP Server的时候应该使用 hostname而 不是|P 第二个问题和第一个相关,既然有这么多的服务器就是为了在发生问题的时候其他的服务器 还可以正常地给我们提供服务那么如何知道这些服务器的状态呢?这就是第一个记号会告 诉我们的信息 *它告诉我们远端的服务器已经被确认为我们的主 NTP Servel,我们系统的时间将由这台机 器所提供 +它将作为辅助的 INTP Serve和带有*号的服务器一起为我们提供同步服务.当*号服务器不 可用时它就可以接管 远程服务器被 clustering algorithm认为是不合格的 NTP Server 远程服务器不可用 了解这些之后我们就可以实时监测我们系统的时间同步状况了 7.NTP安全设置 运行一个 NTP Server不需要占用很多的系统资源,所以也不用专门配置独立的服务器,就可以 给许多cen提供时间同步服务,但是一些基本的安全设置还是很有必要的 那么这里一个很简单的思路就是第一我们只允许局域网内一部分的用户连接到我们的服务 器.第二个就是这些 client不能修改我们服务器上的时间 关于权限设定部分 权限的设定主要以 restrict这个参数来设定,主要的语法为 restrict|P地址mask子网掩码参数 其中|P可以是P地址,也可以是 default, default就是指所有的P 参数有以下几个 gnore:关闭所有的NTP联机服务 modify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。 notrust:客户端除非通过认证,否则该客户端来源将被视为不信任子网 noquery:不提供客户端的时间查询 注意:如果参数没有设定,那就表示该|P(或子网没有任何限制! 在/ etc/ntp.conf文件中我们可以用 restrict关键字来配置上面的要求 首先我们对于默认的cien拒绝所有的操作 代码 restrict default kod nomodify notrap nopeer noquel 然后允许本机地址一切的操作 代码 restrict 127.0.0.1 最后我们允许局域网内所有 client连接到这台服务器同步时间但是拒绝让他们修改服务器上 的时间 代码 estrict 192.168.1.0 mask 255.255.255.0 nomodify 把这三条加入到 letc/ntp con仲中就完成了我们的简单配置.NTP还可以用key来做 authentication,这里就不详细介绍了 8. NTP client的设置 做到这里我们已经有了一台自己的 Relay Server如果我们想让局域网内的其他cien都进行 时间同步的话那么我们就都应该照样再搭建一台 Relay Server然后把所有的 Chien都指向这 两台服务器(注意不要把所有的 Client都指向 IInternet_上的服务器).只要在 client 的/ etc/ntp con加上这你自己的服务器就可以了 代码 server ntp1. leonard. com server ntp2 leonard co L|NUX客户端使用 ntpdate172.30218114 来向NTP服务器同步自己的时间 其它LNUX如果仅作为只客户端的话则不能启动ntpd服务!否则无法运行 updata服务器地址 来同步时间 之后可以使用cron或修改 crontab文件定期向NTP服务器更新时间,并用 hwclock --systohd 将系统时间设置为硬件时间 9一些补充和拾遗(挺重要) 1.配置文件中的 driftfile是什么? 我们每一个 system clock的频率都有小小的误差这个就是为什么机器运行一段时间后会不精 确NTP会自动来监测我们时钟的误差值并予以调整但问题是这是一个冗长的过程,所以它 会把记录下来的误差先写入 driftfile这样即使你重新开机以后之前的计算结果也就不会丢失 2如何同步硬件时钟? NTP一般只会同步 system clock.但是如果我们也要同步RTc( hwclock)的话那么只需要把下 面的选项打开就可以了 代码 vi / etc/sysconfig/ntpd SYNC HWCLOCK=yes 3、利用 crontab让 LINUX NTP定时更新时间 注:让nux运行η ntpdate更新时间时,inux不能开启NTP服务,否则会提示端口被占用:如 下 oot@ESXI-# ntpdate 1. rhel pool. ntp. org 20 May 09: 34: 14 ntpdate[6747]: the NTP socket is in use, exiting crontab文件配置简要说明 令格式的前一部分是对时间的设定,后面一部分是要执行的命令。时间的设定我们有一定 的约定,前面五个号代表五个数字,数字的取值范围和含义如下: 分钟(0-59) 小時(0-23) 日期(1-31) 月份(1-12) 星期(0-6)0代表星期天 除了数字还有几个个特殊的符号就是“”、“"和“"、“;",“*代表所有的取值范围内的数 字,"代表每的意思,“*15表示每5个单位,“”代表从某个数字到某个数字,”分开几个离散的 数字。以下举几个例子说明问题 每天早上6点 06*** command 每两个小时: 0*/2*** command 晚上11点到早上8点之间每两个小时,早上八点 0237/2,8*** command 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点: 011 4*1-3 command 月1日早上4点: 0411 command 33、设置开机自动启动服务 运行seup或其它服务设置工具,将 crond服务勾选上 chkconfig-leve2345 crond o定义在这几个系统运行级别上启用 crond(系统安装完默认 就是这个设置) 10NTP客户端的设置 L|NUX做为客户端自动同步时间 如果想定时进行时间校准,可以使用 crond服务来定时执行。 编辑/ etc/crontab文件 加入下面一行 308***root/ usr/sbin/ntpdate19216801;/ sbin/hwclock -w#192.168.0.1是NTP服务器 的|P地址 然后重启 crond服务 service crond restart 这样,每天8:30 Linux系统就会自动的进行网络时间校准 WINDOWS需要打开 windows time服务和RPC的二个服务 如果在打开 windows time服务,时报错误1058,进行下面操作 运行cmd进入命令行,然后键入 W32 etm /register进行注册 正确的响应为:W32Time成功注册。 2.如果上一步正确,用 net start" windows time"或 net start w32time启动服务 11其它造成无法成功更新的原因: 客户端的日期必须要设置正确,不能超出正常时间24小时,不然会因为安全原因被拒绝 更新。其次客户端的时区必须要设置好,以确保不会更新成其它时区的时间。 2、 fudge127.127.10 stratum10如果是LNUX做为NTP服务器, stratum(层级)的值不能太 大,如果要向上级NTP更新可以设成2 3、LNUX的NTP服务器必须记得将从上级NTP更新的时间从系统时间写到硬件里去 hwclock --systohc

...展开详情
试读 11P Linux NTP配置详解 (Network Time Protocol)
立即下载
限时抽奖 低至0.43元/次
身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
  • 分享王者

关注 私信
上传资源赚钱or赚积分
最新推荐
Linux NTP配置详解 (Network Time Protocol) 46积分/C币 立即下载
1/11
Linux NTP配置详解 (Network Time Protocol)第1页
Linux NTP配置详解 (Network Time Protocol)第2页
Linux NTP配置详解 (Network Time Protocol)第3页

试读结束, 可继续读1页

46积分/C币 立即下载