为两个 VM 创建专用网络

Chr*_*ris 5 linux bridge kvm-virtualization

我正在尝试创建两个都连接到同一个专用网络的虚拟机。我正在使用带有 qemu-kvm 1.0 的 Linux。

我的攻击计划是这样的:

brctl addbr 桥
ifconfig 桥接
tunctl -t tap1
tunctl -t tap2
ifconfig tap1 up
ifconfig tap2 up
brctl addif 桥接tap1
brctl addif 桥接tap2
qemu-kvm -net nic,macaddr=52:54:00:11:22:33 -net tap,ifname=tap1 disk1.img
qemu-kvm -net nic,macaddr=52:54:00:44:55:66 -net tap,ifname=tap2 disk2.img

启动后,我给第一台机器的 IP 地址为 192.168.100.5,第二台为 192.168.100.10。

此时,当我尝试从另一个虚拟机 ping 一个虚拟机时,没有 ping 响应。但是,使用 Wireshark,我看到 ARP 请求被发送和响应,并且我验证了 ARP 缓存确实包含有关其他 VM 的信息。然而没有生成 ping 回复(如通过 Wireshark 看到的)。

接下来,我尝试给网桥一个 IP 地址 192.168.100.1。执行此操作后,VM 之间的 ping 工作正常,但仍然存在问题:现在所有请求似乎都来自网桥本身。例如,如果我从一台 VM 连接到另一台的 FTP 服务器,在带有 FTP 服务器的 VM 上运行 netstat 会显示 192.168.100.1 是源。连接的工作方式与通过 NAT 的方式相同,但与 NAT 一样,源地址不是始发机器的地址。我已经在 net.ipv4.ip_forward 开启和关闭以及伪装 (iptables -t nat -A POSTROUTING -j MASQUERADE) 开启和关闭的情况下进行了尝试,结果相同。

我真正想要的是让我的 VM 像插入交换机一样运行:它应该是透明的。我更关心看起来像桥的源地址,而不是需要 IP 的桥。后者有点烦人,但前者对我来说是个障碍。

mgo*_*ven 2

我以前见过 iptables 干扰网桥流量(尽管据我所知它不应该)。你当然不想要任何与 NAT 相关的规则,但我认为 FORWARD 链需要接受数据包。我建议在没有 iptables 规则和 FORWARD 链上默认 ACCEPT 策略的情况下对此进行测试。

还有其他一些事情需要检查:

  • 是否brctl show验证tap1tap2bridge
  • 是否brctl showmacs bridge显示两个虚拟机的 MAC 地址?