У меня есть демон 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 между этими 2 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 ответ1

2

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .