在我们的 VMWare 基础架构中,我有一个生产网络(10.1.1.0/24 子网)和一个由 Veeam 创建的隔离虚拟实验室网络(也是 10.1.1.0/24),Veeam 代理设备位于它们之间。
我创建了一个带有两个虚拟网卡的 NAS VM(FreeNAS 9.10),我想将一个连接到生产网络,另一个连接到隔离的实验室网络,以便在两者之间轻松传输大文件。但是,这不起作用。似乎无论连接哪个网络第一的可以工作(我可以 ping VM,调出 Web GUI,调出 Windows 共享),但是当我连接第二个网络时,VM 无法通过第二个网络访问。即使我在两个网络上都设置了静态 IP,并在每个虚拟网卡上使用不同的 10.1.1.0/24 IP 地址,似乎也只有第一个连接的网络可以工作。
以我对网络的粗略理解,我认为第二个网络上进入 NAS 的流量可能正常,但 NAS 正尝试在 10.1.1.0/24 上回复,并认为应该在另一个虚拟 NIC 上这样做?也许这种设置是不可能的?不过,这似乎不太可能,因为 Veeam 创建的 Busy Box 虚拟设备/路由器/代理可以处理类似的设置。
答案1
您的 NAS 中的两个 NIC 上都有相同的网络,这是您的问题。这很混乱。
答案2
一个好的做法是将不同的网络范围用于生产和实验室。例如,将 10.1.1.0/24 子网用于生产,将 10.1.2.0/24 子网用于实验室。
更新:根据您的需求,您希望 NAS 在生产子网和实验室子网中具有相同的 IP 地址。我会在 NAS 前面设置 NAT(在小型 fw 或 Linux 机器或 Linux VM 上)。因此,生产和实验室具有相同的 IP 地址,同时仍保持隔离。
+------------------+ | 产品 10.1.1.0/24 | +------------------+ | +----------------------+ | NAS | |re0 10.1.1.50/24| | re1 192.168.42.50/24 | +----------------------+ | +----------------------+ | VMFW | | eth0 192.168.42.50/24| | 以太网1 10.1.1.50/24 | +----------------------+ | +----------------------+ | 实验室 10.1.1.0/24 | +----------------------+
编辑不要忘记一些网络魔法,将所有目的地为 10.1.1.50 的网络有趣端口发送到 192.168.42.50。
答案3
我认为@bgtvfr 的答案非常好,非常接近。我现在已经放弃了这个想法,但我知道这是可能的。Veeam 虚拟实验室代理设备在我们的网络上为我们完成了这项工作,并且运行良好,在做了一些研究并查看了这个(BusyBox Linux)设备上的所有启动脚本后,我相信我缺少的关键配置是使用类似netfilter 到标记数据包。
例如来自https://unix.stackexchange.com/a/4421
以下命令通过 eth1 为带有标记 1 的数据包(除发往本地主机的数据包外)创建备用路由表。ip 命令来自 iproute2 套件
ip rule add fwmark 1 table 1 ip route add 127.0.0.0/0 table 1 dev lo ip route add 0.0.0.0/0 table 1 dev eth1
这项工作的另一半是识别必须获得标记 1 的数据包;然后对这些数据包使用 iptables -t mangle -A OUTPUT … -j MARK --set-mark 1 以让它们通过路由表 1 进行路由。我认为以下应该可以做到(用非默认路由接口的地址替换 1.2.3.4):
iptables -t mangle -A OUTPUT -m conntrack --ctorigdst 1.2.3.4 -j MARK --set-mark 1
我不确定这是否足够,也许需要在传入数据包上添加另一条规则来告诉 conntrack 模块跟踪它们。
这是我在 Veeam Proxy 设备的配置/初始化文件中找到的线索,其中 eth0 和 eth1 都是 10.1.1.0/24 子网 - eth0 是我的生产网络,eth1 是虚拟测试实验室: 我对 netfilter/iptables 还不太熟悉,但似乎这可能是在标记进入虚拟实验室接口的数据包,以便它们从同一接口而不是默认网关接口返回?