SNMP 功能使用指导

概述

本文档介绍 openUBMC SNMP (Simple Network Management Protocol) 功能的使用方法,包括 SNMP Agent 和 SNMP Trap 的配置与使用。SNMP 是一种用于管理网络设备的标准协议,通过 SNMP 可以实现对 BMC 设备的监控和管理。

认识 SNMP

SNMP 协议简介

SNMP (Simple Network Management Protocol) 是一种应用层协议,用于在网络设备之间交换管理信息。SNMP 采用管理站-代理模式,管理系统通过 SNMP 协议向被管理设备的 Agent 发送请求,获取设备状态或设置设备参数。

SNMP 架构

SNMP 架构包含以下组件:

  • 管理系统 - 运行网络管理软件的设备,用于监控和管理网络设备
  • SNMP Agent - 运行在被管理设备上的软件,响应管理系统的请求
  • MIB (Management Information Base) - 管理信息库,定义了设备可管理的信息结构
  • SNMP Trap - Agent 主动向管理系统发送的告警消息

SNMP 协议版本

openUBMC 支持以下 SNMP 协议版本:

  • SNMP v1 - 初始版本,基于团体名认证
  • SNMP v2C - 在 v1 基础上增加了批量数据获取功能
  • SNMP v3 - 增强了安全性,支持基于用户的认证和加密

openUBMC SNMP 功能

openUBMC 提供以下 SNMP 功能:

  • SNMP Agent - 响应管理系统的 Get、Set、GetNext、GetBulk 请求
  • SNMP Trap Bob - 支持 Bob 协议的 Trap 功能
  • 标准 MIB 支持 - 支持 RFC 标准定义的 MIB
  • 自定义 MIB - 支持厂商自定义的 MIB 扩展

SNMP Agent 使用

认识 SNMP Agent

SNMP Agent 是运行在 BMC 上的代理程序,负责响应管理系统的 SNMP 请求。Agent 可以提供设备的状态信息,接收管理系统的配置命令。

环境要求

  • 网络要求:管理系统和 BMC 网络互通
  • 权限要求:需要管理员权限配置 SNMP Agent
  • 软件要求:管理系统需要安装 SNMP 管理工具

配置 SNMP Agent

启用 SNMP Agent

通过 Redfish 接口启用 SNMP Agent:

bash
PATCH https://{bmc_ip}/redfish/v1/Managers/{ManagerId}/NetworkProtocol

请求体:

json
{
    "SNMP": {
        "ProtocolEnabled": true
    }
}

配置 SNMP 团体名

对于 SNMP v1 和 v2C,需要配置团体名进行认证:

bash
PATCH https://{bmc_ip}/redfish/v1/Managers/{ManagerId}/NetworkProtocol

请求体:

json
{
    "SNMP": {
        "ProtocolEnabled": true,
        "EnableSNMPv1": true,
        "EnableSNMPv2c": true,
        "CommunityStrings": [
            {
                "CommunityString": "PublicCommunity@123",
                "AccessMode": "Limited"
            },
            {
                "CommunityString": "PrivateCommunity@123",
                "AccessMode": "Full"
            }
        ]
    }
}

配置 SNMP v3 用户

对于 SNMP v3,需要配置用户信息:

bash
PATCH https://{bmc_ip}/redfish/v1/Managers/{ManagerId}/NetworkProtocol

请求体:

json
{
    "SNMP": {
        "ProtocolEnabled": true,
        "EnableSNMPv3": true
    }
}

配置用户信息:

bash
PATCH https://{bmc_ip}/redfish/v1/AccountService/Accounts/{AccountId}

请求体:

json
{
    "Password": "xxxxxxxx",
    "Oem": {
        "openUBMC": {
            "SnmpV3AuthProtocol": "SHA256",
            "SnmpV3PrivProtocol": "AES",
            "SnmpV3PrivPasswd": "xxxxxxxx"
        }
    }
}

查询 SNMP Agent 状态

bash
GET https://{bmc_ip}/redfish/v1/Managers/{ManagerId}/NetworkProtocol

响应示例:

json
{
    "@odata.context": "/redfish/v1/$metadata#ManagerNetworkProtocol.ManagerNetworkProtocol",
    "@odata.id": "/redfish/v1/Managers/1/NetworkProtocol",
    "@odata.type": "#ManagerNetworkProtocol.v1_9_0.ManagerNetworkProtocol",
    "Name": "Manager Network Protocol",
    "Id": "NetworkProtocol",
    ...
    "SNMP": {
        "EnableSNMPv1": true,
        "EnableSNMPv2c": true,
        "EnableSNMPv3": true,
        "CommunityStrings": [
            {
                "AccessMode": "Limited",
                "CommunityString": "PublicCommunity@123"
            },
            {
                "AccessMode": "Full",
                "CommunityString": "PrivateCommunity@123"
            }
        ],
        "HideCommunityStrings": false,
        "ProtocolEnabled": true,
        "Port": 161
    },
    ...
}

使用 SNMP 管理工具

使用 snmpget 获取设备信息

获取系统描述:

