Ponte TCP entre 2 interfaces para porta específica (acessando o host local do host de dentro de uma VM)

0

Eu tenho um daemon do ADB em execução no localhost: 5037 na minha máquina. Eu tenho uma máquina virtual em execução na minha máquina. Vamos chamar meu host de máquina e o convidado virtual.

A VM convidada usa a interface do 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 se conectar à internet. Eu preciso acessar o servidor ADB no meu host de dentro do convidado. Se eu apenas chamar 192.168.122.1 do convidado interno, isso não funciona porque o adb no host está ligado ao localhost: 5037, não 192.168.122.1:5037, portanto, preciso de uma maneira de mapear

192.168.122.1:5037 <-> localhost:5037

na máquina host de maneira bidirecional.

Se eu simplesmente adicionar uma ponte entre tudo, isso vai bagunçar a maneira como minha VM funciona, porque depende dessa interface conectar-se à internet.

Como posso criar uma ponte TCP entre esses dois IPs? Eu encontrei o link , mas não está claro como ele funciona. Talvez o iptables possa resolver isso?

ATUALIZAÇÃO:

como recomendado na resposta, usei socat e agora 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
    
por Guerlando OCs 05.03.2018 / 00:58

1 resposta

2

Se o demônio ADB é realmente vinculado apenas à interface de loopback, não importa quais truques você usa, ele só reagirá aos pacotes vindos de aplicativos locais, porque somente eles são roteados via loopback.

Então, a primeira coisa a fazer é olhar a configuração do demônio ADB, e ver se você não pode fazê-lo soltar a ligação (então ele reagirá a 192.168.122.1).

A segunda coisa a verificar é como sua VM está configurada. Muitas VMs (você não nos contou qual tipo de VM você usa) permitem que o cliente use a interface do host sem poder acessar o host . Se for esse o caso, reconfigure sua VM e teste se ping 192.168.122.1 etc. funciona no cliente.

Se nada disso funcionar, a próxima coisa que eu tentarei é usar socat no host para encaminhar pacotes, porque então ele parecerá um aplicativo local para o demônio ADB.

    
por 06.03.2018 / 13:02