How to enable QEMU to use public bridge
文章目录
本文将介绍enable QEMU to use public bridge。
1. Overview
Bridge类似于一个网络交换机,用于交换数据包,连接不同的VMs, containers以及Host.
2. Tun/Tap网卡
在我们创建完虚拟机后,一般在host里会多了张tap网卡,那这个网卡有什么作用呢?
2.1 普通网卡工作模式
普通的网卡一端连接物理链路,一端连接内核协议栈。
2.2 tun/tap网卡工作模式
普通的物理网卡是通过物理链路来收发数据,而tun/tap 是通过/dev/net/tun来收发数据。tun/tap网卡一端连着/dev/net/tun,一端连着协议栈。
2.3 虚拟化场景下的tap网卡
虚拟机主要用的是tap类型网卡,下面是tap网卡工作模式:
tap网卡主要是两部分组成,字符设备驱动和虚拟网卡驱动。
- 字符设备驱动:负责和用户进程打交道,把数据写入/dev/net/tun,然后通知用户进程从/dev/net/tun里面拿数据实现数据交互
- 虚拟网卡驱动:负责和网络协议栈的数据打交道
qemu-kvm中 vm与host之间的通讯过程:
- 在创建一个vm并启动时,在host中创建一个tap类型的网卡,例如tap0,同时vm作为一个qemu进程,内核为其提供了一个/dev/net/tun设备的文件描述符(fd),供其读写
- vm用户进程产生数据,发到vm的虚拟网卡上,实质上vm作为host的一个qemu进程,其产生的数据写入到/dev/net/tun里
- tap0网卡通过字符设备驱动从/dev/net/tun 里收到数据后,会转发给网桥,网桥再判断是否丢弃,转发或者交给上层的API来处理
3. Solutions
3.1 Create bridge
3.1.1 Using Distribution-Specific Scripts
Networking#Public_Bridge中列举了RedHat,Debian和SuSE上的配置。
还有一个重要的tool是netplan。
主机重启后,无需重新配置,重点推荐😊。
3.1.2 Manual Configuration
参见QEMU使用网桥模式和Hosting QEMU VMs with Public IP Addresses using TAP Interfaces中的步骤。
此方法的弊端在于:每次主机重启都需要重新配置,所以不推荐😢。
3.2 Create tap
The default network configure script is /etc/qemu-ifup
and the default network deconfigure script is /etc/qemu-ifdown
.
将创建tap的脚本放入到/etc/qemu-ifup
中即可。
4. Experience
4.1 netplan and qemu-ifup
https://github.com/liujunming/qemu_usage/tree/master/0002-set-net-on-kvm
4.2 virtio-net-pci
https://github.com/liujunming/qemu_usage/tree/master/0007-use-virtio-net-pci-dev
4.3 e1000 device
https://github.com/liujunming/qemu_usage/tree/master/0009-e1000-device
4.4 net nic
https://github.com/liujunming/qemu_usage/tree/master/0010-net-nic
5. Troubleshooting
docker makes existing KVM VMs have suddenly no connection
Potential solutions:
参考资料: