質問
iptablesを使用してUDPパケットの宛先ポートを変更することは可能ですか?
SNMPエージェントを取得して、162ではなく1620にトラップを送信しようとしています。残念ながら、これまでのところ、ソースポートを変更することしかできませんでした。
iptables -t nat -Aポストルーティング-p udp --dport 162 -j SNAT --to:1620
解決
この使用法は明らかにサポートされていません。 http://www.netfilter.org/documentation/HOWTO/NAT-から取得HOWTO.txt :
6.3.7。ローカルで生成された接続の宛先の変更
NATコードを使用すると、 OUTPUTチェーンのDNATルール、ただし
これは2.4では完全にはサポートされていません(それは 可能ですが、新しい
が必要です 設定オプション、いくつかのテスト、 かなりのコーディングが必要です 誰かがそれを書くためにラスティと契約する、私 すぐには期待しません)。現在の制限は、 宛先を
にのみ変更できます ローカルマシン(例: `j DNAT --to 127.0.0.1 ')、他のマシンではなく、そうでない場合、応答はありません 正しく翻訳されます。
他のヒント
送信先のマシンを知っていると仮定すると:
iptables -t nat -A OUTPUT -p udp --dport 162 -j DNAT --to-destination <dest-ip>:1620
162を1620にリダイレクトできます
iptables -t nat -A PREROUTING -p UDP --dport 162 -j REDIRECT --to-port 1620
@PiedPiperは正しかった。 DNATでは、IPアドレスを指定する必要がありますが、ポートのリダイレクトのみを行うため、この場合-j REDIRECTが機能する可能性があります。
http://www.netfilterを参照.org / documentation / HOWTO // NAT-HOWTO-6.html#ss6.2
SNATを作成する代わりに、DNATを試してください。 SNATはSourceNATを意味するため、ソースポートが変更されるため、DNATが機能します。
迂回ルールを設定し、変更されたポートでパケットを再注入できます。
これはMac OS Xでしばらく前に行ったことがありますが、Linuxでも同じ原理です。 http://blog.dv8。 ro / 2006/08 / using-divert-sockets-on-mac-os-x.html
基本的には、非常に単純な透過プロキシを作成する必要があります。