アプリケーションを宛先とするTCP packetを受信し、ローカルネットワーク上の別の宛先に再送信する必要があります元のIPアドレスを保持)。
それはどのように行うことができますか、それともどれほど難しいですか?
私はJavaでシンプルなソケットを使用していて、Linux環境で実行しています。それがうまくいく場合は、コードでCライブラリを使用することを検討します。
ルーターやファイアウォールがこのようなTCP=パケットを傍受していることを知っています。これらはソースIPを変更しないと思います。
これはTProxy in Linuxで実現できますが、テストで非常に安定していたとは言えません。
私はそれをJava for [〜#〜] tcp [〜#〜]に実装しました、使用する必要がありました[〜#〜] jna [ 〜#〜]を実行するネイティブLinuxライブラリ呼び出し、およびラッピングJREソケットクラス(- この投稿に基づく 、追加の変更が行われます)。
要約すると、それらのステップは次のとおりです。
IPTablesファイアウォールモジュール構成。
ソースソケットのアドレスをコピーします。
どうやら this this inGolang のように、オンラインで多くの実装があるようです。
iptables -A PREROUTING -i eth0 -p tcp -m tcp -m multiport --dports 80 -j DNAT --to-destination 192.168.0.1
これでいいのかわかりませんが、ファイアウォールからWebサーバーに常にトラフィックを転送しています。
Webサーバーのログには、発信元のIPソースがあります。