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

486
Guerlando OCs

У меня есть демон 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 
0

1 ответ на вопрос

2
dirkt

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

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

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

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

Спасибо, это сработало. Я отредактировал вопрос, чтобы показать решение Guerlando OCs 6 лет назад 0