snmpd.conf clientaddr 无法使用给定的 IP 源地址发送陷阱/通知

snmpd.conf clientaddr not working for sending trap /inform with given IP source address

鉴于以下 sample/simple snmpd.conf(RHEL 7.4 上的 Net-SNMP 5.7.2)

rwcommunity private 192.168.56.101

trapsess -Ci --clientaddr=192.168.56.128 -v 2c -c private 192.168.56.101:162

启动 SNMP 守护程序时

snmpd -f -Lo -D -C -c data/snmpd_test.conf udp:192.168.56.128:161

我们获取''Start Up'' InformRequest with IP source 192.56.168.1 而不是 ...128(下面的 WireShark 快照)

这并不奇怪,因为 -D 选项允许我们输出调试信息说

trace: netsnmp_config_process_memory_list(): read_config.c, 696: read_config:mem: processing memory: clientaddr 192.168.56.128 trace: run_config_handler(): read_config.c, 562: 9:read_config:parser: clientaddr handler not registered for this time

但是网络资源说:

snmp.conf

...snmpd 在生成通知时也使用此值。

snmpd.conf

陷阱[SNMPCMD_ARGS]主机 提供更通用的机制来定义通知目的地。 SNMPCMD_ARGS 应该是等效项所需的命令行选项 snmptrap(或 snmpinform)命令发送所需的通知

我还读了一些旧线程,例如 this one

所以我的问题是:这是文档错误、错误还是对 Net-SNMP 堆栈的误用?

经过长时间的斗争,我可能会有一个答案,我写了一个简短的笔记,因为我刚找到一个窍门

It seems that clientaddr is not parsed correctly wherever in the snmpd.conf

(我试过不也在trapsess行里面)

But it seems to be a valid option in the command line of snmpd

好像它是 snmptrap 命令行中的一个有效选项。所以我假设两者可能是相同的解析机制。

a condition also is that the IP addres must be valid one

这意味着

snmpd -f -Lo -D -C -c data/snmpd_test.conf --clientaddr=192.168.56.128 udp:192.168.56.128:161

似乎完全解决了我的问题。

我会进行更多测试,如果格式准确,这个答案会好一点,但这似乎是一个很好的提示。