Cisco IOS Cookbook 中文精简版第十七章 SNMP

1/6/2008来源:Cisco网络人气:7902

17.1.  配置SNMP

提问 在路由器上启用基本的SNMP服务

回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server community ORARO ro

Router(config)#snmp-server community ORARW rw

Router(config)#end

Router#

从12.0以后启用了另一种配置方式

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server group COOKRO v1

Router(config)#snmp-server user TESTRO1 COOKRO v1

Router(config)#snmp-server group BOOKRO v2c

Router(config)#snmp-server user TESTRO2 BOOKRO v2c

Router(config)#end

注释 注重的是这里启用的仅仅是简单SNMP服务,只会响应SNMP的GET和SET请求,不会发送SNMP traps informs.由于SNMP V1和V2c都是明文传输community值所以需要后续的一些安全限制。show snmp group可以用来验证

17.2.  通过SNMP工具获得路由器信息

注释 可以使用snmpget, snmpwalk,snmpset命令直接对MIB进行查询,建议使用Solarwinds等图形化工具,暂略。

思科MIBs信息:http://www.cisco.com/public/sw-center/netmgmt/cmtk/mibs.sHtml.

17.3.  为SNMP访问配置一些路由器重要信息

提问 为SNMP访问提供类似路由器位置,序列号等重要信息

回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server contact Ian Brown 416-555-2943

Router(config)#snmp-server location 999 Queen St. W., Toronto, Ont.

Router(config)#snmp-server chassis-id JAX123456789

Router(config)#end

Router#

注释 无

<!--[if !supportLists]-->17.4.       <!--[endif]-->使用SNMP获得批量路由设备信息


注释 使用perl脚本来进行批量化操作,暂略

17.5.  使用控制列表来限制SNMP访问

提问 使用控制列表的方式来提高SNMP访问的安全性

回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#access-list 99 permit 172.25.1.0 0.0.0.255

Router(config)#access-list 99 permit host 10.1.1.1      

Router(config)#access-list 99 deny any

Router(config)#snmp-server community ORARO ro 99

Router(config)#access-list 98 permit 172.25.1.0 0.0.0.255           

Router(config)#snmp-server community ORARW rw 98

Router(config)#end

Router#

SNMP Group的方法

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#access-list 99 permit 172.25.1.0 0.0.0.255

Router(config)#access-list 99 permit host 10.1.1.1       

Router(config)#access-list 99 deny any

Router(config)#snmp-server group COOKRO v1 access 99

Router(config)#snmp-server user TESTRO1 COOKRO v1  

Router(config)#end

Router#

从12.3(2)T以后支持命名控制列表

Router2#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router2(config)#ip access-list standard SNMPACL        

Router2(config-std-nacl)#permit 172.25.1.0 0.0.0.255           

Router2(config-std-nacl)#permit host 10.1.1.1

Router2(config-std-nacl)#deny any

Router2(config-std-nacl)#snmp-server community ORARO1 ro SNMPACL


Router2(config)#end

Router2#

注释 无

17.6.  记录非授权的SNMP尝试

提问 对非授权的SNMP尝试进行日志记录

回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#access-list 99 permit 172.25.1.0 0.0.0.255

Router(config)#access-list 99 permit host 10.1.1.1

Router(config)#access-list 99 deny any log

Router(config)#snmp-server community ORARO ro 99

Router(config)#snmp-server community ORARW rw 99

Router(config)#end

Router#

注释

Router#show access-list 99

Standard IP access list 99

    permit 10.1.1.1  (1293 matches)

    permit 172.25.1.0, wildcard bits 0.0.0.255 (630 matches)

    deny   any log (17 matches)

Router#show logging

Syslog logging: enabled (0 messages dropped, 0 flushes, 0 overruns)

    Console logging: disabled

    Monitor logging: level debugging, 26 messages logged

        Logging to: vty2(0)

    Buffer logging: level debugging, 49 messages logged

    Trap logging: level informational, 53 message lines logged

        Logging to 172.25.1.1, 53 message lines logged

        Logging to 172.25.1.3, 53 message lines logged

         

