TCP-мост между 2 интерфейсами для определенного порта (доступ к локальному хосту хоста изнутри виртуальной машины)

TCP-мост между 2 интерфейсами для определенного порта (доступ к локальному хосту хоста изнутри виртуальной машины)

У меня есть демон ADB, работающий на localhost:5037 на моей машине. У меня есть виртуальная машина, работающая на моей машине. Давайте назовем мою машину хостом, а виртуальную — гостем.

Гостевая виртуальная машина использует интерфейс хоста:

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

для подключения к интернету. Мне нужно получить доступ к серверу ADB на моем хосте изнутри гостя. Если я просто вызову 192.168.122.1изнутри гостя, это не сработает, потому что adb на хосте привязан к localhost:5037, а не к 192.168.122.1:5037, поэтому мне нужен способ сопоставить

192.168.122.1:5037 <-> localhost:5037

на хост-машине в двунаправленном режиме.

Если я просто добавлю мост между всем этим, то это нарушит работу моей виртуальной машины, поскольку она зависит от этого интерфейса для подключения к Интернету.

Как мне создать TCP-мост между этими двумя IP? Я нашелhttp://tcpreplay.synfin.net/wiki/tcpbridgeно непонятно как это работает. Может iptables может решить это?

ОБНОВЛЯТЬ:

как рекомендовано в ответе, я использовал socat и теперь это работает:

#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

решение1

Если демон ADBДействительнопривязан только к интерфейсу loopback, то, какие бы трюки вы ни использовали, он будет реагировать только на пакеты, поступающие от локальных приложений хоста, поскольку только они маршрутизируются через loopback.

Поэтому первое, что нужно сделать, это посмотреть конфигурацию демона ADB и посмотреть, нельзя ли заставить его сбросить привязку (тогда он будет реагировать на 192.168.122.1).

Второе, что нужно проверить, это как настроена ваша виртуальная машина. Многие виртуальные машины (вы не сказали нам, какой тип виртуальной машины вы используете) позволяют клиенту использовать интерфейс хостабез возможности доступа к хостуЕсли это так, перенастройте свою виртуальную машину и проверьте, как ping 192.168.122.1все работает на клиенте.

Если ничего из этого не сработает, то следующим шагом я попробую использовать socatхост для пересылки пакетов, поскольку тогда для демона ADB это будет выглядеть как локальное приложение.

Связанный контент