TCP-Brücke zwischen 2 Schnittstellen für einen bestimmten Port (Zugriff auf den lokalen Host des Hosts von innerhalb einer VM)

TCP-Brücke zwischen 2 Schnittstellen für einen bestimmten Port (Zugriff auf den lokalen Host des Hosts von innerhalb einer VM)

Auf meinem Rechner läuft ein ADB-Daemon auf localhost:5037. Auf meinem Rechner läuft eine virtuelle Maschine. Nennen wir meinen Rechner Host und die virtuelle Maschine Gast.

Die Gast-VM verwendet die Schnittstelle des Hosts:

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

um eine Verbindung zum Internet herzustellen. Ich muss vom Gast aus auf den ADB-Server auf meinem Host zugreifen. Wenn ich nur 192.168.122.1vom Gast aus anrufe, funktioniert es nicht, da ADB auf dem Host an localhost:5037 und nicht an 192.168.122.1:5037 gebunden ist. Daher brauche ich eine Möglichkeit zum Zuordnen

192.168.122.1:5037 <-> localhost:5037

auf dem Hostcomputer in bidirektionaler Weise.

Wenn ich einfach eine Brücke zwischen allem hinzufüge, bringt das die Funktionsweise meiner VM durcheinander, da sie für die Verbindung mit dem Internet von dieser Schnittstelle abhängig ist.

Wie kann ich eine TCP-Brücke zwischen diesen beiden IPs erstellen? Ich habe gefundenhttp://tcpreplay.synfin.net/wiki/tcpbridgeaber es ist unklar, wie es funktioniert. Vielleicht kann iptables das Problem lösen?

AKTUALISIEREN:

wie in der Antwort empfohlen, habe ich Socat verwendet und jetzt funktioniert es:

#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

Antwort1

Wenn der ADB-DämonWirklichnur an die Loopback-Schnittstelle gebunden ist, dann wird es, egal welche Tricks Sie verwenden, nur auf Pakete reagieren, die von hostlokalen Anwendungen kommen, weil nur diese über Loopback geroutet werden.

Sehen Sie sich also zunächst die Konfiguration des ADB-Dämons an und prüfen Sie, ob Sie ihn dazu bringen können, die Bindung aufzuheben (dann reagiert er auf 192.168.122.1).

Als zweites sollten Sie überprüfen, wie Ihre VM konfiguriert ist. Viele VMs (Sie haben uns nicht gesagt, welche Art von VM Sie verwenden) ermöglichen dem Client die Verwendung der Host-Schnittstelleohne Zugriff auf den Host. Wenn dies der Fall ist, konfigurieren Sie Ihre VM neu und testen Sie, ob ping 192.168.122.1usw. im Client funktioniert.

Wenn nichts davon funktioniert, würde ich als Nächstes versuchen, es socatauf dem Host zum Weiterleiten von Paketen zu verwenden, da es dann für den ADB-Dämon wie eine lokale Anwendung aussieht.

verwandte Informationen