У меня есть демон 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 это будет выглядеть как локальное приложение.