不可预测的瞻博网络 SNMPv3 访问错误

网络工程 故障排除 snmp 杜松
2021-07-03 23:04:45

我们遇到了 SNMPv3 停止接受我们的瞻博网络 EX 系列交换机上的 SNMP 请求的问题。在看似随机的情况下,瞻博网络节点拒绝 SNMP 身份验证凭据。

这就是我们最终得到的:

rj@MHN00525SYS01:~$ snmpwalk -v 3 -a SHA -A "PASS" -l authPriv -x AES -X "PASS" 
  -u "username" mhn00416an01 iso.3.6.1.2.1.1.1.0
snmpwalk: Unknown user name
rj@MHN00525SYS01:~$

我们的设备正在工作,但随后就停止了。用户名正确并加载到系统中。

rj@MHN00416AN01# run show snmp v3 users

Engine ID: 80 00 0a 4c 04 31 33 <...snip...>
    User                            Auth/Priv   Storage      Status
    username                         sha/aes128 nonvolatile  active

处理了一段时间后,我们最终决定进行调查。在系统停止接受请求之前,我看到了这个条目:

Nov  6 09:44:32  MHN00416AN01 mgd[7996]: UI_COMMIT: User 'rj' requested 'commit' 
  operation (comment: none)
Nov  6 09:44:35  MHN00416AN01 snmpd[1260]: LIBJSNMP_NS_LOG_ERR: ERR: snmpd: send_trap: USM 
  unknown security name (no such user exists) (plaintext scopedPDU header type 00: s/b 30)
Nov  6 09:44:35  MHN00416AN01 snmpd[1260]: SNMPD_ENGINE_ID_CHANGED: Warning: Local 
  engine ID has changed. Passwords for all the users under [edit snmp v3 usm local-engine] 
  need to be reconfigured.

我发现只需重新输入用户名/密码即可恢复对设备的访问。

rj@MHN00416AN01# set snmp v3 usm local-engine user username 
  authentication-sha authentication-password PASS

{master:0}[edit]
rj@MHN00416AN01# set snmp v3 usm local-engine user username 
  privacy-aes128 privacy-password PASS

一次commit操作后,我们可以再次访问它。

rj@MHN00525SYS01:~$ snmpwalk -v 3 -a SHA -A "PASS" -l authPriv -x AES -X "PASS" 
  -u "username" mhn00416an01 iso.3.6.1.2.1.1.1.0
iso.3.6.1.2.1.1.1.0 = STRING: "Juniper Networks, Inc. ex3300-48p Ethernet Switch, kernel 
  JUNOS 12.3R3.4, Build date: 2013-06-14 02:21:01 UTC Copyright (c) 1996-2013 Juniper 
  Networks, Inc."
rj@MHN00525SYS01:~$

这个问题发生在大量不同的设备上。型号包括版本 12.3 上的 EX2200-c、EX3300、EX4200 和 EX4550。

为什么会发生这种情况,我怎样才能让它停止?

1个回答

此问题是引擎 ID 更改的结果。如果您遇到此 syslog 消息,这就是问题的确切定义。

Nov  6 09:44:35  MHN00416AN01 snmpd[1260]: SNMPD_ENGINE_ID_CHANGED: Warning: Local 
  engine ID has changed. Passwords for all the users under [edit snmp v3 usm local-engine] 
  need to be reconfigured.

不幸的是,我发现这种情况无缘无故地发生。在此 engine-id 更改之前执行的提交是一个简单的syslog-host添加,导致 engine-id 更改。 瞻博网络engine-id在其 TechLibrary 中介绍了该选项,其中表示默认选项是使用设备的默认 IP 地址。

经过多次敲击桌子后,我们发现简单地定义具有明确设置的桌面是最好的选择,因为它保持一致。

rj@MHN00416AN01# set snmp engine-id local ***.**.244.245

{master:0}[edit]
rj@MHN00416AN01# commit
configuration check succeeds
commit complete

Juniper 也有一个关于更改引擎 ID 的注释,需要在它工作之前完成。这实际上意味着一旦你提交了一个新的引擎 ID,你还必须提交另一个用户名/密码。

注意: SNMPv3 身份验证和加密密钥是根据关联的密码和引擎 ID 生成的。如果您配置或更改引擎 ID,您必须在配置 SNMPv3 用户之前提交新的引擎 ID。否则,根据配置的密码生成的密钥基于先前的引擎 ID。引擎ID建议使用管理口的MAC地址。

引擎更改您需要将新用户提交到配置中这很重要,因为如果您不这样做,SNMPv3 用户将无法运行,尽管show snmp v3 users. 所以一定要定义新用户。

rj@MHN00416AN01# set snmp v3 usm local-engine user username 
  authentication-sha authentication-password PASS

{master:0}[edit]
rj@MHN00416AN01# set snmp v3 usm local-engine user username 
  privacy-aes128 privacy-password PASS

{master:0}[edit]
rj@MHN00416AN01# commit
configuration check succeeds
commit complete

改动前:

rj@MHN00416AN01# run show snmp v3

Local engine ID: 80 00 0a 4c 01 ** ** f4 f5
Engine boots:           1
Engine time:       421043 seconds
Max msg size:       65507 bytes

Engine ID: 80 00 0a 4c 04 31 33 <...snip...>
    User                            Auth/Priv   Storage      Status
    Username                         sha/aes128 nonvolatile  active

更改后:

Local engine ID: 80 00 0a 4c 04 31 33 <...snip...>   <---- previously Engine ID
Engine boots:           1
Engine time:       421110 seconds
Max msg size:       65507 bytes

Engine ID: local   <------ changed
    User                            Auth/Priv   Storage      Status
    Username                         sha/aes128 nonvolatile  active

这提供了更可靠的 SNMP 设置,不容易发生引擎 ID 更改和消除访问。瞻博网络确实建议您使用该use-mac-address选项而不是local engine-id-suffix. 此选项容易受到虚拟机箱设置中的问题的影响。如果备份路由引擎接管,则 SNMP 引擎 ID 将更改为me0新主节点接口。