我处在一个受保护的网络上,该网络仅向已注册的设备提供 IP 地址。我可以注册我的笔记本电脑、Windows 计算机和 RPI,但不能注册该笔记本电脑上的每个 VM,因此我认为桥接适配器不是一个选择。我希望能够在 RPI 和 VM 之间进行通信。
到目前为止我已经尝试过这个:
我有 3 个实体:(1)一个 Windows 主机,IP 为 134.58.46.117 (2)一个 Virtualbox Linux Guest VM,已配置,atm,带有 NAT 网络和仅主机适配器。它在 eth0 上的 IP 为 10.0.2.15,在 eth1 上的 IP 为 192.168.56.102 (3)Jessie 上的 RPI,在 eth0 上的 IP 为 134.58.46.172。
我可以从 Windows 主机 ping 192.168.56.102。我可以从 RPI ping Windows 主机。我可以从 Windows 主机 ping RPI。我已使用以下路由配置了 RPI:
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.56.0 134.58.46.117 255.255.255.0 UG 0 0 0 eth0
当我从 RPI ping VM(因此执行“ping 192.168.56.10”)时,我没有收到任何响应。
Windows 主机上的 Wireshark做检测来自 134.58.46.172 到目的地 192.168.56.102 的数据包,但没有返回任何内容。
知道问题出在哪里吗?或者用其他方法做我想做的事?
答案1
您需要两个步骤才能实现此目的:
首先,您需要在 Windows 计算机上允许 IPv4 转发。这将允许它将数据包从一个接口移动到另一个接口。执行此操作的说明取决于您使用的 Windows 版本,例如,对于 XP,您可以使用此引用对于 Windows 10,您可以使用其他参考无论如何,谷歌Windows YourVersion IPv4 转发了解更多信息。无论如何,这只是更改 Windows 注册表项的问题,尽管确切的键会随着 Windows 版本的改变而改变。
您需要指示 Linux 计算机使用 Windows 主机作为 RPI 的网关。可以使用以下命令完成此操作:
ip route add RPI_IP_ADDRESS/32 via WINDOWS_HOST_IP_ADDRESS
这可确保数据包可以与 Linux VM 客户端的标头一起反向流动:这样它们就会被识别为对 RPI 发起的对话的相关回复。如果您不使用此方法,数据包标头将被更改为反映 Windows 主机 IP 地址,这意味着 RPI 将从不同于其写入的地址接收回复。
就这样。
编辑:
参考评论:
为你的 Linux 客户端提供一个假的 MAC 地址,该地址可以访问你的 LAN。使用 RPI 监听对话,tcpdump -i eth0 -n arp。这将显示网络上存在的 MAC 地址数量。使用以下命令更改 Linux 客户端的 MAC 地址麦克查格,将其设置为您刚刚学到的那个。现在使用 Bridge 适配器作为 Linux 客户机。它会像魔法一样工作。此外,您可能考虑购买一台带有真实操作系统的 PC,因为您要做的事情相当复杂。Windows 在这方面有所欠缺。
窃取地址不是干扰其他人的连接:数据包是编号的,如果您的电脑收到错误编号的数据包,它就会丢弃它。
你可以按如下方式在启动时使其永久生效:在虚拟机上(我假设你使用的是 Debian 或衍生产品 Ubuntu/Mint,……如果不是,那么它会同步以适应你所在的位置),编辑/etc/网络/接口,并粘贴以下内容(假设eth1是要连接的接口):
auto eth1 iface eth1 inet dhcp pre-up macchanger -m XX:XX:XX:XX:XX:XX eth1
就是这样。