本文将介绍 macvtap 桥接 桥接网络给虚拟机. 传统的 br + tap 网卡桥接 方法十分麻烦, 本机要上网的话, 需要将IP地址是挂在 br 网卡上, 造成设置期间断网、管理困难等麻烦. 使用 macvtap 桥接 将更简便高效的让 qemu-kvm 桥接虚拟机网络. macvtap在临时组网的情况下十分易用, 不过也有可能造成主机的ip连不是虚拟机ip的问题.

本例 将创建名为 tapwin10 的网卡, 并桥接给我的 win10 虚拟机使用.

创建 macvtap 网卡 🔗︎

创建一个 macvtap 网卡, 设置mac地址为 52:54:00:8C:90:B4 .

1
2
ip link add link eth0 name tapwin10 address 52:54:00:8C:90:B4 type macvtap mode bridge
ip link set tapwin10 up

使用 macvtap 网卡 🔗︎

使用这个 macvtap 网卡启动虚拟机.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 把网卡设置存成变量, 在后面执行的时候调用
# macvtap 和 `br + tap 网卡桥接` 模式区别很大,
# 使用 `br + tap 网卡桥接` 模式设置网络请一定不必参考这种设置方法.
_network_cfgs="-netdev tap,fd=30,id=net0 30<>/dev/tap$(cat /sys/class/net/tapwin10/ifindex) \
-device virtio-net-pci,netdev=net0,mac=52:54:00:8C:90:B4"

# 启动虚拟机
qemu-system-x86_64 \
	-enable-kvm -m 4096 -cpu host \
	-usb -device usb-kbd -device usb-tablet \
	-smp 2,cores=1,threads=2,sockets=1 \
	-drive if=virtio,file="/dev/kvm_vg/Win10",format=raw \
	$_network_cfgs \
	-monitor stdio \
	-vga vmware \
	-device virtio-balloon \
	-boot d -cdrom "/mnt/iso/cn_windows_10_business_editions_version_1909_updated_jan_2020_x64_dvd_b3e1f3a6.iso"

删除 macvtap 网卡 🔗︎

关闭虚拟机后, 可以立即删除 macvtap 网卡

1
2
ip link set dev tapwin10 down 2>/dev/null
ip link del dev tapwin10

总结 🔗︎

macvtap 并不是那么好用, 建议还是使用普通桥接方法.