我正在尝试为路由器设置 SNMP,以便可以从场外服务器上现有的 Nagios 安装来监视它。尽管尝试了一些不同的 iptables 规则,但我还是无法让路由器响应来自 WAN 的 SNMP 请求。该路由器是新的华硕 RT-AC66U,运行 AsusWRT 3.0.0.4.270.26(Merlin 版本)。
不幸的是,我最近被迫切换到康卡斯特作为 ISP,他们说他们阻止了网络上的端口 161 和 162。鉴于此,我正在尝试将 1610 重定向到 161。我目前为我的 NAS 设置了端口转发,1611->161,并且 SNMP 在那里工作得很好。
我尝试的第一件事是设置从 1610->127.0.0.1:161 (UDP) 的端口转发规则,但这似乎不起作用:
[ssube@centos-server ~]$ snmpwalk -v 2c -c [name] [ip]:1610
Timeout: No Response from [ip]:1610
[ssube@centos-server ~]$ snmpwalk -v 2c -c [name] [ip]:1611
SNMPv2-MIB::sysDescr.0 = STRING: Linux Triton 2.6.32.12 #2668 Tue Dec 11 12:36:30 CST 2012 armv5tel
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
NAS 规则运行良好,如上所示。删除 NAS 规则并将所有路由器规则中的 1610 替换为 1611 似乎没有帮助。无论我尝试什么,错误消息(无响应)都是一致的。
我的第二次尝试是检查 iptables 本身。我制定了以下规则:
boss@RT-AC66U:/jffs/scripts# cat firewall-start
#!/bin/sh
iptables -I INPUT 1 -p udp --dport 1610 -j ACCEPT
boss@RT-AC66U:/jffs/scripts# cat nat-start
#!/bin/sh
iptables -t nat -A PREROUTING -p udp --dport 1610 -j REDIRECT --to-port 161
从 LAN 内部,我可以很好地看到路由器:
ssube@KRAKEN /c/Program Files/ConEmu > snmpwalk -v 2c -c [name] 192.168.1.1:1610
SNMPv2-MIB::sysDescr.0 = STRING: Linux RT-AC66U 2.6.22.19 #1 Sun Mar 17 17:16:27 EDT 2013 mips
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
但是,无论有或没有 INPUT 链规则,我仍然无法从 LAN 外部看到它。这两条规则都出现在 iptables 中:
boss@RT-AC66U:/tmp/home/root# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
.....
ACCEPT udp -- anywhere anywhere udp dpt:1610
(在任何 DROP 规则之前列出,在一些不相关的 ACCEPT 之后)
boss@RT-AC66U:/jffs/scripts# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
VSERVER all -- anywhere [ip].comcast.net
REDIRECT udp -- anywhere anywhere udp dpt:1610 redir ports 161
不过,外部 SNMP 的情况依然不佳。我已经尝试过 tcpdump 来查看数据包是否完全进入,但是在路由器上运行 tcpdump 似乎会在几秒钟内将我从 wifi 中踢出,而且我还没有机会插入路由器并运行它还在那里(当我这样做时将进行更新编辑)。
由于规则出现,脚本似乎有效。我怀疑问题出在规则上,但我很难确定它,并且尚未在固件留言板上得到答复。
答案1
似乎您只是尝试将 [WAN IP]:1610 直接端口转发到 [LAN IP]:161。这 3 条规则应该可以实现这一点:
# forwards port 1610 -> 611
$ iptables -t nat -A PREROUTING -p tcp -d [LAN IP] --dport 1610 -j DNAT --to [LAN IP]:611
笔记: [LAN IP]
将是您的内部服务器的 IP 地址。
# Allow 1610 traffic
iptables -A INPUT -i eth0 -p tcp --dport 1610 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 1610 -m state --state ESTABLISHED -j ACCEPT