TCP-Bridge zwischen zwei Schnittstellen für einen bestimmten Port (Zugriff auf den localhost des Hosts von einer VM aus)

570
Guerlando OCs

Ich habe einen ADB-Daemon, der auf localhost ausgeführt wird: 5037 auf meinem Computer. Ich habe eine virtuelle Maschine auf meiner Maschine. Nennen wir meinen Rechnerhost und den virtuellen 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 

mit dem Internet verbinden. Ich muss auf den ADB-Server auf meinem Host von innen zugreifen. Wenn ich nur 192.168.122.1von innen anrufe, funktioniert es nicht, weil adb on host an localhost gebunden ist: 5037, nicht 192.168.122.1:5037. Daher brauche ich eine Möglichkeit, eine Zuordnung vorzunehmen

192.168.122.1:5037 <-> localhost:5037 

auf dem Host-Rechner bidirektional.

Wenn ich nur eine Brücke zwischen allem hinzufüge, wird die Funktionsweise meiner VM durcheinander gebracht, da es von dieser Schnittstelle abhängt, um eine Verbindung zum Internet herzustellen.

Wie kann ich eine TCP-Brücke zwischen diesen beiden IPs erstellen? Ich habe http://tcpreplay.synfin.net/wiki/tcpbridge gefunden, aber es ist unklar, wie es funktioniert. Vielleicht kann Iptables das 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 
0

1 Antwort auf die Frage

2
dirkt

Wenn der ADB-Dämon wirklich nur an die Loopback-Schnittstelle gebunden ist, wird er unabhängig von den verwendeten Tricks nur auf Pakete reagieren, die von lokalen Host-Anwendungen stammen, da nur diese über Loopback geroutet werden.

Als Erstes sollten Sie sich die Konfiguration des ADB-Dämons ansehen und feststellen, ob Sie die Bindung nicht löschen lassen können (dann reagiert es auf 192.168.122.1).

Als zweites müssen Sie überprüfen, wie Ihre VM konfiguriert ist. Bei vielen VMs (Sie haben uns nicht mitgeteilt, welche Art von VM Sie verwenden) kann der Client die Hostschnittstelle verwenden, ohne auf den Host zugreifen zu können . 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, socatPakete auf dem Host weiterzuleiten, da sie dann wie eine lokale Anwendung für den ADB-Dämon aussehen.

Danke, es hat funktioniert. Ich habe die Frage bearbeitet, um die Lösung anzuzeigen Guerlando OCs vor 6 Jahren 0