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