Puente TCP entre 2 interfaces para un puerto específico (accediendo al host local del host desde dentro de una VM)

Puente TCP entre 2 interfaces para un puerto específico (accediendo al host local del host desde dentro de una VM)

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.1desde 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.1etc., funcione en el cliente.

Si nada de esto funciona, lo siguiente que intentaría es usarlo socaten el host para reenviar paquetes, porque entonces parecerá una aplicación local para el demonio ADB.

información relacionada