9.2 SNMP

CiscoWorks等网络管理软件使用SNMP(Simple Network Management Protocol,简单网络管理协议)来管理网络设备。SNMP是所有漂亮的网络框图、报表及图形背后的基础,由其查询网络设备、收集相应的数据来构建这些网络框图、报表及图形。所有的Cisco路由器都支持SNMPvl, IOS 11.3及以后版本的Cisco路由器都支持SNMPv2。SNMPv2C支持批量数据传送,并且能提供比SNMPv3更详细的差错报告。


注意: SNMPv2C包括SNMPv2(定义在RFC 1902~1907之中)和SNMPv2C(定义在RFC 19012之中)。


9.2.1 SNMP 概述

SNMP包括管理器(manager)和代理(agent),管理器负责收集数据,代理负责提供数据。

管理器可以是CiscoWorks等NMS(Network Management Systems,网络管理系统)的一部分,代理则驻留在被管设备(如路由器)上。

管理器和代理之间会建立一定的关系,使得管理器能够从代理取得信息或者在代理上设置相应的信息。管理器向代理发送SNMP消息以请求数据或者请求代理按照管理器规定的数据设置参数,相应的消息则分别被称为get(获取)和set(设置)。管理器团体(可以从代理获取数据或请求代理设置参数)通过服务控制列表和密码来进行定义,该密码被称为团体字符串(community string)。管理器在所有的get和set消息中都包含该团体字符串,预配置了该团体字符串的代理则验证是否允许该请求管理器执行get或set操作,以及团体字符串是否正确。管理器可以请求运行了代理的平台所支持的MIB(Management Information Base,管理信息库)中定义的任意参数,图9-1举例说明了管理器从路由器请求链路状态信息。

img532

图9-1 管理站发起get请求以查看路由器串口0的操作状态,路由器则响应以get reply(获取回复)消息

管理站希望查明路由器串行接口0的运行状态,为此发起了一条SNMP get请求,请求 MIB变量ifEntry.ifOperStatus.1。其中,“ifEntry”是代理上所有接口可以被轮询的变量列表,“ifOperStatus”是其中的一个变量,“1”则是索引值(在本例中标识串行接口0),get请求消息中包含了团体字符串“resticted”。路由器响应了该消息,响应消息指示被请求的变量值等于1,MIB定义ifOperStatus值为1时表示状态为up(运行),值为2时表示状态为down(中断),值为3时表示状态为testing(测试)。图中所示的链路串口0的状态为up。


注意: 所有具备SNMP能力的路由器都支持MIB II,MIB II中定义了接口变量,有关MIB II的定义请参见RFC 12133


SNMP运行在UDP之上,而且在路由器上的优先级低于其他进程,如果路由器忙于处理高优先级任务,那么将丢弃SNMP消息。大多数管理器的配置都规定在显示任何状态变更之前必须出现一次以上轮询丢失情况。

SNMP可以收集大量信息,通过SNMP可以收集每个网络设备(以及网络设备中的组件)的每种协议(协议栈中的所有层)的统计信息,有时被收集的统计信息的变化非常快,此时管理器将收集变化数据的相关信息,如异常接口上每分钟出现的错误次数。有时可能非常希望广泛地频繁应用SNMP来获取各种各样的数据,但是过多的SNMP流量会给网络性能带来一定的影响,为此需要仔细管理SNMP数据流量。在启用任何管理应用之前,需要全面理解所要产生的SNMP流量(当然还要包含其他流量)。

有时代理会向管理站发送trap(陷阱)消息,trap消息是主动产生的,是某些事件的结果,包括链路中断、BGP链路故障、认证失败或其他事件。事件发生后,路由器会向管理站发送一条SNMP trap消息,以向管理站告知该事件,管理站上的配置会指示如何处理这些trap消息,可能会引起某些网络框图颜色的变化,或者在屏幕上显示一条消息,或者向网络管理员发送一封电子邮件或一条短信。

SNMP是CiscoWorks等网络管理平台的工作基础。

9.2.2 CiscoWorks

利用CiscoWorks可以管理Cisco网络。CiscoWorks运行于HP OpenView、IBM NetView或Sun NetManager等网络管理平台之上,这些网络管理平台提供了通用的网络框图、报表和图形功能,而CiscoWorks则在此基础上增加了一些Cisco专有功能实体,如机架视图和设备配置管理等。

