使用过QEMU的应该知道,QEMU在配置网络的时候,可以用-net命令行参数,来配置前端和后端设备。后来又添加了一个新的方式-netdev。
QEMU在2.12版本引入第三种方式来配置NIC,-nic选项。从QEMU的changelog可以看出,-nic可以快速的创建一个网络前端和host后端。为什么需要第三种方式呢?这三种方式有什么差别呢?我们先来看一下QEMU里面的网络虚拟化接口。
QEMU的网络接口分成下面两部分:
- guest看到的仿真硬件,也叫作NIC。常见的有e1000 网卡,rt8139网卡,和virtio-net设备。这些统称为网络前端。
- host上的网卡后端。QEMU用来跟host上外部网络交换数据的东西。最常见的后端是“user”,用来提供NAT的主机网络访问。tap后端,可以让guest直接访问主机的网络。还有socket类型的后端,用来连接多个QEMU实例,来仿真一个共享网络。
按照以上两点,可以来简单区分一下这三种方式:
- -net选项可以定义前端和后端;
- -netdev选项只能定义后端;
- -nic可以一条命令定义前端和后端;、
下面来看看细节。
-net选项
QEMU最初的guest网络配置方式是-net选项。可以通过-net nic,model=xyz,...来配置guest NIC,然后通过-net <backend>,...来配置host 后端(例如:-net user)。但是呢,仿真的NIC和host的后端并不是直接相连的。他们通过一个相同的仿真hub连在一起,这个组件在以前的QEMU里面叫做vlan。以-net nic