QEMU网卡配置

一、QEMU网卡模式介绍

 

User mode network(Slirp) :User网络

使用用户模式的客户机可以连通宿主机及外部网络。用户模式网络完全由QEMU模拟实现整个TCP/IP协议栈,并且使用这个协议栈提供一个虚拟的NAT网络。它不依赖于宿主机上的网络工具组件,如bridge-utils、tunctl、dnsmasq、iptables等,因此也不需要root用户权限。这种方式实现虚拟机上网很简单,类似vmware里的nat,qemu启动时加入-user-net参数,虚拟机里使用dhcp方式,即可与互联网通信,当然,用户模式网络的缺陷也是明显的:因其在QEMU内部实现所有网络协议栈,相对性能较差。

Tap/tun network : Tap网络

Tap支持各种虚拟网络拓扑,具有很好的性能。但是对于不同的操作系统可能需要不同的拓扑配置,同时需要root权限,一般形式如下

-netdev tap,id=mynet0

tap参数,表明使用TAP设备。TAP是虚拟网络设备,它仿真了一个数据链路层设备(ISO七层网络结构的第二层),它像以太网的数据帧一样处理第二层数据报。而TUN与TAP类似,也是一种虚拟网络设备,它是对网络层设备的仿真。TAP被用于创建一个网络桥,而TUN与路由相关。桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。局域网内可以通过ssh登陆虚拟机

这种方式要比user mode复杂一些,但是设置好后 虚拟机<-->互联网虚拟机<-->主机 通信都很容易,这种方式设置上类似vmware的host-only,qemu使用tun/tap设备在主机上增加一块虚拟网络设备(tun0),然后就可以象真实网卡一样配置它。

二.网卡配置方式

 

1.老版net参数网络配置

 

-net nic[,vlan=n][,macaddr=addr] 

 

创建一个新的网卡并将网卡放人到编号为n的VLAN中(在默认的情况下n=0)。作为可选项的项目,MAC地址可以进行改变。如果没有指定-net选项,则会创建一个单一的NIC。model是网卡的类型,可以model=?查看有哪些类型。vlan=n,表示,默认为0。

 

-net user[,vlan=n] 

 

用户模式,Qemu使用Slirp实现了一整套tcp/ip协议栈,这样就不需要管理员权限来运行。如果没有指定-net选项,这将是默认的情况。

 

-net tap[,vlan=n][,fd=h][,ifname=name][,script=file] 

 

桥接模式,需要指定启动script和关闭downscript,将TAP网络接口name与VLAN n进行连接,并使用网络配置脚本file进行配置默认的网络配置脚本为/etc/qemu-ifup。如果没有指定name,OS 将会自动指定一个.fd=h可以用来指定一个已经打开的TAP主机接口的句柄(tap设备),name是在monitor模式使用info network看到的名字,ifname是tap设备在主机中的名字。例如: 

 

qemu linux.img -netnic,vlan=0 -net tap,vlan=0,ifname=tap0  -netnic,vlan=1 -net tap,vlan=1,ifname=tap1 -netsocket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]
-netsocket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port] 

 

使用TCP socket将VLAN n与远程的另一个Qemu虚拟机的VLAN进行连接。如果指定了listen,Qemu将在port端口监听连入请求(host是可选的), connect可以用来使用listen选项与另一个Qemu实例进行连接.fd=h指定了一个已经打开的TCP socket.例如:

 

 

-net socket[,vlan=n][,fd=h][,mcast=maddr:port] 

 

创建一个VLAN n,并使用UDP多址通信套接口与其他的QEMU虚拟机进行共享,尤其是对于每一个使用多址通信地址和端口的QEMU使用同一个总线。在这里我们要注意以下几点:

几个QEMU可以运行在不同的主机上但却使用同一个总线(在这里假设为这些主机设置了正确的多址通信)

mcast支持是与用户模式Linux相兼容的.

使用fd=h指定一个已经打开的UDP 多址通信套接口. 

 

 

-net none 

 

如果您没有指定任何网络配置选项,那么QEMU将为客户机创建一个SLiRP用户网络后端和适当的虚拟网络设备(例如,大多数x86 PC客户端使用E1000 PCI网卡)。但是使用了这条命令表明没有网络设备需要进行配置(这条命令是抑制网络设置的)

 

-tftp prefix 

 

当使用用户模式网络堆栈,激活一个内置的TFTP服务器。所有的以 prefix开始的文件将会使用一个TFTP客户端从主机下载到本地。在本地的TFTP客户端必须以二进制模式进行配置(使用Unix的TFTP客户端的bin命令),在客户机上的主机IP地址如通常的10.0.2.2.

 

-redir[tcp|udp]:host-port:[guest-host]:guest-port 

 

当使用用户模式网格栈,将连接到主机端口host-port的TCP或是UDP连接重定向到客户机端口guest-port上。如果没有指定客户机端口,它的值为10.0.2.15(由内建的DHCP服务器指定默认地址)。

2.新版本使用-netdev与-device来配置网络与网络设备

 

老版本中qemu使用的是-net来配置网络,-net nic来配置网卡设备,但是从0.12版本提出了使用netdev参数来配置网络,当然老版本的语法仍然可以使用。比如你可以使用-net nic,model=?来得到一个有效的网卡设备列表。

夏目简单对比一下二者之间的语法区别,假设配置网络mac地址:

新版本的方法:

 

-netdev tap,id=net0-device e1000,netdev=net0,mac=52:54:00:12:34:56

 

旧的方法:

 

-net tap,vlan=0 -net nic,vlan=0,model=e1000,macaddr=52:54:00:12:34:56

 

 

经过比较发现,mac地址的书写发生了改变,同时不再出现同一个vlan中的虚拟机接收该局域网中所有流量的困惑情况,因为所有设备都是通过-netdevid=id和-device netdev= parameters来指定1对1的

你可能感兴趣的:(DPDK+OVS实战)