特定連接埠的 2 個介面之間的 TCP 橋接(從虛擬機器內部存取主機的本機主機)

特定連接埠的 2 個介面之間的 TCP 橋接(從虛擬機器內部存取主機的本機主機)

我的機器上的 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 綁定到 localhost:5037,而不是 192.168.122.1:5037,因此我需要一種方法來映射

192.168.122.1:5037 <-> localhost:5037

在主機上以雙向方式。

如果我只是在所有東西之間添加一個橋樑,那麼它會擾亂我的虛擬機器的工作方式,因為它依賴這個介面來連接到網路。

如何在這 2 個 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 惡魔的配置,看看是否無法使其刪除綁定(然後它會對 192.168.122.1 做出反應)。

要檢查的第二件事是您的虛擬機器的配置方式。許多虛擬機器(您沒有告訴我們您使用哪種虛擬機器)允許客戶端使用主機介面無法存取主機。如果是這種情況,請重新配置您的虛擬機,並測試ping 192.168.122.1等是否在客戶端中正常運作。

如果這些都不起作用,我接下來要嘗試的是socat在主機上使用來轉送封包,因為這樣對於 ADB 惡魔來說它看起來就像是本機應用程式。

相關內容