ルーターにSNMPを設定して、オフサイトサーバー上の既存のNagiosインストールからルーターを監視できるようにしようとしています。いくつかの異なるiptablesルールを試したにもかかわらず、ルーターがWANからのSNMP要求に応答するのに問題があります。ルーターは新しいASUSRT-AC66Uで、AsusWRT 3.0.0.4.270.26(Merlinビルド)を実行しています。
私はごく最近、残念ながらISPとしてComcastに切り替えることを余儀なくされました。彼らは、ネットワーク全体でポート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に置き換えることはできませんでした。エラーメッセージ(応答なし)は、何を試しても一貫しています。
私の2番目の試みは、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を実行すると、数秒以内にWi-Fiが起動するようで、ルーターに接続して実行する機会がありませんでした。まだそこにあります(私がそうするとき、更新で編集します)。
ルールが表示されるため、スクリプトは機能しているようです。問題はルールにあると思われますが、それを特定するのに苦労しており、ファームウェアメッセージボードでまだ応答を取得していません。
[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