详解centos7下ntp服务配置
一、ntp服务是什么
1.定义
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
2.发展
首次记载在Internet Engineering Note之中,其精确度为数百毫秒。
稍后出现了首个时间协议的规范RFC-778,它被命名为DCNET互联网时间服务,这种服务还是借助于Internet control Message Protocol (ICMP)中的时间戳和时间戳应答消息作为NTP。
名称的首次出现是在RFC-958之中,该版本也被称为NTP v0,其目的是为ARPA网提供时间同步。已脱离ICMP,作为独立协议运行,
美国特拉华大学的David L.Mills主持了网络时间同步项目,成功的开发出了NTP协议的第1, 2, 3版。
v1:出现于1988年6月,在RFC-1059中描述了首个完整的NTP的规范和相关算法。这个版本已经采用了client/server模式以及对称操作,但是它不支持授权鉴别和NTP的控制消息。
v2:1989年9月推出了取代RFC-958和RFC-1059的NTP v2版本即RFC-1119。
v3:在1992 年3月,NTP v3版本RFC-1305问世,该版本总结和综合了NTP先前版本和DTSS,正式引入了校正原则,并改进了时钟选择和时钟滤波的算法,而且还引入了时间消息发送的广播模式,这个版本取代了NTP的先前版本。NTP v 3 发布后,一直在不断地进行改进,NTP实现的一个重要功能是对计算机操作系统的时钟调整。
v4:截止到2010年6月,最新的NTP版本是第4版(NTPv4),其标准化文档为 RFC 5905,它继承自RFC 1305所描述的NTP v3。网络时间同步技术也将向更高精度、更强的兼容性和多平台的适应性方向发展。网络时间协议NTP是用于互联网中时间同步的标准之一,它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.lms,在Internet上绝大多数的地方其精度可以达到1- 50ms.
值得提一下的是,简单的NTP(SNTP)version4已经在RFC2030描述了。
3.主要结构
(1) 时间来源
现在的标准时间是由原子钟报时的国际标准时间UTC(Universal Time Coordinated,世界协调时),所以NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。
(2) 传播
在NTP中,定义了时间按照服务器的等级传播,按照离外部UTC源远近将所有的服务器归入不同的Stratum(层)中,例如把通过GPS取得发送标准时间的服务器叫Stratum-1的NTP服务器,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础,这种阶梯式的架构示意图如下图所示:
计算机主机一般同多个时钟服务器连接,利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源以便校正主机时间。即使在主机长时间无法与某一时钟服务器联系的情况下,NTP服务依然可以有效运转
二、架构和安装
1.架构
如上图所示,对于一些服务依赖于时间的集群(如hadoop集群),需要有一部主机作为ntp服务器,其他客户端主机从这部主机进行时间同步,另外ntp服务主机从更高一层的服务器获得时间信息。
2. 安装配置
2.1 实验环境
centos7.2 虚拟机两台
NTP服务器:172.22.10.6
NTP客户端:172.22.10.92
2.2 服务端配置
1) 确认是否已安装ntp
rpm -qa|grep ntp
[yangjie@linuxprobe ~]$ rpm -qa|grep ntp
ntpdate-4.2.6p5-28.el7.centos.x86_64
ntp-4.2.6p5-28.el7.centos.x86_64
fontpackages-filesystem-1.44-8.el7.noarch
python-ntplib-0.3.2-1.el7.noarch
本机已经安装NTP,如果未安装则使用YUM进行安装
2) 安装ntp服务
yum -y install ntp ntpdate
3) 设置防火墙,打开ntp端口
ntp_server和ntp_client均需开放123/udp端口
firewall-cmd --zone=public --add-port=123/udp --permanent
firewall-cmd --reload
4)ntp服务端节点设置
vim /etc/ntp.conf
红色为新增的地方
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
红色为新增的地方
restrict 172.22.10.6 nomodify notrap nopeer noquery //当前节点IP地址
# 授权172.22.10.0网段上所有机器可以从这台机器上查询和时间同步
restrict 172.22.10.0 mask 255.255.255.0 nomodify notrap //集群所在网段、掩码、权限
# 新增本地ntp服务器172.22.10.6,注释掉原有的server 0-n
server 127.127.1.0
fudge 127.127.1.0 stratum 10
interface ignore wildcard
interface listen 172.22.10.6
interface listen 127.0.0.1
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
5)启动NTP服务、设置ntp开机启动
/#因为centos7默认使用chronyd来进行时间同步服务,所以使用ntp服务需要关闭chronyd服务
查看chronyd状态
systemctl status chronyd
禁止chronyd开机启动
systemctl disable chronyd.service
启动ntp服务
systemctl start ntpd
容许ntp服务开机启动
systemctl enable ntpd
2.3 客户端配置
1)修改配置文件
#红色为新增加部分:
vim /etc/ntp.conf
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
restrict 172.22.10.92 nomodify notrap nopeer noquery //当前节点IP地址restrict 172.22.10.0 mask 255.255.255.0 nomodify notrap //集群所在网段的网段(Gateway),子网掩码(Genmask)
server 172.22.10.6 iburst //NTP服务器IP地址,可以注释掉别的server或者在需要配置的ntp服务器后添加perfer--优先,提高优先级,如:server 172.22.10.6 perfer iburst
fudge 172.22.10.6 stratum 10 //NTP服务器层级设置
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
2)预先同步一次时间
ntpd进程进行同步时,只能同步较小的时间差,为防止时间差别太大,提前使用ntpdate进行一次时间同步
ntpdate 172.22.10.6
3)开机启动、设置防火墙
firewall-cmd --zone=public --add-port=123/udp --permanent 设置ntp防火墙开放策略
firewall-cmd --reload 重新加载防火墙
4)开启ntp服务,设置ntp自启动
systemctl status chronyd 查看chronyd状态
systemctl disable chronyd.service 禁止chronyd开机启动
systemctl start ntpd 启动ntp服务
systemctl enable ntpd 容许ntp服务开机启动
2.4 查看ntp服务状态
1)查看ntp服务状态
systemctl status ntpd
2)查看ntp链接状态
ntpq -p
remote:本机和上层ntp的ip或主机名,“+”表示优先,“*”表示次优先
refid:参考上一层ntp主机地址
st:stratum阶层
when:多少秒前曾经同步过时间
poll:下次更新在多少秒后
reach:已经向上层ntp服务器要求更新的次数
delay:网络延迟
offset:时间补偿
jitter:系统时间与bios时间差#
3)查看ntpd进程的状态
watch "ntpq -p"
按 Ctrl+C 停止查看进程
第一列中的字符指示源的质量。星号 ( * ) 表示该源是当前引用。
remote:列出源的 IP 地址或主机名。
when:指出从轮询源开始已过去的时间(秒)。
poll:指出轮询间隔时间。该值会根据本地时钟的精度相应增加。
reach:是一个八进制数字,指出源的可存取性。值 377 表示源已应答了前八个连续轮询。
offset:是源时钟与本地时钟的时间差(毫秒)。
4)将系统时间写如到主板
hwclock -w
2.5 常见错误:
1)使用ntpq -p命令时ntp提示Temporary failure in name resolution failed
/etc/hosts文件host设置错误导致查询不到/etc/ntp.conf文件中的ntpserver设置
或者/etc/resolv.conf中dns设置错误,导致无法解析网络NTP服务器。
最近公司服务器上新加了服务器与外网NTP服务器同步的监控,大部分都是正常的,只有一组一直报警Temporary failure in name resolution failed ,找了半天问题,也从其他正常服务器上拉了相同的配置文件过来,ntp服务也重启了几次,但是只要执行ntpq -p就报上述错误。最后还是用ntpstat发现了问题。原来是ntp.conf里定义的第一行就是127.0.0.1,恰好这台机器的hosts文件没指定127.0.0.1为localhost,所以执行才会报错了。修改hosts,重启ntpd服务器,ntpq -p。一切OK了!
2)使用ntpdate进行时间预先同步时,提示错误
a、Server dropped: Strata too high
在ntp server上重新启动ntp服务后,ntp server自身或者与其server的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行ntpdate命令时会产生no server suitable for synchronization found的错误。
那么如何知道何时ntp server完成了和自身同步的过程呢?
在ntp server上使用命令:
watch ntpq -p
remoterefid | st | t | when | poll | reach | delay | offset | jitter |
---|---|---|---|---|---|---|---|---|
192.168.30.22 | LOCAL(0) | 8 | u | 22 | 64 | 1 | 2.113 179133 | 0.001 |
LOCAL(0) | LOCAL(0) | 10 | l | 21 | 64 | 1 | 0.000 0.000 | 0.001 |
这里简单说一下when,poll,reach几个参数:
when —— 上次同步时间到现在的距离,单位是秒。当然,如果ntp服务是刚启动,还没同步过,那这个参数就是ntp服务启动后到现在的距离
poll —— 同步周期,单位为秒
reach —— 它是八进制数,正常情况下值为[0, 1, 3, 7, 17, 37, 77, 177, 377],对应的二进制为[0, 1, 11, 111, 1111, 11111, 111111, 1111111, 11111111],ntp服务启动后,reach就以poll值为周期与ntp server通信,为了方便理解,我们可以简单的认为每次ping一下上层ntp server,如果成功,那reach就向左移一位,右边补1,如果失败,则右边补0,所以如果reach不是上面给出的枚举值,那就是在通信过程中出错了。当reach 达到17时(对应1111,即最近的四次通信都成功了),那才开始同步时间,这时,remote项对应的域名或IP列表有,其中一个前面会有号,表示该IP就是NTP server。而在开始同步时间之前,当客户端访问weblbserver-1这个NTP server时,都会出现stratum 16,no server suitable fornchronization found这样的错误。也就是说如果你在NTP server主机上重启了ntp服务,那要等4poll秒(在前四次通信都是成功的前提下),该NTP server才与上层NTP server开始同步时间,而且只有当开始同步时,该NTP server才能为其它客户端提供NTP服务。因此,你在/etc/ntp.conf中设置的同步周期minpoll maxpoll不能太大,因为每次ntp服务重启后,要等4倍长的时间才能开始同步。
b、Server dropped: no data
出现这个问题的原因可能有2:
- 检查ntp的版本,如果你使用的是ntp4.2(包括4.2)之后的版本,在restrict的定义中使用了notrust的话,会导致以上错误。
使用以下命令检查ntp的版本:
# ntpq -c version
下面是来自ntp官方网站的说明:
The behavior of notrust changed between versions 4.1 and 4.2.
In 4.1 (and earlier) notrust meant "Don't trust this host/subnet for time".
In 4.2 (and later) notrust means "Ignore all NTP packets that are not cryptographically authenticated." This forces remote time servers to
authenticate themselves to your (client) ntpd
解决办法:把notrust去掉。
- 检查ntp server的防火墙。可能是server的防火墙屏蔽了upd 123端口。
可以用命令来关掉iptables服务后再尝试从ntp客户端的同步,如果成功,证明是防火墙的问题,需要更改iptables的设置。
#service iptables stop
2.6 其他配置文件
1)配置/etc/ntp/stpe-tickers文件
修改/etc/ntp/stpe-tickers文件,内容如下(当ntpd服务启动时,会自动与该文件中记录的上层NTP服务进行时间校对)
[root@localhost ntp]# more /etc/ntp/step-tickers
List of servers used for initial synchronization.
[root@localhost ntp]# vi /etc/ntp/step-tickers
List of servers used for initial synchronization.
server 192.168.7.49 prefer
server 0.rhel.pool.ntp.org
server 1.rhel.pool.ntp.org
server 2.rhel.pool.ntp.org
server 3.rhel.pool.ntp.org
2)配置/etc/sysconfig/ntpd文件
ntp服务,默认只会同步系统时间。如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpd文件,在/etc/sysconfig/ntpd文件中,添加 SYNC_HWCLOCK=yes 这样,就可以让硬件时间与系统时间一起同步。
# 允许BIOS与系统时间同步,也可以通过hwclock -w 命令
SYNC_HWCLOCK=yes
三、其他博客的一些引用
1、/etc/ntp.conf 配置内容
1. 先处理权限方面的问题,包括放行上层服务器以及开放局域网用户来源:
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 <==放行局域网用户来源,或者列出单独IP
2. 设定主机来源,请先将原本的 [0|1|2].centos.pool.ntp.org 的设定批注掉:
server 220.130.158.71 prefer <==以这部主机为最优先的server
server 59.124.196.83
server 59.124.196.84
3.默认的一个内部时钟数据,用在没有外部 NTP 服务器时,使用它为局域网用户提供服务:
server127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
4.预设时间差异分析档案与暂不用到的 keys 等,不需要更动它:
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys
2、restrict选项格式
“客户端IP” 和 “IP掩码” 指定了对网络中哪些范围的计算机进行控制,如果使用default关键字,则表示对所有的计算机进行控制,参数指定了具体的限制内容,常见的参数如下:
◆ ignore:拒绝连接到NTP服务器
◆ nomodiy: 客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
◆ noquery: 不提供客户端的时间查询
◆ notrap: 不提供trap远程登录功能,trap服务是一种远程时间日志服务。
◆ notrust: 客户端除非通过认证,否则该客户端来源将被视为不信任子网 。
◆ nopeer: 提供时间服务,但不作为对等体。
◆ kod: 向不安全的访问者发送Kiss-Of-Death报文。
3、server选项格式
server host [ key n ] [ version n ] [ prefer ] [ mode n ] [ minpoll n ] [ maxpoll n ] [ iburst ]
其中host是上层NTP服务器的IP地址或域名,随后所跟的参数解释如下所示:
◆ key: 表示所有发往服务器的报文包含有秘钥加密的认证信息,n是32位的整数,表示秘钥号。
◆ version: 表示发往上层服务器的报文使用的版本号,n默认是3,可以是1或者2。
◆ prefer: 如果有多个server选项,具有该参数的服务器优先使用。
◆ mode: 指定数据报文mode字段的值。
◆ minpoll: 指定与查询该服务器的最小时间间隔为2的n次方秒,n默认为6,范围为4-14。
◆ maxpoll: 指定与查询该服务器的最大时间间隔为2的n次方秒,n默认为10,范围为4-14。
◆ iburst: 当初始同步请求时,采用突发方式接连发送8个报文,时间间隔为2秒。
4、查看网关方法
【命令1】route -n
【命令2】ip route show
【命令3】netstat -r
5、层次(stratum)####
stratum根据上层server的层次而设定(+1)。
对于提供network time service provider的主机来说,stratum的设定要尽可能准确。
而作为局域网的time service provider,通常将stratum设置为10。
0层的服务器采用的是原子钟、GPS钟等物理设备,stratum 1与stratum 0 是直接相连的,
往后的stratum与上一层stratum通过网络相连,同一层的server也可以交互。
ntpd对下层client来说是service server,对于上层server来说它是client。
ntpd根据配置文件的参数决定是要为其他服务器提供时钟服务或者是从其他服务器同步时钟。所有的配置都在/etc/ntp.conf文件中。
6、注意防火墙屏蔽ntp端口
ntp服务器默认端口是123,如果防火墙是开启状态,在一些操作可能会出现错误,所以要记住关闭防火墙。
7、同步硬件时钟
ntp服务,默认只会同步系统时间。
如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpd文件,
在/etc/sysconfig/ntpd文件中,添加【SYNC_HWCLOCK=yes】这样,就可以让硬件时间与系统时间一起同步。
允许BIOS与系统时间同步,也可以通过hwclock -w 命令。
8、ntpd、ntpdate的区别
下面是网上关于ntpd与ntpdate区别的相关资料。如下所示所示:
使用之前得弄清楚一个问题,ntpd与ntpdate在更新时间时有什么区别。
ntpd不仅仅是时间同步服务器,它还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步,
并非ntpdate立即同步,在生产环境中慎用ntpdate,也正如此两者不可同时运行。
时钟的跃变,对于某些程序会导致很严重的问题。
许多应用程序依赖连续的时钟——毕竟,这是一项常见的假定,即,取得的时间是线性的,
一些操作,例如数据库事务,通常会地依赖这样的事实:时间不会往回跳跃。
不幸的是,ntpdate调整时间的方式就是我们所说的”跃变“:在获得一个时间之后,ntpdate使用settimeofday(2)设置系统时间,
这有几个非常明显的问题:
1)这样做不安全
ntpdate的设置依赖于ntp服务器的安全性,攻击者可以利用一些软件设计上的缺陷,拿下ntp服务器并令与其同步的服务器执行某些消耗性的任务。
由于ntpdate采用的方式是跳变,跟随它的服务器无法知道是否发生了异常(时间不一样的时候,唯一的办法是以服务器为准)。
2)这样做不精确
一旦ntp服务器宕机,跟随它的服务器也就会无法同步时间。
与此不同,ntpd不仅能够校准计算机的时间,而且能够校准计算机的时钟。
3)这样做不够优雅
由于是跳变,而不是使时间变快或变慢,依赖时序的程序会出错
(例如,如果ntpdate发现你的时间快了,则可能会经历两个相同的时刻,对某些应用而言,这是致命的)。尤其对数据库等对时间敏感的程序应用。
因而,唯一一个可以令时间发生跳变的点,是计算机刚刚启动,但还没有启动很多服务的那个时候。
其余的时候,理想的做法是使用ntpd来校准时钟,而不是调整计算机时钟上的时间。
NTPD在和时间服务器的同步过程中,会把BIOS计时器的振荡频率偏差——或者说Local Clock的自然漂移(drift)——记录下来。
这样即使网络有问题,本机仍然能维持一个相当精确的走时。
9、国内常用NTP服务器地址及IP
210.72.145.44 (国家授时中心服务器IP地址)
133.100.11.8 日本 福冈大学
time-a.nist.gov 129.6.15.28 NIST, Gaithersburg, Maryland
time-b.nist.gov 129.6.15.29 NIST, Gaithersburg, Maryland
time-a.timefreq.bldrdoc.gov 132.163.4.101 NIST, Boulder, Colorado
time-b.timefreq.bldrdoc.gov 132.163.4.102 NIST, Boulder, Colorado
time-c.timefreq.bldrdoc.gov 132.163.4.103 NIST, Boulder, Colorado
utcnist.colorado.edu 128.138.140.44 University of Colorado, Boulder
time.nist.gov 192.43.244.18 NCAR, Boulder, Colorado
time-nw.nist.gov 131.107.1.10 Microsoft, Redmond, Washington
nist1.symmetricom.com 69.25.96.13 Symmetricom, San Jose, California
nist1-dc.glassey.com 216.200.93.8 Abovenet, Virginia
nist1-ny.glassey.com 208.184.49.9 Abovenet, New York City
nist1-sj.glassey.com 207.126.98.204 Abovenet, San Jose, California
nist1.aol-ca.truetime.com 207.200.81.113 TrueTime, AOL facility, Sunnyvale, California
nist1.aol-va.truetime.com 64.236.96.53 TrueTime, AOL facility, Virginia
————————————————————————————————————
ntp.sjtu.edu.cn 202.120.2.101 (上海交通大学网络中心NTP服务器地址)
s1a.time.edu.cn 北京邮电大学
s1b.time.edu.cn 清华大学
s1c.time.edu.cn 北京大学
s1d.time.edu.cn 东南大学
s1e.time.edu.cn 清华大学
s2a.time.edu.cn 清华大学
s2b.time.edu.cn 清华大学
s2c.time.edu.cn 北京邮电大学
s2d.time.edu.cn 西南地区网络中心
s2e.time.edu.cn 西北地区网络中心
s2f.time.edu.cn 东北地区网络中心
s2g.time.edu.cn 华东南地区网络中心
s2h.time.edu.cn 四川大学网络管理中心
s2j.time.edu.cn 大连理工大学网络中心
s2k.time.edu.cn CERNET桂林主节点
s2m.time.edu.cn 北京大学
2019-4-30 9:16:52
--END--