linux配置snmp获取路由状态需启用ip-mib、确认iproutetable oid(.1.3.6.1.2.1.4.21)可访问、配置view all包含全oid树、授权访问权限,并验证snmpd对/proc/net/route有读取权限。

Linux中配置SNMP以获取路由状态,核心在于启用IP-MIB(特别是IPv4/IPv6路由表相关OID)并确保snmpd能访问内核路由信息。默认安装的snmpd通常已内置基础IP-MIB支持,但需显式启用、验证权限,并配合正确查询方式。
确认IP-MIB模块已加载
net-snmp 默认编译时已包含 ip-mib 模块,但部分精简版或旧版本可能未启用。检查当前代理是否支持路由相关OID:
- 运行
snmpwalk -v2c -c mysecurekey -On localhost .1.3.6.1.2.1.4.21(ipRouteTable OID),若返回大量.1.3.6.1.2.1.4.21.1.x.y.z条目,说明路由表已可读 - 若提示
No Such Object或超时,需确认 snmpd 是否加载了ip-mib:查看/etc/snmp/snmpd.conf中是否有dlmod ip-mib /usr/lib/snmp/mibs/ip-mib.so(路径依发行版而异);现代 net-snmp 一般自动加载,无需手动配置
调整访问控制与MIB视图范围
即使模块就绪,若配置中限制了MIB子树访问,路由信息仍不可见。确保 snmpd.conf 包含:
- 定义完整视图:
view all included .1(覆盖整个OID树,包括.1.3.6.1.2.1.4下的IP-MIB) - 将该视图授权给只读组:
access notConfigGroup "" any noauth exact all none none - 避免仅开放
systemonly或internet等窄视图,它们不包含路由表
验证本地路由表可被SNMP读取
snmpd 依赖 /proc/net/route(IPv4)和 /proc/net/ipv6_route(IPv6)获取数据。需确认:
- 文件存在且可读:
sudo -u Debian-snmp cat /proc/net/route(Debian/Ubuntu)或sudo -u snmp cat /proc/net/route(RHEL/CentOS);若报错“Permission denied”,说明snmpd用户无权读取/proc接口 - 解决权限问题:在
snmpd.conf中添加agentAddress udp:127.0.0.1:161并确保服务以足够权限运行;多数发行版默认用snmp用户启动,该用户通常已有必要权限;如遇问题,可临时测试用sudo systemctl edit snmpd添加[Service] User=root(仅调试,勿用于生产)
使用标准OID查询路由条目
常用路由相关OID及其含义:
-
.1.3.6.1.2.1.4.21.1.1(ipRouteDest):目标网络地址(十六进制格式,如0100000A表示 10.0.0.1) -
.1.3.6.1.2.1.4.21.1.7(ipRouteNextHop):下一跳地址 -
.1.3.6.1.2.1.4.21.1.8(ipRouteType):路由类型(3=direct, 4=indirect) -
.1.3.6.1.2.1.4.21.1.9(ipRouteProto):协议来源(2=local, 8=static, 16=bgp等) - 实际查询示例:
snmpwalk -v2c -c mysecurekey localhost .1.3.6.1.2.1.4.21.1.1











