我正在尝试在多个虚拟机之间共享网络。
我尝试添加:
qemu.networkingOptions = [
"-nic user,model=virtio-net-pci"
"-netdev tap,id=mynet0"
];
然而,这会导致以下错误:
qemu-system-x86_64: network script /etc/qemu-ifup failed with status 256
即使以 root 身份运行。我也不知道这个文件实际位于哪里?这会是客人的事吗?
答案1
你必须保持选项的纯度。我的意思是你不能混合网络声明
-net nic,model=virtio-net-pci,macaddr=... -net user,restrict=[on|off]
和
-device virtio-net-pci,netdev=net0,mac=... -netdev tap,ifname=tap0,id=net0,script=...,downscript=...
其中第一个选项创建专用范围 10.0.0.x/8 的虚拟 LAN,为来宾 VM 提供 DHCP 地址 10.0.0.15,并(禁止)允许来宾 VM 通过嵌入式 NAT 防火墙到达主机系统网络;而显示的字母选项创建了一个与主机的tap0接口绑定的虚拟接口,您应该在其中定义tap0连接到哪个真实接口。
因此,如果您想连接两个虚拟机,假设 VMA/tapA 和 VMB/tapB ,您可以通过桥接器将这些虚拟机连接在一起,该桥接器可以定义为:
# ip link add name brAB type bridge
# ip link set dev brAB up
# ip link set dev tapA master brAB
# ip link set dev tapB master brAB
# ip link set dev tapA up
# ip link set dev tapB up
此配置创建连接 VMA 和 VMB 的隔离网络仅有的!。要使该网络与一些免费主机 NIC 绑定或配置其他网络模式,您必须阅读有关真实主机网络配置的更多信息,例如有关虚拟交换机(openvswitch)或其他可能性的信息。
当然,在尝试使用虚拟接口 tapA 或 tapB 之前,需要先对其进行装箱。例如,您可以这样做:
# ip tuntap add name tapA mode tap
命令。
答案2
我需要以下内容:
qemu.networkingOptions = [
"-device e1000,netdev=abc,mac=52:55:00:d1:55:01"
"-netdev tap,id=abc,ifname=tapA,script=no,downscript=no"
];
在第二个虚拟机中更改地址+接口:
qemu.networkingOptions = [
"-device e1000,netdev=abc,mac=52:55:00:d1:55:02"
"-netdev tap,id=abc,ifname=tapB,script=no,downscript=no"
];
正如 @schweik 所提到的,我还需要配置使用以下脚本的网络:
for i in "$@"
do
case $i in
--down)
ip link delete brAB
ip link delete tapA
ip link delete tapB
;;
--up)
ip link add name brAB type bridge
ip link set dev brAB up
ip tuntap add dev tapA mode tap user $(whoami)
ip tuntap add dev tapB mode tap user $(whoami)
ip link set dev tapA master brAB
ip link set dev tapB master brAB
ip link set dev tapA up
ip link set dev tapB up
;;
esac
done