特定のポートの 2 つのインターフェース間の TCP ブリッジ (VM 内からホストのローカルホストにアクセスする)

特定のポートの 2 つのインターフェース間の TCP ブリッジ (VM 内からホストのローカルホストにアクセスする)

私のマシンの localhost:5037 で ADB デーモンが稼働しています。私のマシンでは仮想マシンが稼働しています。私のマシンをホスト、仮想マシンをゲストと呼びます。

ゲスト VM はホストのインターフェースを使用します。

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255

インターネットに接続するために、ゲストからホストのADBサーバーにアクセスする必要があります。ゲストから呼び出すだけでは192.168.122.1機能しません。ホストのadbは192.168.122.1:5037ではなくlocalhost:5037にバインドされているためです。そのため、マッピングする方法が必要です。

192.168.122.1:5037 <-> localhost:5037

ホストマシン上で双方向に。

すべての間にブリッジを追加すると、インターネットへの接続にこのインターフェースに依存するため、VM の動作が混乱します。

これら2つのIPの間にTCPブリッジを作成するにはどうすればいいでしょうか?http://tcpreplay.synfin.net/wiki/tcpbridgeしかし、それがどのように機能するかは不明です。おそらく iptables で解決できるでしょうか?

アップデート:

回答で推奨されているように、socat を使用しましたが、現在は動作します。

#on host machine:
socat tcp-listen:5037,bind=192.168.122.1,reuseaddr,fork tcp:localhost:5037

#on virtual machine:
socat tcp-listen:5037,bind=localhost,reuseaddr,fork tcp:192.168.122.1:5037

答え1

ADBデーモンが本当にループバック インターフェイスにのみバインドされている場合、どのようなトリックを使用しても、ホスト ローカル アプリケーションからのパケットのみがループバック経由でルーティングされるため、それらのパケットにのみ反応します。

したがって、最初に行うべきことは、ADB デーモンの構成を確認し、バインドをドロップできないかどうかを確認することです (そうすると、192.168.122.1 に反応します)。

2番目に確認すべきことは、VMがどのように構成されているかです。多くのVM(使用しているVMの種類は教えていただけませんでした)では、クライアントがホストインターフェイスを使用できるようにしています。ホストにアクセスできないその場合は、VM を再構成し、ping 192.168.122.1クライアントでなどが機能することをテストします。

これらすべてが機能しない場合は、次に試すのは、socatホスト上でパケットを転送することです。そうすると、ADB デーモンに対してローカル アプリケーションのように見えるようになります。

関連情報