Log Buffer (4096 bytes):

APR 15 22:33:21: %SEC-6-IPACCESSLOGS: list 99 denied 192.168.22.13 1 packet

Apr 15 22:39:18: %SEC-6-IPACCESSLOGS: list 99 denied 10.121.212.11 3 packets

Router#

17.7.  限制MIB访问

提问 限制特定的MIB可以被SNMP来访问


回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#access-list 99 permit 172.25.1.0 0.0.0.255

Router(config)#access-list 99 deny any log

Router(config)#snmp-server view ORAVIEW mib-2 included

Router(config)#snmp-server view ORAVIEW at excluded

Router(config)#snmp-server view ORAVIEW cisco included

Router(config)#snmp-server community ORARO view ORAVIEW ro 99

Router(config)#snmp-server view RESTRICTED lsystem.55 included

Router(config)#snmp-server community ORARW view RESTRICTED rw 99

Router(config)#end

Router#

SNMP Group方式

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server view ORAVIEW mib-2 included

Router(config)#snmp-server view ORAVIEW at excluded

Router(config)#snmp-server view ORAVIEW cisco included

Router(config)#snmp-server group TEST v1 read ORAVIEW

Router(config)#snmp-server user ORARO TEST v1

Router(config)#snmp-server view RESTRICTED lsystem.55 included

Router(config)#snmp-server group TEST2 v1 write RESTRICTED

Router(config)#snmp-server user ORARW TEST2 v1

Router(config)#end

Router#

注释

Router#show snmp view

ORAVIEW mib-2 - included nonvolatile active

ORAVIEW at - excluded nonvolatile active

ORAVIEW cisco - included nonvolatile active

v1default internet - included volatile active

v1default internet.6.3.15 - excluded volatile active

v1default internet.6.3.16 - excluded volatile active

v1default internet.6.3.18 - excluded volatile active


RESTRICTED cisco - included nonvolatile active

RESTRICTED lsystem.55 - included nonvolatile active

Router#

17.8.  使用SNMP来修改路由器当前配置

提问 使用SNMP来下载或者上传路由器配置文件

回答

以安装了NETSNMP的Freebsd为例

首先路由器启用SNMP

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server community ORARW rw

Router(config)#end

下载配置

Freebsd% toUCh /tFTPboot/router.cfg

Freebsd% chmod 666 /tftpboot/router.cfg

Freebsd% snmpset v1 -c ORARW Router .1.3.6.1.4.1.9.2.1.55.172.25.1.1 s router.cfg

enterprises.9.2.1.55.172.25.1.1 = "router.cfg"

Freebsd%

修改配置后上传保存

Freebsd% echo "no ip source-route" > /tftpboot/new.cfg

Freebsd% echo "end" >> /tftpboot/new.cfg

Freebsd% chmod 666 /tftpboot/new.cfg

Freebsd% snmpset v1 -c ORARW Router .1.3.6.1.4.1.9.2.1.53.172.25.1.1 s new.cfg

enterprises.9.2.1.53.172.25.1.1 = "new.cfg"

Freebsd% snmpset v1 -c ORARW Router .1.3.6.1.4.1.9.2.1.54.0 i 1

enterprises.9.2.1.54.0 = 1

Freebsd%

注释 .1.3.6.1.4.1.9.2.1.55是思科MIB中发送当前配置文件的OID值,172.25.1.1是TFTP服务器地址。在修改配置文件时候注重最后要加上end命令,注重这时的OID是.1.3.6.1.4.1.9.2.1.53。最后一个snmpset命令是对上传配置进行保存。当然上述操作都可以使用Solarwinds软件实现

17.9.  使用SNMP来升级IOS

提问 通过SNMP来远端升级路由器IOS

回答

首先路由器配置

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server community ORARW rw


Router(config)#end

下载当前的IOS

Freebsd% touch /tftpboot/c2600-jk9o3s-mz.122-7a.bin

Freebsd% chmod 666 /tftpboot/c2600-jk9o3s-mz.122-7a.bin

Freebsd% snmpset v1 -c ORARW Router .1.3.6.1.4.1.9.2.10.9.172.25.1.1 s c2600-jk9o3s-mz.122-7a.bin

enterprises.9.2.10.9.172.25.1.1 = "c2600-jk9o3s-mz.122-7a.bin"

Freebsd%

升级IOS

Freebsd% chmod 666 /tftpboot/c2600-jk9o3s-mz.122-7a.bin

Freebsd% snmpset v1 -c ORARW Router .1.3.6.1.4.1.9.2.10.6.0 i 1

enterprises.9.2.10.6.0 = 1

Freebsd% snmpset v1 -c ORARW Router.1.3.6.1.4.1.9.2.10.12.172.25.1.1 s c2600-jk9o3s-mz.122-7a.bin

enterprises.9.2.10.12.172.25.1.1 = "c2600-jk9o3s-mz.122-7a.bin"

Freebsd%

注释 例子中的Router是路由器的机器名也可以使用IP地址,.1.3.6.1.4.1.9.2.10.9.是相应的OID。在对IOS升级的时候第一步做的是清除Flash,第二步才是上传IOS。这种可以使用脚本来实现IOS的集中治理。

17.10.  使用SNMP来进行批量的配置修改

注释 使用perl脚本来进行批量化操作,暂略

17.11.  避免非授权的配置修改

提问 只答应特定的设备来通过SNMP和TFTP来发送和接收配置信息

回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#access-list 92 permit 172.25.1.1

Router(config)#access-list 92 deny any log        

Router(config)#snmp-server tftp-server-list 92

Router(config)#snmp-server community ORARW rw

Router(config)#end

Router#

从12.3(2)T开始支持命名控制列表

Router2#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router2(config)#ip access-list standard TFTPACL       

Router2(config-std-nacl)#permit 172.25.1.1

Router2(config-std-nacl)#deny any log       

Router2(config-std-nacl)#exit


Router2(config)#snmp-server tftp-server-list TFTPACL

Router2(config)#snmp-server community ORARW rw

Router2(config)#end

Router2#

注释 要注重的是这里限制的仅仅是通过SNMP发起的TFTP会话,对其他的文件传输不受影响。另外这里的控制列表是全局性的,不能针对特定的community值

17.12.  保持接口表名的永久性

提问 即使重启也能保证SNMP使用相同的接口名

回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server ifindex persist

Router(config)#end

Router#

也可以对单独接口:

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#interface Serial0/0

Router(config-if)#snmp ifindex persist

Router(config-if)#exit

Router(config)#end

Router#

 

注释 很多工程师不知道内部SNMP接口号是会变的,这样在进行查询的时候会出错,比如下面的例子,FastEthernet1/0的ifindex是5

Freebsd% snmpwalk v1 -c ORARO Router ifDescr

interfaces.ifTable.ifEntry.ifDescr.1 = "BRI0/0"

interfaces.ifTable.ifEntry.ifDescr.2 = "Ethernet0/0"

interfaces.ifTable.ifEntry.ifDescr.3 = "BRI0/0:1"

interfaces.ifTable.ifEntry.ifDescr.4 = "BRI0/0:2"

interfaces.ifTable.ifEntry.ifDescr.5 = "FastEthernet1/0"

interfaces.ifTable.ifEntry.ifDescr.6 = "Null0"

interfaces.ifTable.ifEntry.ifDescr.7 = "Loopback0"

重启以后再查询就变成2了

Freebsd% snmpwalk v1 -c ORARO Router ifDescr

interfaces.ifTable.ifEntry.ifDescr.1 = "Ethernet0/0"

interfaces.ifTable.ifEntry.ifDescr.2 = "FastEthernet1/0"

interfaces.ifTable.ifEntry.ifDescr.3 = "Null0"

interfaces.ifTable.ifEntry.ifDescr.4 = "Loopback0"

这样就会给网管造成困难

17.13.  启用SNMP Traps和Informs

提问 配置路由器针对特定事件产生Traps或者Informs

回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.


Router(config)#snmp-server enable traps

Router(config)#snmp-server host 172.25.1.1 ORATRAP config entity envmon hsrp

