【太阁课堂】网络工程师大招:SNMP 常见故障处理
SNMP是广泛应用于TCP/IP网络的网络管理标准协议。网管系统可以通过SNMP协议对 网络设备(包括交换机、路由器、防火墙等)进行监测和管理。
图 1-1 SNMP 网络架构

如上图所示,SNMP网络的组成包括网管、被纳管设备、中间网络,这几部分都有可能导致网管与被纳管设备之间的SNMP交互异常。
本文主要介绍网管通过SNMP协议对交换机进行监测、管理中的常见故障处理方法,主要包括以下几方面:● 2 网管无法通过SNMP 纳管交换机 ● 3 网管接收不到交换机上的告警
2 网管无法通过 SNMP 纳管交换机
网管无法通过SNMP纳管交换机,或者说网管无法与交换机进行SNMP对接,通常是因为网络或者SNMP配置原因导致。您可以从以下几方面进行排查和处理:
检查网络是否可以ping 通
检查SNMP 是否有应用ACL
检查交换机上是否有
undo snmp-agent protocol source-status all-interface配置检查交换机上是否有SNMP 认证失败等日志
检查交换机和网管的SNMP 版本是否一致
针对SNMPv2c 版本,检查交换机和网管的团体名是否一致
针对SNMPv3 版本,检查用户的安全级别是否正确
针对SNMPv3 版本,检查用户的认证+ 加密的模式及密码是否和网管侧一致
检查防火墙是否允许SNMP 报文通过
检查网络中是否有重复的SNMP 引擎ID
检查网络是否可以 ping 通
网络可以互通是SNMP对接的前提,您可以通过ping命令检查交换机和网管能否互通。如果不能互通,请检查交换机、中间网络或网管上的路由配置是否正确,确保交换机和网管能够ping通。
需要注意的是,即使交换机和网管之间能够ping通,也并不意味着交换机和网管一定能够正常接收到对端发送的SNMP报文。因为ping是ICMP报文,而SNMP是UDP报文,可能会因为ACL的应用,或者网络中有防火墙等原因,导致SNMP报文被过滤,无法通过网络正常转发。
您可以在网络设备上进行流量统计或者镜像抓包等方法确认SNMP报文是否被正常发送、接收。因为不同网络设备的流量统计或镜像抓包方法不尽相同。
检查 SNMP 是否有应用 ACL
如果交换机上的SNMP配置里有应用ACL,那么网管的IP地址必须在ACL规则允许通过的列表中。如果检查网管IP地址没有被放通,需要修改ACL规则,放通网管IP地址。
#acl number 2001rule 5 permit source 192.168.1.0 0.0.0.255 //网管IP地址必须在允许通过的列表中#snmp-agent community write cipher xxx acl 2001 //SNMPv2c版本应用ACL的配置示例#snmp-agent group v3 huawei_group privacy write-view alliso acl 2001 //SNMPv3版本应用ACL的配置示例#检查交换机上是否有 undo snmp-agent protocol source-status all-interface 配置
CloudEngine交换机从V200R019C10版本开始,缺省情况下,交换机会关闭SNMP协议使用所有接口响应网管请求的功能,即有如下配置:
#undo snmp-agent protocol source-status all-interfaceundo snmp-agent protocol source-status ipv6 all-interface#如果交换机上有上述配置,需要打开SNMP协议使用所有或者部分接口响应网管请求的功能。
打开SNMP协议使用所有接口响应网管请求的功能。
[ ~ HUAWEI] snmp-agent protocol source-status all-interface[ ~ HUAWEI] snmp-agent protocol source-status ipv6 all-interface
打开指定的接口响应网管请求的功能。
[ ~ HUAWEI] snmp-agent protocol source-interface meth 0/0/0
检查交换机上是否有 SNMP 认证失败等日志
在网管与交换机进行SNMP对接失败时,交换机上可能会记录一些SNMP异常的日志,例如:SNMP/3/SNMP_AUTHEN_FAILED。您可以执行命令display logbuffer查看交换机上是否有SNMP异常日志,并根据日志中记录的原因而进行相应的处理。
SNMP/3/SNMP_AUTHEN_FAILED: Failed to login through SNMP. (Version=[Version],UserName=[UserName], Ip=[Ip], VpnName=[VpnName], RequestID=[RequestID], PduType=[PduType],Reason=[Reason])检查交换机和网管的 SNMP 版本是否一致
SNMP有v1、v2c、v3几种版本,交换机侧和网管侧的SNMP版本必须保持一致,否则无法进行SNMP对接。
缺省情况下,交换机的SNMP版本为v3。您可以检查配置文件或者通过命令displaysnmp-agent sys-info version查看当前交换机的SNMP版本。如果两侧SNMP版本不一致,需要修改交换机或网管侧,使其保持一致。
例如配置交换机的SNMP版本支持v2c。
[ ~ HUAWEI] snmp-agent sys-info version v2c针对 SNMPv2c 版本,检查交换机和网管的团体名是否一致
团体名包括只读权限的团体名和读写权限的团体名,交换机侧和网管侧配置的团体名必须一致。
交换机上配置的SNMP团体名是以密文的形式保存的。如果忘记配置的团体名,建议重新配置团体名,使之与网管侧一致。
#snmp-agent sys-info version v2csnmp-agent community read cipher xxx //只读权限团体名snmp-agent community write cipher xxx //读写权限团体名#针对 SNMPv3 版本,检查用户的安全级别是否正确
SNMPv3用户的安全级别分为三个等级,从高到低为:
privacy:认证并加密
authentication:认证不加密
none:不认证不加密
SNMPv3协议规定,用户和告警主机的安全级别不能低于其所属用户组的安全级别,否则网管将无法与交换机对接。如果用户组是privacy级别,用户和告警主机就必须是privacy级别;用户组是authentication级别,用户和告警主机可以是privacy或者authentication级别。
#snmp-agent sys-info version v3snmp-agent group v3 dc-admin privacy read-view rd write-view wt notify-view nt //组名为dc-admin,安全级别为privacy#snmp-agent usm-user v3 uhmrootsnmp-agent usm-user v3 uhmroot group dc-admin //用户名为uhmroot,属于dc-admin组snmp-agent usm-user v3 uhmroot authentication-mode sha cipher xxx //认证模式及密码snmp-agent usm-user v3 uhmroot privacy-mode aes128 cipher xxx //加密模式及密码 , 如果用户组安全级别为privacy,用户必须同时配置authentication-mode和privacy-mode#针对 SNMPv3 版本,检查用户的认证+ 加密的模式及密码是否和网管侧一致
交换机侧SNMPv3用户的认证、加密的模式及密码必须和网管侧保持一致,否则无法完成SNMP对接。
交换机上配置的SNMP密码是以密文的形式保存的。如果忘记配置的密码,建议重新配置认证、加密的模式及密码,使之与网管侧一致。
#snmp-agent usm-user v3 uhmrootsnmp-agent usm-user v3 uhmroot group dc-adminsnmp-agent usm-user v3 uhmroot authentication-mode sha cipher xxx //认证模式及密码,必须和网管侧一致snmp-agent usm-user v3 uhmroot privacy-mode aes128 cipher xxx //加密模式及密码,必须和网管侧一致#检查防火墙是否允许 SNMP 报文通过
如果交换机和网管之间的网络中有防火墙,则可能会因为防火墙的过滤策略而导致SNMP报文无法正常通过。以Huawei防火墙为例,防火墙默认丢弃所有的报文,只有在防火墙策略中放行的报文才能正常转发。
在检查防火墙上的安全策略时,需要注意策略中的以下几点:
交换机所属的安全域和网管所属的安全域之间的策略,交换机和网管的IP地址需要被放通,且双向都需要放通。
防火墙上连接交换机和网管的接口需要开启SNMP服务。
#security-policyrule name policy1 //安全域策略source-zone trust //源安全域destination-zone untrust //目的安全域source-address 10.1.1.0 mask 255.255.255.0 //源IP地址,交换机或网管地址需要在此范围内destination-address 10.1.2.0 mask 255.255.255.0 //目的IP地址,交换机或网管IP地址需要在此范围内action permitrule name policy2source-zone untrustdestination-zone trustsource-address 10.1.2.0 mask 255.255.255.0destination-address 10.1.1.0 mask 255.255.255.0action permit#interface GigabitEthernet1/0/0 //连接交换机或网管的接口undo shutdownip address 10.1.2.1 255.255.255.0service-manage snmp permit //开启SNMP服务,缺省情况下SNMP服务未开启#检查网络中是否有重复的 SNMP 引擎 ID
正常情况下,网络中每台交换机都会有一个唯一的SNMP引擎ID,用于标志一个SNMP实体。如果网络中交换机的SNMP引擎ID有重复,那么后添加的交换机将无法与网管进行对接。
#snmp-agentsnmp-agent local-engineid 800007DB03D0C65B9E5D01 //SNMP引擎ID#SNMP引擎ID重复通常出现于复制其他交换机的配置文件后,再进行修改并使用的场景,容易漏修改原交换机使用的SNMP引擎ID。如果发现SNMP引擎ID有重复,可以在交换机上通过undo snmp-agent local-engineid恢复ID为缺省值,使其唯一。
[ ~ HUAWEI] undo snmp-agent local-engineid3 网管接收不到交换机上的告警
当交换机发生故障或因某些原因导致系统进入不正常的工作状态时,为帮助用户快速感知并定位问题,系统会产生事件和告警,同时触发产生相应的Trap信息。Trap信息通过SNMP协议上报到网管系统。在实际应用中,习惯把Trap直接称为告警,为便于理解,下文中的告警和Trap是同一个含义。
网管能够收到交换机告警的前提是网管已经成功纳管交换机,所以在处理网管接收不到告警的问题前,请先确保网管能够正常纳管交换机,然后从以下几方面进行排查和处理:
检查交换机上告警开关是否打开,或告警是否被过滤
检查交换机是否有
set net-manager vpn-instance配置检查交换机发送告警时使用的SNMP 版本是否与全局SNMP 版本一致
检查交换机的SNMP 告警端口号和网管侧是否一致
检查交换机上告警开关是否打开,或告警是否被过滤
网管接收到告警的前提是交换机真实产生了告警或事件,并产生了相应的Trap信息,因此在网管接收不到告警时,首先需要确认交换机是否产生了Trap。
执行命令display trapbuffer查看Trap缓冲区中是否存在对应的告警信息。如果不存在,则说明交换机没有产生告警,网管也就无法收到告警,此时可以通过检查交换机的如下配置进行排查:
检查对应的告警开关是否开启。
例如,接口Down的告警为:IFNET_1.3.6.1.6.3.1.1.5.3 linkdown ,IFNET为告警所属的模块。通过命令display snmp-agent trap feature-name feature-nameall,可以查看到交换机上接口Down告警开关是否打开,其中“Current switchstatus”值即表示当前告警开关的开启状态。
<HUAWEI> display snmp-agent trap feature-name ifnet all------------------------------------------------------------------------------Feature name: IFNETTrap number : 4------------------------------------------------------------------------------Trap name Default switch status Current switch statushwPhysicalAdminIfDown on onhwPhysicalAdminIfUp on onlinkdown off offlinkup off off如果告警被关闭,可以执行命令snmp-agent trap enable feature-name feature-name trap-name trap-name 可以打开对应告警的开关。
[ ~ HUAWEI] snmp-agent trap enable feature-name ifnet trap-name linkdown或者执行命令snmp-agent trap enable打开所有告警的开关。
[ ~ HUAWEI] snmp-agent trap enable检查告警是否被过滤掉。
如果交换机上配置了info-center filter-id { id | bymodule-alias modnamealias }命令过滤了相应的Trap,那么即使交换机产生了该告警,也不会产生Trap信息,网管也无法收到该告警。
#info-center filter-id bymodule-alias ifnet linkdown#如果有上述配置,可以执行undo info-center filter-id { id | bymodule-aliasmodname alias }删除该配置
[ ~ HUAWEI] undo info-center filter-id bymodule-alias ifnet linkdown检查交换机是否有 set net-manager vpn-instance 配置
通常情况下,交换机上配置SNMP发送告警信息时,除了指定目标网管外,还会使用snmp-agent trap source interface-type interface-number 命令指定发送告警的源接口。这样在网管上可以进行告警源识别。
但是交换机上若同时配置了set net-manager vpn-instance vpn-instance 命令,且该VPN和snmp-agent trap source interface-type interface-number 命令指定的源接口绑定的VPN不是同一个,那么交换机会优先使用set net-manager vpn-instance vpn-instance 命令指定的VPN里的某个接口作为源接口,这样会导致网管无法接受到正确源地址的告警。
例如交换机上有以下配置。那么交换机发送告警至网管时,源接口将是vpn1里的LoopBack2,而不是LoopBack1。
#interface LoopBack1ip address 1.1.1.1 255.255.255.255#interface LoopBack2ip binding vpn-instance vpn1ip address 2.2.2.2 255.255.255.255#set net-manager vpn-instance vpn1 //如果配置该命令,优先使用该命令指定的VPN里的接口来发送告警#snmp-agent target-host trap address udp-domain 10.1.1.1 params securityname uhmroot v3 privacy //指定接收告警的目标网管#snmp-agent trap source LoopBack1 //指定发送告警的源接口#若产生了上述冲突场景,可以采用下面其中一种方法解决:
执行
undo set net-manager vpn-instance删除该配置。
删除该配置前,请先确认对其他业务模块的影响,因为该命令不仅仅会影响SNMP模块,还会对FTP、SFTP、Info Center、SSH、TACACS等业务模块产生影响。
在
snmp-agent target-host trap命令中指定源接口。该命令中指定的源接口参数source interface-type interface-number具有最高优先级。
[ ~ HUAWEI] snmp-agent target-host trap address udp-domain 10.1.1.1 source loopback1 params securityname uhmroot v3 privacy检查交换机发送告警时使用的 SNMP 版本是否与全局 SNMP 版本一致
交换机上snmp-agent target-host trap命令指定的发送告警时使用的SNMP版本,需要与snmp-agent sys-info version指定的全局SNMP版本一致,否则交换机无法正常发送出告警。在配置snmp-agent target-host trap命令时,如果不指定SNMP版本,则默认使用SNMPv1。
例如以下配置中,全局SNMP协议使能的是v3版本,而未指定发送告警时所使用的SNMP版本,使用默认的v1版本,两者的版本不一致,因此交换机无法正常发送出告警。
snmp-agent sys-info version v3 //仅使能SNMPv3版本snmp-agent target-host trap address udp-domain 10.1.1.1 params securityname uhmroot //未配置交换机发送告警所使用的SNMP版本,默认使用SNMPv1版本需要在snmp-agent target-host trap命令中指定发送告警时使用的SNMP版本,使其和全局的版本一致。
[ ~ HUAWEI] snmp-agent target-host trap address udp-domain 10.1.1.1 params securityname uhmroot v3 privacy检查交换机的 SNMP 告警端口号和网管侧是否一致
按照SNMP协议规范,SNMP使用目的端口号162来发送告警信息。因此,网管通常使用端口号162来处理告警信息,例如Huawei的eSight网管系统。
如果交换机上snmp-agent target-host trap配置里指定了目的端口号(缺省情况下为162),且与网管侧不一致,则会导致网管无法正常接收告警信息。
#snmp-agent target-host trap address udp-domain 10.1.1.1 udp-port 161 params securityname uhmroot v3privacy#建议使用默认的目的端口号。
#snmp-agent target-host trap address udp-domain 10.1.1.1 params securityname uhmroot v3 privacy
