我试图实现的目标:
Debian 主机上的多个虚拟机(virtualbox)与另一台服务器通信(而不是彼此通信或与主机通信)。所有虚拟机都需要具有相同的静态网络设置(以便我可以克隆和使用它们,而无需更改来宾中的设置)。虚拟机的每次网络尝试都必须重定向到上述服务器。
我当前的设置:
- 我在主机上为每个虚拟机创建一个分接头,并使用桥接网络将虚拟机连接到相应的分接头
- 所有水龙头均通过桥连接。网桥有一个 IP 地址,它是虚拟机的网关。
- 主机作为连接到服务器的专用接口。该接口也与网桥相连
- 此接口上的 iptables SNAT 规则用于将虚拟机连接到服务器
- iptables DNAT 规则将所有流量从网桥重定向到服务器
到目前为止这有效。但通过此设置,虚拟机不能具有相同的 IP 地址,因为它们是通过网桥连接的。我尝试对水龙头上的 IP 地址进行 SNAT,但没有成功。
答案1
你可以为每个来宾在其专用网络上设置 NAT。首先,您需要停止将所有网络接口桥接在一起(毕竟,如果它们都在同一台交换机上,那么它们几乎不在自己的专用网络上)。
然后你需要设置 NAT 规则,并且或许它会起作用的。但可能不行——传出路径应该可以工作,但返回路径有问题。 NAT 机器收到回复数据包,将其 NAT 回源 192.168.0.2(或其他)。然后它将它传递给路由......路由将它发送到哪里?所有访客都具有相同的 IP 地址,所有接口都具有相同的地址/子网掩码。
所以我们需要修复路由。值得庆幸的是,通过策略路由这是可行的。
如果您为每个来宾添加-t mangle
规则(基于源端口,例如 vnet0 或其他端口),您可以标记连接。然后您可以ip rule
根据该标记路由回响应(使用)。
这是很多配置,但是一旦你让它工作起来,它就可以编写脚本了。它可能会起作用。我还没有测试过。不管它是否理智,好吧……我个人会尝试让 DHCP 正常工作。考虑下一个必须执行该操作的人会怎么想(一旦你忘记了它到底是如何工作的,几个月后很可能就是你。)
答案2
答案很简单:不行。从网络角度来看,您尝试做的事情与尝试让多个物理主机使用同一个 IP 相同。这行不通。