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 的桥。后者有点烦人,但前者对我来说是个障碍。
我以前见过 iptables 干扰网桥流量(尽管据我所知它不应该)。你当然不想要任何与 NAT 相关的规则,但我认为 FORWARD 链需要接受数据包。我建议在没有 iptables 规则和 FORWARD 链上默认 ACCEPT 策略的情况下对此进行测试。
还有其他一些事情需要检查:
brctl show
验证tap1
并tap2
在bridge
?brctl showmacs bridge
显示两个虚拟机的 MAC 地址?