CiscoView是CiscoWorks的一个应用程序,CiscoView提供了Cisco网络设备的实时视图,这些视图展示了被持续更新的有关设备配置和性能状况的物理情况,机架视图则显示了Cisco设备的前后面板视图,包括LED状态指示灯。单击机架视图中的某个端口之后,可以弹出一张与该端口相关的统计表,包含诸如利用率、输入和输出错误、队列丢包、冲突以及被忽略的数据包等信息。CiscoView还可以提供显示Cisco设备系统性能的仪表盘式视图,如内存使用情况、缓存使用情况以及CPU利用率等。CiscoView集中运行在某个网络管理站点,通过单一GUI(显示动态状态报告、性能统计和网络查询等信息)可以检视、重新配置和监控基本的设备数据,而无需物理上前往不同的站点或远程站点检查每台设备、每个模块或每个端口的连接情况。

通过CiscoWorks与所选择的网络管理平台,就可以执行故障管理、性能管理和配置管理,而网络框图、报表和图形则主要依赖于SNMP提供的最新数据。

必须对被CiscoWorks管理的代理进行必要的配置,让其接受CiscoWorks工作站的轮询并向CiscoWorks工作站发送trap消息。

9.2.3 路由器的SNMP配置

可以利用多种全局SNMP命令在路由器上启用CiscoWorks管理功能,所有的全局snmp命令都以snmp-server为开头,而不是使用哪个特殊命令来启用SNMP。在路由器上输入的第一条snmp-server命令将启用两个版本的SNMP。

路由器必须被配置为使用与管理站一致的SNMP版本。

创建管理团体的配置命令如下。

[no] snmp-server community string [view view-name] [ro | rw][access-list number]

团体字符串充当管理器和代理之间的密码,管理站可以以RO(read-only,只读)或RW(read/write,读取/写入)SNMP方式访问路由器。CiscoWorks管理站需要以RW方式访问路由器,以获得完全的管理能力,特别是设置参数、重装路由器已经更新配置的能力。SNMP是一种非常强大的管理工具,通过SNMP MIB几乎可以获取路由器所有的配置和状态信息。通过SNMP读取访问方式获得的信息可以用来了解路由表和ARP表,从而便于某些管理人员了解特定设备以及特定攻击区域的路由情况。SNMP写入访问方式可以更改设备配置、重置链路和路由器。为了限制可以读取或写入路由器的设备,可以利用access-list选项,该列表是一种简单的访问列表,用于指定被允许管理站的地址或地址范围。

启用SNMP所需要的惟一命令就是snmp-server community,其他命令都属于可选命令,用于精细化调整可收集或可设置的信息。

命令snmp-server community中的选项view用法如下。

snmp-server view view-name oid-tree{included | excluded}

该命令的作用是限制SNMP管理器可以访问的MIB对象。oid-tree(Object Identifier tree,对象标识符树)用于标识被包含或被排除的MIB子树,要想标识一个子树,就需要利用数字(如1.3.6.2.4)或单词(如“System”)组成的文本串来指定所期望子树的顶部。指定系统就意味着系统子树中的所有MIB值都被包含或都被排除,1.3.6.2.1.2是iso.org.dod.mgmt.mib2.接口的数字化表达形式。


注意: 参考定义各个MIB的RFC以及RFC 1902 “SNMPv2管理信息的结构”,可以进一步了解所有对象标识符的数字化表达形式。


SNMP管理器可以向虚拟终端和控制台用户发送消息,发送消息的SNMP请求也同时指定消息发出后所要采取的操作,如关闭系统。这是一个非常强大的工具,为了启用该功能,必须配置命令snmp-server system-shutdown,如果没有配置该命令,那么将无法启用该机制。

另一个强大的工具就是让TFTP服务器通过SNMP保存和加载配置文件,可以利用命令snmp-server tftp-server-list number来限制允许使用该能力的服务器,其中的number表示访问列表号。

指定将trap消息发送给哪台主机以及发送什么类型的trap消息的命令如下。

snmp-server host host [version {1 | 2c}] community-string [udp-port port] [trap-type]

如果没有指定trap-type,那么该路由器将可以向主机发送所有类型的trap消息。版本定义的是管理站的SNMP版本,udp-port选项则用于更改默认的端口号。

在向指定主机发送trap消息之前,必须在全局范围内启用trap。某些trap在默认情况下就被启用,而其他trap则需要利用以下命令进行启用。

snmp-server enable traps trap-type trap-option

命令snmp-server enable traps的作用是在路由器上针对某些指定trap消息启用trap机制,而不指定trap消息所要发送的主机,利用该命令可以启用或禁用某些类型的trap。一旦禁用了trap,那么将忽略在每台主机上指定的trap消息。

还有一个在接口层面上控制trap消息的命令,用于在所配置接口上启用或禁用链路状态 trap的接口子命令是[no] snmp trap link-status,默认情况下,所有接口上都启用了trap机制。

对一个接收trap消息的主机来说,需要使用命令来指定该主机的地址,并在全局范围内启用trap机制,可以利用命令snmp-server enable traps,也可以利用其他命令(如snmp trap link-status)或者默认启用。下面将给出一些具体的配置示例。

