9.6 NTP
NTP(Network Time Protocol,网络时间协议)利用一个集中的时间源实现系统时钟的同步。由于在检测与排除网络故障时很少只包含单个系统,因而在搜索日志文件(查找某天某时因特定事件而记录下的差错消息)时,如果包含在故障事件中的潜在系统都使用相同的时钟时间对差错消息进行时间标记,那么将大大简化该操作。
9.6.1 NTP 概述
NTP可以在分布式设备之间同步时间。每台设备都与时间源建立对等关系,时间源的可靠性由层级(stratum level)来定义。第1层(stratum 1)服务器直接连接到一个可靠的时间源,如无线电时钟、GPS卫星定时接收器或原子时钟。第2层(stratum 2)服务器从第1层时间源获取时间,第2层服务器可以通过Internet连接到公共可用的第1层服务器。在www.eecis.udel.edu/~ntp/(来自特拉华大学)上可以找到公共NTP服务器列表以及它们的使用方法。
将组织机构内配置的一对可靠的NTP服务器关联到第2层公共NTP服务器上,就可以为该组织机构网络内的所有路由器提供时间服务。路由器本身也可以充当NTP服务器,事实上,如果没有可用Internet连接,或者NTP协议不能通过防火墙连接到Internet,那么就可以将路由器配置为授权NTP服务器,该路由器将使用其自身的系统时钟作为时间参考基准。只有一台复位后仍能保持其时间的路由器(带有日历系统的路由器)才能被用作授权时间源,其他路由器将没有有效的参考时钟。如果带有日历系统的路由器运行了NTP协议,且该路由器通过NTP获取时间,那么可以通过NTP来更新其日历,以补偿日历时间内在的时间漂移。虽然这可能不如原子时钟那么精确,但至少可以让网络中的路由器都能实现时间同步,从而简化了网络故障的检测与排除。
NTP非常有效,每分钟发送一个数据包即可将两台设备的时间同步到10ms之内。
9.6.2 路由器的NTP配置
在配置NTP时,首先要与时间服务器创建关联关系,利用下面的命令就可以创建该关联关系。
ntp server ip_address [version number] [key keyid] [source interface] [prefer]
ntp peer ip_address [version number] [key keyid] [source interface] [prefer]
如果路由器希望与其他NTP时钟源同步其时钟,那么就需要创建一个服务器关联;如果路由器愿意同步到其他设备或允许其他设备与自己同步,那么就需要建立一个对等体关联。
默认的NTP版本是3,在默认情况下,不会配置keyid,且源IP地址是出站接口的地址。关键字prefer让IOS优选该对等体进行时间同步。
利用以下命令可以控制对NTP服务的访问。
ntp access-group {query-only | serve-only | serve | peer} access-list-number
选项query-only仅允许从所列的IP地址进行NTP控制查询,NTP控制查询被用于代替SNMP管理站进行NTP进程的监控。
选项serve-only仅允许访问列表中所列的IP地址进行时间请求,该路由器不会将自己的时钟同步到远程系统。
选项serve允许进行时间请求和控制查询,但该系统不会将自己的时钟同步到远程系统。
选项peer允许进行时间请求和控制查询,并且允许该路由器将自己的时钟同步到远程系统。
如例9-19所示,该配置允许路由器Seattle将其时间同步到次级公共时间源,另一台路由器Tacoma(与Seattle位于同一个网络中)则被允许将时间同步到Seattle。
例9-19:让路由器Seattle将其时间同步到次级公共时间源,让路由器Tacoma将其时间同步到Seattle。
Seattle仅被允许与128.105.39.11同步其时钟,而地址位于区间172.16.0.0/16之内的节点都可以与Seattle的时钟进行同步。
如果没有可用时间源,就可以一台路由器配置为主时间源,该路由器必须有一个内部日历系统,可以通过重启或开关机周期(power cycle)来维护日期和时间。为了将该日历作为该路由器的授权时间源,需要配置clock calendar-valid命令。
为了将Cisco IOS软件配置为让对等体实现时间同步的NTP主时钟,就需要配置命令ntp master [stratum],配置一个高层级号的时间源可以确保该路由器不会覆盖带有低层级号(因而是个更可靠的时钟)的其他系统上的时钟。默认的层级号是8,被配置为NTP主时钟的路由器仍然会尝试寻找一个具有更低层级号的服务器,如果没有找到,该路由器将同步到已配置的层级时间源。在其同步完成之后,其他系统就可以与其实现同步。
NTP时间是UTC,如果希望路由器维护一个不同的时区,那么仍然可以利用以下命令来维持本地时间。
clock timezone PST -8
clock summer-time PDT recurring
为了将路由器的日历与通过NTP获得的时间进行同步,需要使用命令ntp update-calendar。
NTP协议支持验证机制,通过以下命令即可启用NTP的验证机制。
ntp authenticate
ntp authentication-key number md5 key
ntp trusted-key number
ntp server ip-address key number
需要在NTP服务器和请求进行时间同步的路由器上同时配置命令ntp authenticate,该命令的作用是启用全局验证。此外,还需要在这两台路由器上同时配置命令ntp authentication-key,该命令定义了一个验证字符串并为其分配了编号。
请求进行时间同步的路由器被配置了命令ntp trusted-key,该命令列出了已在命令ntp authentication-key中定义了的密钥号。在该路由器与NTP服务器实现时间同步之前,该NTP服务器必须包含在其NTP包中,因而只需要在客户服务器上配置命令ntp trusted-key。
在客户路由器上配置命令ntp trusted-key时必须包含选项key number,该选项的作用是将密钥增加到从客户路由器发送给NTP服务器的NTP包中。如果该服务器上已定义了该密钥,那么该NTP服务器接收到该密钥之后,就将该密钥包含在发送给客户路由器的NTP包中。
如例9-20所示,在Seattle与Tacoma之间启用了验证机制。
例9-20:在Seattle与Tacoma之间启用验证机制。
在Tacoma与Seattle的时钟进行同步之前,Tacoma所配置的命令ntp server seattle key 10要求服务器(即Seattle)必须在其NTP包中提供编号为10的密钥。Seattle可以在来自Tacoma的NTP包中看到要求提供10号密钥,之后利用命令authentication-key 10 md5 ntpkey就可以让Seattle在其回应Tacoma的NTP包中包含10号验证密钥。为了解释验证过程,在路由器的配置中省略了命令authentication-key。例9-21显示了命令debug ntp packet的输出结果,时间服务器Seattle没有被配置验证机制,而要求客户路由器Tacoma在与时间服务器进行同步之前必须进行验证。
例9-21:相互交换的NTP包中没有出现NTP服务器上配置的验证密钥。
从Tacoma发送给Seattle的调试包显示了10号验证密钥,Tacoma希望在接收自Seattle的NTP包中包含该密钥,但事实上并没有包含该密钥,因而NTP仍然处于非同步状态(如例9-22所示)。
例9-22:在未通过验证的情况下,命令show ntp status和show ntp association detail的显示结果。
上例仅显示了命令show ntp association detail的第一行输出结果,反映出该对等体被手工配置且没有通过基本的身份检查(验证失败),因而时间无效,该对等体没有实现同步,时间源层级仍为默认值16。
现在,在Seattle的配置中增加命令ntp authentication-key 10 md5 ntpkey和ntp authenticate,例9-23和例9-24分别显示了debug ntp packet和show ntp status及show ntp association detail的输出结果。
例9-23:相互交换的NTP包中有NTP服务器和客户路由器上配置的验证密钥。
由于Seattle在发送给Tacoma的NTP包中包含了验证密钥,因而在NTP中对等体就可达了,对等体的状态也就从未同步状态变为同步状态,并且时间源层级也不再是默认值了(如例9-24所示)。
例9-24:验证成功后,debug ntp packet和show ntp status及show ntp association detail的输出结果。
(待续)
从输出结果可以看出,现在已经实现了时间同步,时间层级也从默认值16变成了4,且对等体已通过验证,其时间也变为有效了。