bash
snmpget -v1 -c PublicCommunity@123 {bmc_ip} 1.3.6.1.2.1.1.1.0

获取设备联系人:

bash
snmpget -v2c -c PublicCommunity@123 {bmc_ip} 1.3.6.1.2.1.1.4.0

使用 snmpwalk 遍历 MIB 树

遍历系统 MIB:

bash
snmpwalk -v1 -c PublicCommunity@123 {bmc_ip} 1.3.6.1.2.1

遍历接口 MIB:

bash
snmpwalk -v2c -c PublicCommunity@123 {bmc_ip} 1.3.6.1.2.1.2

使用 SNMP v3 认证

使用 SNMP v3 获取信息:

bash
snmpget -v3 -u snmpadmin -a SHA256 -A authpass123 -x AES -X privpass123 -l authPriv {bmc_ip} 1.3.6.1.2.1.1.1.0

结果验证

执行 snmpget 命令后,应返回对应的 OID 值:

text
SNMPv2-MIB::sysDescr.0 = STRING: openUBMC BMC System

如果返回错误信息,请检查:

  • SNMP Agent 是否启用
  • 团体名或用户名是否正确
  • 网络连接是否正常
  • 防火墙规则是否允许 SNMP 通信

SNMP Trap 使用

认识 SNMP Trap

SNMP Trap 是 Agent 主动向管理系统发送的事件通知。当设备发生特定事件(如设备告警、状态变化)时,Agent 会向预先配置的 Trap 接收器发送 Trap 消息。

环境要求

  • 网络要求:Trap 接收器和 BMC 网络互通
  • 权限要求:需要管理员权限配置 Trap
  • 软件要求:Trap 接收器需要运行 SNMP Trap 监听服务

配置 SNMP Trap

启用 SNMP Trap 功能

通过 Redfish 接口启用 SNMP Trap:

bash
PATCH https://{bmc_ip}/redfish/v1/Managers/{ManagerId}/SnmpService

请求体:

json
{
    "SnmpTrapNotification": {
        "ServiceEnabled": true,
        "TrapVersion": "V2C",
        "TrapV3User": "admin",
        "TrapServerIdentity": "ProductAssetTag",
        "CommunityName": "PrivateCommunity@123",
        "AlarmSeverity": "Major",
        "TrapMode": "PreciseAlarm"
    }
}

配置 Trap 接收器

配置 Trap 目标地址:

bash
PATCH https://{bmc_ip}/redfish/v1/Managers/{ManagerId}/SnmpService

请求体:

json
{
    "SnmpTrapNotification": {
        "TrapServer": [
            {
                "BobEnabled": false,
                "Enabled": true,
                "TrapServerAddress": "192.168.2.200",
                "TrapServerPort": 162
            }
        ]
    }
}

设置 Trap 接收器

使用 MIB Browser 接收 Trap

详细使用方法请参考《MIB Browser 工具使用指导》文档。

常见问题

SNMP Agent 无法连接

症状:执行 snmpget 命令超时或无响应

可能原因

  1. SNMP Agent 未启用
  2. 网络连接不通
  3. 防火墙阻止 SNMP 端口

解决方法

  1. 检查 SNMP Agent 状态
  2. 检查网络连通性:ping {bmc_ip}
  3. 检查防火墙规则,确保端口 161 开放
  4. 检查团体名是否正确

SNMP 认证失败

症状:返回 "Authentication failure" 错误

可能原因

  1. 团体名不正确
  2. 用户名或密码不正确(SNMP v3)
  3. 认证协议配置不一致

解决方法

  1. 确认团体名或用户名密码正确
  2. 检查认证协议和加密协议配置
  3. 确认管理系统和 Agent 的协议配置一致

Trap 消息未接收

症状:Trap 接收器没有收到 Trap 消息

可能原因

  1. Trap 功能未启用
  2. Trap 目标地址配置错误
  3. 网络连接问题
  4. Trap 接收器服务未运行

解决方法

  1. 检查 SNMP Trap 是否启用
  2. 检查 Trap 目标地址和端口配置
  3. 检查网络连通性
  4. 检查 Trap 接收器服务状态

MIB 文件加载失败

症状:SNMP 命令返回数字 OID,无法解析为名称

可能原因

  1. MIB 文件未安装
  2. MIB 文件路径配置错误
  3. MIB 文件损坏

解决方法

  1. 安装 openUBMC 提供的 MIB 文件
  2. 配置 MIB 文件路径
  3. 重新下载 MIB 文件

SNMP v3 配置复杂

症状:SNMP v3 配置容易出错

可能原因

  1. 认证参数配置错误
  2. 加密参数配置错误
  3. 安全级别配置不匹配

解决方法

  1. 仔细检查用户名、密码配置
  2. 确认认证协议和加密协议一致
  3. 使用配置工具或管理界面简化配置

附录

参考资料

  • SNMP 协议标准:RFC 1157 (SNMPv1)、RFC 1901 (SNMPv2C)、RFC 3414 (SNMPv3)
  • openUBMC 官网:https://www.openubmc.cn/