如何有选择地使用 Net-SNMP 的多个接口?

如何有选择地使用 Net-SNMP 的多个接口?

我有此 Net-SNMP 5.7.2.1 监控网络设置,用于监听家庭网关上的多个以太网接口,但它只能从以下组合中获取snmpd配置文件配置文件:

  • 单个 IP 地址
  • 单一 IP 地址,特定于协议
  • 每个唯一协议的单个 IP 地址

例如:

agentAddress  127.0.0.1:161

或者

agentAddress  udp:127.0.0.1:161

或者

agentAddress  udp:127.0.0.1:161,udp6:[::1],tcp:127.0.0.1:161


但它不会接受使用相同协议的多个 IP 地址,如下所示:

agentAddress  udp:127.0.0.1:161,udp:172.28.130.1:161

如何制作 SNMP 守护进程(snmpd)监听两个(或更多)以太网接口

答案1

在对 NetSNMP 代码进行深入研究之后,它似乎逐行处理配置文件,并且如果发现某些内容,则将其附加到代理地址数据中。

因此,您可以在配置文件中添加包含多个代理地址的多行:

agentAddress  udp:127.0.0.1:29032
agentAddress  udp:127.0.0.1:22032

我能够在使用 NetSNMP 构建的自己的代理上对此进行测试...

$ snmpget -v3 -u myUser -l noAuthNoPriv 127.0.0.1:22032 1.3.6.1.4.1.1234.1.1.1
SNMPv2-SMI::enterprises.1234.1.1.1 = INTEGER: 2

$ snmpget -v3 -u myUser -l noAuthNoPriv 127.0.0.1:29032 1.3.6.1.4.1.1234.1.1.1
SNMPv2-SMI::enterprises.1234.1.1.1 = INTEGER: 2

答案2

显然,对于 Net-SNMP 5.7.2.1 版本,指定多个接口的唯一方法是在命令行中指定多个 IP 地址snmpd

我还没有找到使用 snmpd 配置指定多个接口的可行解决方案(snmpd配置文件) 文件方法。

# /usr/sbin/snmpd 127.0.0.1 192.168.1.1

您可以在那里(在命令行)指定协议粒度(并继续在多个接口上使用相同的协议),如下所示:

# /usr/sbin/snmpd .... udp:127.0.0.1 udp:192.168.1.135:161 udp6:[::1]:161

答案3

我建议您可以修改 systemd 脚本,而不是在命令行上手动执行。

例如,当前位于 /usr/lib/systemd/system/ 的 snmpd.service 包含以下内容:

[Unit]
Description=Simple Network Management Protocol (SNMP) Daemon.
After=syslog.target network.target

[Service]
Type=notify
Environment=OPTIONS="-LS0-6d"
EnvironmentFile=-/etc/sysconfig/snmpd
ExecStart=/usr/sbin/snmpd $OPTIONS -f
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

只需将“ExecStart”行更改为包含您想要的内容。

例如

ExecStart=/usr/sbin/snmpd $OPTIONS -f udp:127.0.0.1 udp:192.168.1.135:161 udp6:[::1]:161

注意:我还没有测试过这种格式,可能需要用不同的方式,在末尾加上“-f”之类的东西 - 测试并调整。按理说它应该可以工作,然后您就可以享受使用 systemd 的所有优势(无论如何它都在被使用)。

此平台代码片段来自 CentOS 7.3,因此 snmpd.service 的位置可能因发行版而异。找到您的发行版,将其复制到 .bak 文件并修改原始文件 - 测试 - 享受。

相关内容