Router(config)#snmp-server host nms.oreilly.com ORATRAP bgp snmp envmon

Router(config)#end

Router#

从SNMP v2c开始路由器支持SNMP Informs

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server enable informs

Router(config)#snmp-server host 172.25.1.1 informs version 2c ORATRAP snmp envmon

Router(config)#end

Router#

注释 这里的Traps是路由器主动提供的,不是针对SNMP request的响应。可以snmp-server enable traps envmon 来发送特定的TRAPS,也可以针对不同的NMS主机发送不同的traps

17.14.  以SNMP Trap的形式发送Syslog

提问 把Syslog封装成SNMP Traps或者Informs

回答

Traps

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#logging history informational

Router(config)#snmp-server enable traps syslog

Router(config)#snmp-server host 172.25.1.1 ORATRAP syslog

Router(config)#end

Router#

Informs

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#logging history informational

Router(config)#snmp-server enable informs

Router(config)#snmp-server host 172.25.1.1 informs version 2c ORATRAP syslog

Router(config)#end

Router#

 

注释 Router#clear counters

Clear "show interface" counters on all interfaces [confirm]

Router#

May 28 10:07:04: %CLEAR-5-COUNTERS: Clear counter on all interfaces by ijbrown on vty0 (172.25.1.1)

上述的Syslog信息会变成下面的SNMP消息

Freebsd% tail snmptrapd.log

May 28 10:07:04 freebsd snmptrapd[77759]: 172.25.25.1: Enterprise Specific Trap (1) Uptime: 18 days, 22:35:26.99, enterprises.9.9.41.1.2.3.1.2.118 = "CLEAR", enterprises.9.9.41.1.2.3.1.3.118 = 6, enterprises.9.9.41.1.2.3.1.4.118 = "COUNTERS", enterprises.9.9.41.1.2.3.1.5.118 = "Clear counter on all interfaces by ijbrown on vty0 (172.25.1.1)", enterprises.9.9.41.1.2.3.1.6.118 = Timeticks: (163652698) 18 days, 22:35:26.98


Freebsd%

 

17.15.  设定SNMP包大小

提问 修改缺省的SNMP包大小

回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server packetsize 1480

Router(config)#end

Router#

注释 缺省为1500字节

17.16.  设定SNMP队列大小

提问 增加SNMP Trap队列大小

回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server queue-length 25

Router(config)#snmp-server inform pending 40

Router(config)#end

Router#

注释 缺省对Trap的队列是10个trap消息,对Inform是25个。可以通过show snmp来查看队列配置和丢弃的Trap包

17.17.  设定SNMP 超时时长

提问 调整SNMP Trap的超时时长

回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server trap-timeout 60

Router(config)#snmp-server inform timeout 120

Router(config)#end

Router#

注释正确说是重传等待时长

17.18.  禁止端口的Up/Down Traps

提问 忽略特定端口的链路状态告警

回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#interface Serial0/0

Router(config-if)#no snmp trap link-status

Router(config-if)#exit

Router(config)#end

Router#

注释 比如特定的拨号接口等

17.19.  设定SNMP Traps的源发送地址

提问 设定SNMP Traps消息的源发送地址

回答

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server host 172.25.1.1 ORATRAP

Router(config)#snmp-server trap-source loopback0


Router(config)#end

Router#

注释 无

17.20.  使用RMON来发送Traps

提问 实现当CPU超过警戒后发送trap或者其他重要事件发送trap

回答

CPU超过特定阀值

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#rmon event 1 log trap ORATRAP description "CPU on Router has exceeded threshold" owner ijbrown

Router(config)#rmon event 2 log description "CPU on Router has normalized" owner ijbrown         

Router(config)#rmon alarm 1 lsystem.57.0 60 absolute rising-threshold 70 1 falling-threshold 40 2 owner ijbrown

Router(config)#end

Router#

内存利用超过特定阀值

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#rmon event 4 log trap ORATRAP description "Low memory condition on Router" owner ijbrown     

Router(config)#rmon event 5 log trap ORATRAP description "Low Memory condition cleared on Router" owner ijbrown

