Tengo un demonio ADB ejecutándose en localhost:5037 en mi máquina. Tengo una máquina virtual ejecutándose en mi máquina. Llamemos a mi máquina host y a la virtual huésped.
La VM invitada utiliza la interfaz del host:
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
para conectarse a internet. Necesito acceder al servidor ADB en mi host desde el invitado interno. Si solo llamo 192.168.122.1
desde el huésped interno, no funciona porque adb en el host está vinculado a localhost:5037, no a 192.168.122.1:5037, por lo tanto, necesito una forma de mapear
192.168.122.1:5037 <-> localhost:5037
en la máquina host de forma bidireccional.
Si simplemente agrego un puente entre todo, afectará el funcionamiento de mi VM porque depende de esta interfaz para conectarse a Internet.
¿Cómo puedo crear un puente TCP entre estas 2 IP? encontréhttp://tcpreplay.synfin.net/wiki/tcpbridgepero no está claro cómo funciona. ¿Quizás iptables pueda resolver esto?
ACTUALIZAR:
como se recomienda en la respuesta, usé socat y ahora funciona:
#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
Respuesta1
Si el demonio ADB esen realidadsolo está vinculado a la interfaz de loopback, entonces no importa qué trucos use, solo reaccionará a los paquetes provenientes de aplicaciones locales del host, porque solo esos se enrutan a través de loopback.
Entonces, lo primero que debe hacer es observar la configuración del demonio ADB y ver si no puede hacer que elimine el enlace (entonces reaccionará a 192.168.122.1).
Lo segundo que debe verificar es cómo está configurada su VM. Muchas máquinas virtuales (no nos dijo qué tipo de máquina virtual usa) permiten que el cliente use la interfaz del hostsin poder acceder al host. Si ese es el caso, reconfigure su VM y pruebe que, ping 192.168.122.1
etc., funcione en el cliente.
Si nada de esto funciona, lo siguiente que intentaría es usarlo socat
en el host para reenviar paquetes, porque entonces parecerá una aplicación local para el demonio ADB.