如何从另一台计算机与 Linux 上的 Tap 设备通信

如何从另一台计算机与 Linux 上的 Tap 设备通信

我在 Mac 上的 VMware Fusion 上运行 Linux。在 Linux 上,我使用基于 TAP 设备的 TCP 回显服务器(称为 PicoTCP,链接如下:https://github.com/tass-belgium/picotcp)。我使用以下命令运行 echo 服务器:sudo ./build/test/picoapp.elf --tap tap1:192.168.13.37:255.255.255.0 --app tcpecho:8000在一个终端窗口上,然后我可以使用以下命令与 echo 服务器通信:sudo ip addr add 192.168.13.38/24 dev tap1 ; sudo ip link set tap1 up;后跟一个简单的 netcat,如下所示:nc 192.168.13.37 8000。我现在的目标是能够通过从虚拟机外部运行 netcat (或等效命令),从我的 Mac(或同一网络上的任何其他计算机)与 tcp echo 服务器进行通信。我怎样才能做到这一点?目前,如果我尝试使用 VM 网卡的 IP 地址或运行 picotcp 服务器时指定的 IP 地址(在本例中为 192.168.13.37)运行 netcat,则它不起作用。

太感谢了!另外,如果您需要我当前设置的更多信息,请告诉我!

答案1

您需要了解您拥有的网络。有多个(至少 2 个)通信可能会停止的点,您需要先解决所有这些问题,然后才能从外部访问设备。

根据描述,您的本地计算机上有一个服务器侦听的 TAP 设备。通常,您将无法从 Linux 机器外部访问此 TAP 接口,即使是从 VMWare 网络上的另一台虚拟机也是如此。解决方案是将 TAP 桥接到 Linux 的以太网接口(应该是 eth0,除非你有愚蠢的 RedHat 方案;使用 ifconfig 来确保)

因此,首先创建一个桥:

ip link add br0 type bridge

然后将设备添加到网桥(我假设它是tap0,就像我假设它应该是eth0一样):

ip link set tap0 master br0
ip link set dev eth0 down
ip addr flush dev eth0 
ip link set dev eth0 up
ip link set eth0 master br0

并确保桥已启动:

ip link set dev br0 up

您现在应该能够从同一 VMWare 虚拟网络上的虚拟机访问 tap0 上的服务器。您应该通过启动第二个虚拟机来测试这一点。

在您的虚拟 Linux 盒子中,您现在拥有以下网络:

+------+      +-------+
| tap0 |      | eth0  |
+------+      +-------+
   |             |   |
   +-------------+   +--------
      bridge 0         "outside world"

下一篇:这个VMWare虚拟网络是如何与外界连接的呢?您的 Mac 上是否也桥接此网络?还是已经NAT了?在这种情况下,您应该提供一些端口转发规则。不确定这在 VMWare 中如何工作,因为像许多人一样,我使用的是 VirtualBox。

在 VirtualBox 中,“外部世界”可以是很多东西,最重要的是:

  • 桥接适配器:就像您对 Tap-interface 所做的那样,虚拟接口桥接到运行 VirtualBox 的主机的外部接口。虚拟机将在外部拥有自己的 IP 地址。

  • NAT:虚拟接口与外部连接,但通过NAT(网络地址转换)。这是大多数 SOHO DSL 路由器连接到互联网的方式。在外部,有一个IP地址,如果你想从外部访问机器,你必须设置端口转发(从未这样做过;不确定在VirtualBox中是否可行)

  • Host-only:一个单独的网络,只能在 VirtualBox 环境中使用。

因此,在 VirtualBox 中,桥接适配器最适合您。

假设您在 VirtualBox 中进行桥接,您现在将拥有以下网络:

+------+      +-----+     }
| tap0 |      | eth0|     }
+------+      +-----+     }  in your Linux virtual machine
   |     br0    |  |      }
   +------------+  |      }
                   |
Your host (mac)    |
-----------------+ |
                 | |
              +-----------+     physical outside world
              | mac's eth0|--------------
              +-----------+

您应该注意的其他问题是您的 IP 规划和子网。

相关内容