Router(config)#rmon alarm 3 lsystem.8.0 60 absolute rising-threshold 1500000 5 falling-threshold 1000000 4 owner ijbrown

Router(config)#end

Router#

链路利用率超过固定阀值

er#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#rmon event 6 log trap ORATRAP description "Bandwidth utilization has exceeded threshold on Router interface Serial 0/0" owner ijbrown

Router(config)#rmon event 7 log trap ORATRAP description "Bandwidth utilization has normalized on Router interface Serial 0/0" owner ijbrown

Router(config)#! Configure inbound alarm on Serial0/0 (ifNumber 3)

Router(config)#rmon alarm 4 lifEntry.6.3 300 absolute rising-threshold 1000000 6 falling-threshold 800000 7 owner ijbrown


Router(config)#! Configure outbound alarm on Serial0/0 (ifNumber 3)

Router(config)#rmon alarm 5 lifEntry.8.3 300 absolute rising-threshold 1000000 6 falling-threshold 800000 7 owner ijbrown

Router(config)#end

Router#

注释 路由器内置了这种廉价的监控方案

Router>show rmon events

Event 1 is active, owned by ijbrown

 Description is CPU on Router has exceeded threshold

 Event firing causes log and trap to community ORATRAP, last fired 00:00:00

Event 2 is active, owned by ijbrown

 Description is CPU on Router has normalized

 Event firing causes log, last fired 2w2d

 Current log entries:

      index       time   description

          1       2w2d   CPU on Router has normalized

Router>

17.21.  启用SNMPv3

提问 启用SNMPv3提供安全性

回答

(noAuthNoPriv):

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server view TESTV3 mib-2 include

Router(config)#snmp-server group NOTSAFE v3 noauth read TESTV3

Router(config)#snmp-server user WEAK NOTSAFE v3

Router(config)#end

Router#

(authNoPriv):

Router#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server view TESTV3 mib-2 include

Router(config)#snmp-server group ORAROV3 v3 auth read TESTV3

Router(config)#snmp-server user cking ORAROV3 v3 auth md5 daytona19y

Router(config)#end

Router#

(authPriv)

Router#configure terminal


Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)#snmp-server view TESTV3 mib-2 include

Router(config)#snmp-server group ORAROV3 v3 auth read TESTV3

Router(config)#snmp-server user bpugsley ORAROV3 v3 auth md5 hockeyrules priv des56 shortguy

Router(config)#end

Router#

 

注释 v3最大的优点就是增加了安全性,有例子中三种模式可以选择

17.22.  高强度SNMPv3加密

提问 增强V3的加密

回答

从12.4(2)T开始增强了加密方法

Router1#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router1(config)#snmp-server user wbrejniak ORAROV3 v3 auth md5 authpass priv 3des privpass

Router1(config)#end                                                                       

Router1#

或者

Router1#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router1(config)#snmp-server user wbrejniak ORAROV3 v3 auth md5 authpass priv aes 128 privpass

Router1(config)#end

Router1#

注释 无

<!--[if !supportLists]-->17.23.       <!--[endif]-->使用 SAA

提问 配置路由器自动轮询另一台设备来获得性能统计

回答

Router1#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router1(config)#rtr responder

Router1(config)#rtr 10

Router1(config-rtr)#type echo protocol ipIcmpEcho 10.1.2.3

Router1(config-rtr)#tag ECHO_TEST

Router1(config-rtr)#threshold 1000


Router1(config-rtr)#frequency 300

Router1(config-rtr)#exit

Router1(config)#rtr schedule 10 life 2147483647 start-time now

Router1(config)#rtr 20

Router1(config-rtr)#type jitter dest-ipaddr 10.1.2.3 dest-port 99 num-packets 100

Router1(config-rtr)#tag JITTER_TEST

Router1(config-rtr)#frequency 300

Router1(config-rtr)#exit

Router1(config)#rtr schedule 20 life 100000 start-time now ageout 3600

Router1(config)#exit

Router1#

目标路由器,用来响应SAA测试

Router2#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Router2(config)#rtr responder

Router2(config)#exit

Router2#

注释 无