web-dev-qa-db-ja.com

iptablesを使用して宛先ポートを変更する

Iptablesを使用してUDPパケットの宛先ポートを変更することは可能ですか?

162ではなく1620でトラップを送信するようにSNMPエージェントを取得しようとしています。残念ながら、これまでのところ、送信元ポートを変更することしかできませんでした。

iptables -t nat -A POSTROUTING -p udp --dport 162 -j SNAT --to:1620

19
Kristof Provost

この使用法は明らかにサポートされていません。 http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO.txt から取得:

6.3.7。ローカルで生成された接続の宛先の変更

NATコードを使用すると、OUTPUTチェーンにDNATルールを挿入できますが、
これは2.4では完全にはサポートされていません(サポートは可能ですが、新しい
構成オプション、いくつかのテスト、そしてかなりのコーディングなので、誰かがRustyにそれを書くように契約しない限り、私はすぐにそれを期待しません)。

現在の制限は、宛先のみを変更できることです
他のマシンではなく、ローカルマシン(たとえば、「j DNAT --to 127.0.0.1」)。そうしないと、応答が正しく翻訳されません。

5
Adam Liss

162を1620にリダイレクトできます

iptables -t nat -A PREROUTING -p UDP --dport 162 -j REDIRECT --to-port 1620
6
hazard1yard

送信先のマシンがわかっていると仮定します。

iptables -t nat -A OUTPUT -p udp --dport 162 -j DNAT --to-destination <dest-ip>:1620
5
PiedPiper

@PiedPiperは正しかった。 DNATではIPアドレスを指定する必要がありますが、ポートリダイレクションのみを実行するため、この場合は-j REDIRECTが機能します。

http://www.netfilter.org/documentation/HOWTO//NAT-HOWTO-6.html#ss6.2 を参照してください

1
azkotoki

宛先変更ルールを設定してから、変更されたポートでパケットを再注入できます。

私はこれをMac OS Xでしばらくしてから行いましたが、Linuxでも同じ原則です http://blog.dv8.ro/2006/08/using-divert-sockets-on-mac-os- x.html

基本的に、非常に単純な透過プロキシを作成する必要があります。

0
diciu