
やや珍しいネットワーク設定があります。それはインターネットのvpsで始まります。長年使ってきましたが、接続に問題はありませんでした。その上にip-networkstack-in-userspace(今から「MyIP」;すでにインターネット上の他の場所で実行されており、sipとhttpを提供しているので動作します。少なくとも基本的には十分だと言います)。
ここで、vpsのeth0を介して着信UDPポート161トラフィックを仮想ネットワークインターフェイスにリダイレクトしたいと思います。何らかの理由で一般的なiptablesルールは機能しません。 tcpdumpは仮想インターフェイスにトラフィックを表示せず、IPスタック(「MyIP」)には何も受信しないという指示があります(ARPも含む)。
internet -> vps[eth0, 37.34.63.177] -> vps[myip, 192.168.4.1] -> MyIP[myip, 192.168.4.2]
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 161 -j LOG --log-prefix "DNAT: " --log-level 0
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 161 -j DNAT --to 192.168.4.2:161
iptables -A FORWARD -d 192.168.4.2 -p udp --dport 161 -j LOG --log-prefix "FWD: " --log-level 0
iptables -A FORWARD -d 192.168.4.2 -p udp --dport 161 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --destination-port 161 -j ACCEPT
eth0でtcpdumpを実行すると、着信要求が表示されます。 「myip」ネットワークインタフェースのtcpdumpには何も表示されません。 dmesg には何もなく、iptables -t nat -L -n -v はインクリメントするカウンタを表示しません。
したがって、パケットを仮想ネットワークインターフェイス(VPNに影響を与える)に転送できないか、私のiptablesルールが正しくありません。誰にもアイデアがありますか?
(パケットは通常200バイト未満であるため、MTUの問題とは思わないでください。)
答え1
これは、壊れたルールをクリアし、INPUTチェーンのSSHルールを処理したと仮定します。
DNAT仕様は次のようにする必要があります。
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 161 -j LOG --log-prefix "DNAT: " --log-level 0
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 161 -j DNAT --to 192.168.4.2:161
FORWARDステートメントは次のようにする必要があります。
iptables -A FORWARD -d 37.34.63.177 -p udp --dport 161 -j LOG --log-prefix "FWD: " --log-level 0
iptables -A FORWARD -d 37.34.63.177 -p udp --dport 161 -j ACCEPT
最後に、戻りトラフィックを許可します。
iptables -A FORWARD -o eth0 -p udp -s 192.168.4.2 --sport 161 -m state --state RELATED,ESTABLISHED -j ACCEPT
DNATは動作するためにINPUT文を必要としません。