Runbook: SNMPv3 user 認証 / 暗号化が失敗する¶
実行前提
SNMP user の削除 / 再作成 / password 変更は監視サーバ側の polling を一時的に失敗させる。事前に監視側で対象 user の alert を抑止し、変更前の SNMP_USER キー値を退避すること。ロールバックは退避値を sonic-db-cli hset で書き戻し、docker restart snmp で snmpd を再ロード。
症状¶
- snmpwalk が
Authentication failure (incorrect password, community or key) Timeout: No Response from <switch>(v3 でも community-like 失敗)- 一部 OID のみ
noSuchObject
想定原因(優先度順)¶
- auth/priv password 不一致: SHA / MD5 / AES / DES の組合せが client 側と異なる
- engineID の不整合: ホスト名変更 / image 入替で engineID が変わり、key が再導出されず polling 側 cache とずれる
- security level (
authNoPriv/authPriv) の食い違い - AgentX 経由の sub-agent (sonic-snmpagent) 未起動: 一部 OID のみ返らない
- ACL / firewall で UDP 161 がブロック
切り分け手順¶
flowchart TD
A[SNMPv3 認証失敗] --> B{user / authPriv 設定一致?}
B -- No --> B1[SNMP_USER の authProto/privProto 修正]
B -- Yes --> C{passphrase 長さ要件 OK?}
C -- No --> C1[8 文字以上に再設定]
C -- Yes --> D{engineID 一致?}
D -- No --> D1[snmpd の engineID 確認 / 再生成]
D -- Yes --> E[snmpd ログで authError を確認]
確認コマンド¶
1. user 設定¶
sonic-db-cli CONFIG_DB keys "SNMP_USER|*"
sonic-db-cli CONFIG_DB hgetall "SNMP_USER|<user>"
show snmp user
2. snmpd / sub-agent¶
- 期待:
snmpdとsonic_ax_impl両方が running
3. engineID¶
docker exec snmp grep -i engineID /etc/snmp/snmpd.conf
snmpget -v3 -u <user> -l authPriv -a SHA -A '<auth>' -x AES -X '<priv>' <switch> 1.3.6.1.2.1.1.1.0
4. wire レベル¶
5. ACL / firewall¶
対処方法¶
- パスワード再投入:
sudo config snmp user del <user>→sudo config snmp user add <user> ...(ロールバック: 退避値で再作成) - engineID 固定:
/etc/snmp/snmpd.confのengineIDを固定値に(再起動後も維持される) - sub-agent:
docker exec snmp supervisorctl restart snmp-subagent - ACL:
ACL_RULEで UDP/161 を許可
関連ページ¶
引用元¶
-
sonic-net/sonic-snmpagent @ master — main.py ↩
-
sonic-net/sonic-buildimage @ master — docker-snmp ↩