web-dev-qa-db-ja.com

TCPパケットを受信して​​、送信元IPアドレスを保持しているローカルネットワーク上の別のIPに再送信するのはどれほど難しいですか?

アプリケーションを宛先とするTCP packetを受信し、ローカルネットワーク上の別の宛先に再送信する必要があります元のIPアドレスを保持)

それはどのように行うことができますか、それともどれほど難しいですか?

私はJavaでシンプルなソケットを使用していて、Linux環境で実行しています。それがうまくいく場合は、コードでCライブラリを使用することを検討します。

ルーターやファイアウォールがこのようなTCP=パケットを傍受していることを知っています。これらはソースIPを変更しないと思います。

3

これはTProxy in Linuxで実現できますが、テストで非常に安定していたとは言えません。

私はそれをJava for [〜#〜] tcp [〜#〜]に実装しました、使用する必要がありました[〜#〜] jna [ 〜#〜]を実行するネイティブLinuxライブラリ呼び出し、およびラッピングJREソケットクラス(- この投稿に基づく 、追加の変更が行われます)。

要約すると、それらのステップは次のとおりです。

  • IPTablesファイアウォールモジュール構成。

  • ソースソケットのアドレスをコピーします。

  • クライアントソケットがTProxyモジュールを使用するための、IP_TRANSPARENTオプションを指定したsetsockoptへのネイティブライブラリ呼び出し。
  • 発信ソケットに発信元アドレスを設定します

どうやら this this inGolang のように、オンラインで多くの実装があるようです。

1
iptables -A PREROUTING -i eth0 -p tcp -m tcp -m multiport --dports 80 -j DNAT --to-destination 192.168.0.1

これでいいのかわかりませんが、ファイアウォールからWebサーバーに常にトラフィックを転送しています。

Webサーバーのログには、発信元のIPソースがあります。

0
cybernard