iptables を使用して UDP パケットの宛先ポートを変更することは可能ですか?
162 ではなく 1620 でトラップを送信するように SNMP エージェントを取得しようとしています。残念ながら、これまでのところ、送信元ポートを変更することしかできませんでした。
iptables -t nat -A ポストルーティング -p udp --dport 162 -j SNAT --to :1620
送信先のマシンがわかっていると仮定します。
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
この使用法は明らかにサポートされていません。http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO.txtから取得:
6.3.7. ローカルで生成された接続の宛先の変更
NAT コードを使用すると、DNAT ルールを OUTPUT チェーンに挿入できますが、
これは 2.4 では完全にはサポートされていません (可能ですが、新しい
構成オプション、いくつかのテスト、およびかなりのコーディングが必要です。したがって、誰かが Rusty と契約しない限り、それを書くために、私はすぐにそれを期待していません)。
現在の制限は、宛先をローカル マシン (たとえば、「j DNAT --to 127.0.0.1」) にのみ変更できることです。他のマシンには変更できません。そうしないと、応答が正しく翻訳されません。
@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
基本的に、非常に単純な透過プロキシを作成する必要があります。