![如何有选择地使用 Net-SNMP 的多个接口?](https://linux22.com/image/654099/%E5%A6%82%E4%BD%95%E6%9C%89%E9%80%89%E6%8B%A9%E5%9C%B0%E4%BD%BF%E7%94%A8%20Net-SNMP%20%E7%9A%84%E5%A4%9A%E4%B8%AA%E6%8E%A5%E5%8F%A3%EF%BC%9F.png)
我有此 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 文件并修改原始文件 - 测试 - 享受。