특정 포트에 대한 2개의 인터페이스 사이의 TCP 브리지(VM 내부에서 호스트의 로컬 호스트에 액세스)

특정 포트에 대한 2개의 인터페이스 사이의 TCP 브리지(VM 내부에서 호스트의 로컬 호스트에 액세스)

내 컴퓨터의 localhost:5037에서 ADB 데몬이 실행되고 있습니다. 내 컴퓨터에서 가상 컴퓨터가 실행되고 있습니다. 내 컴퓨터 호스트와 가상 게스트를 호출해 보겠습니다.

게스트 VM은 호스트의 인터페이스를 사용합니다.

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가 192.168.122.1:5037이 아닌 localhost:5037에 바인딩되어 있으므로 작동하지 않으므로 매핑할 방법이 필요합니다.

192.168.122.1:5037 <-> localhost:5037

호스트 시스템에서 양방향 방식으로.

모든 것 사이에 브리지를 추가하면 VM이 인터넷에 연결하기 위해 이 인터페이스에 의존하기 때문에 VM 작동 방식이 엉망이 될 것입니다.

이 두 IP 사이에 TCP 브리지를 어떻게 만들 수 있습니까? 나는 찾았다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 악마가정말루프백 인터페이스에만 바인딩되어 있으면 어떤 트릭을 사용하더라도 호스트 로컬 응용 프로그램에서 들어오는 패킷에만 반응합니다. 왜냐하면 해당 패킷만 루프백을 통해 라우팅되기 때문입니다.

따라서 가장 먼저 해야 할 일은 ADB 악마의 구성을 살펴보고 바인딩을 삭제하도록 할 수 없는지 확인하는 것입니다(그러면 192.168.122.1에 반응합니다).

두 번째로 확인해야 할 것은 VM이 어떻게 구성되어 있는지입니다. 많은 VM(어떤 종류의 VM을 사용하는지 알려주지 않음)에서 클라이언트가 호스트 인터페이스를 사용할 수 있습니다.호스트에 접근하지 못한 채. 이 경우 VM을 재구성하고 ping 192.168.122.1클라이언트에서 작동하는지 테스트하십시오.

이 방법 중 어느 것도 작동하지 않으면 다음으로 시도할 것은 socat호스트에서 패킷을 전달하는 것입니다. 그러면 ADB 악마에 대한 로컬 응용 프로그램처럼 보일 것이기 때문입니다.

관련 정보