例9-1所示配置利用团体字符串“access”来表示允许以只读访问方式访问SNMP管理器,启用了BGP trap,并将BGP trap发送给主机172.16.1.200和172.16.1.201。

例9-1:允许以只读访问方式访问SNMP管理器并启用BGP trap。

img535a

路由器10.1.2.1和10.1.2.25之间建立了一条BGP外部连接,该连接被拆除后将会生成trap消息,如例9-2所示。

例9-2:拆除BGP外部连接将会生成trap消息。

img535b

SNMPvl的trap消息被同时发送给两台trap主机。正在发送trap消息的路由器的地址是10.1.2.25,该地址是向trap主机发送数据包时所使用的出站接口的地址。MIB OID bgpPeerEntry.14.10.1.2.1(表示被该对等体看见的在去往对等体10.1.2.1的连接上的最后BGP差错)的值为00 00,表示没有差错发生。OID bgpPeerEntry.2.10.1.2.1表示BGP对等体的状态(表示该对等体看见的去往对等体10.1.2.1的连接的状态),其值为1,表示处于空闲状态。


注意: 有关Cisco所支持的MIB列表情况请参见www.cisco.com/public/mibs/vl。


在例9-3所示配置中,主机172.16.1.201被升级到SNMPv2C,且该主机仅接收BGP trap消息,172.16.1.200仅接收TTY trap。此外,所有SNMP trap消息的源IP地址都被配置为环回接口的IP地址172.16.2.25。

例9-3:启用SNMPv2C trap并指定SNMP trap消息的源IP地址。

img536a

当用户退出路由器时,该路由器将发送TTY连接trap(如例9-4所示)。

例9-4:用户退出路由器时该路由器将发送TTY连接trap。

img536b

上例中所示trap类型为enterprises.9,当重新加载路由器或关闭TCP连接时将生成该trap。

ltsLineSessionEntry.1代表线路会话类型,值为5表示该trap是由Telnet会话生成的。

tcpConnEntry.1代表TCP连接的状态,值为5表示该连接已被关闭。接下来的数字分别是Boxer的IP地址以及通过Telnet进入Boxer的设备的IP地址。

ltcpConnEntry.5代表TCP连接已建立的时长,以百分之一秒为单位,因而可知该连接已建立9.58秒。接下来的两个OID代表该TCP连接的输入字节数和该连接的输出字节数,即输入45字节,输出87字节。ItsLineEntry.18显示的是TACACS用户名(如果启用了TACACS的话)。例9-5显示了发送给172.16.1.201的SNMPv2C BGP trap。

例9-5:SNMPv2C BGP trap消息比SNMPvl BGP trap中包含了更多的信息。

img536c

SNMPv2C中的trap消息中包含了比SNMPv1 trap消息更多的信息,系统运行时间表示的是该系统网络管理部分最后重新初始化之后的时间,以百分之一秒为单位。OIDinternet.6.3.1.1.4.1.0(值为bgp.7.2)代表专用trap——bgpBackwardTransition,该trap是在连接状态从高编号状态迁移到低编号状态(如从已建立状态到空闲状态)时生成的。例9-6显示的BGP状态为ESTABLISHED状态。

例9-6:BGP状态进入ESTABLISHED。

img537a

internet.6.3.1.1.4.1.0 OID的值为bgp.7.1代表bgpEstablished trap,而对等体表项值6表示对等体10.1.2.1的连接为ESTABLISHED。

例9-7配置中的团体字符串“restricted”表示仅允许以只读访问方式访问access-list 1所指定的IP地址,而且限制该主机只能查看部分MIB,特别是接口表项。

例9-7:允许以只读方式访问访问列表所指定的IP地址。

img537b

其他SNMP管理器将无法访问携带团体字符串“restricted”的设备上的SNMP代理。如果在该路由器上仅配置了该团体字符串,那么172.16.1.200是惟一可能读取SNMP MIB变量的设备,但其无法设置变量。命令view配置了一个名为interface_entries的视图,该视图仅局限于变量ifEntry。命令community将已定义的视图与团体字符串“restricted”和access-list 1关联在一起。

例9-8显示了对变量ifEntry和MIB树的IP树枝执行SNMP walk操作后的输出结果。

例9-8:为路由器设置视图限制之前对ifEntry和MIB树的IP树枝执行walk操作。

img537c

img538a


注意: 与命令snmpget仅读取单条表项不同,命令snmpwalk读取的是MIB树的整个树枝。


例9-9显示的是实施了视图限制之后的命令snmpwalk的输出结果。

例9-9:为路由器设置视图限制之后对ifEntry和MIB树的IP树枝执行walk操作。

img538b

请注意,SNMP管理站将无法读取未被显式包含在视图定义中的任何MIB。