KVM中的网络简介(qemu-kvm)

emu-kvm主要向客户机提供了如下4种不同模式的网络:

1)基于网桥(bridge)的虚拟网卡

2)基于NAT(Network Addresss Translation)的虚拟网络

3)QEMU内置的用户模式网络(user mode networking)(QEMU/KVM的默认方式

4)直接分配宿主机上的网络设备的网络(包括VT-d和SR-IOV)

除了特别的需要iptables配置端口映射、数据包转发规则的情况,一般默认将防火墙所有规则都关闭,以避免妨碍客户机中的网络畅通

在QEMU命令行中,对客户机网络的配置(除物理网络设备直接分配外)都是用"-net"参数进行配置的,

如果没有设置任何的"-net"参数,默认使用"-net nic -net user"参数,进而使用完全基于QEMU内部实现的用户模式下的网络协议栈

qemu-kvm提供了对一系列主流和兼容性良好的网卡的模拟,通过"-net nic,model=?"参数可以查询到当前的qemu-kvm工具实现了哪些网卡的模拟

"rtl8139"网卡模式qemu-kvm默认的模拟网卡类型

"e1000"是提供Intel e1000系列的网卡模拟,纯的QEMU(qemu-kvm)默认就是提供Intel e1000系列的虚拟网卡

  virtio类型是qemu-kvm对半虚拟化IO(virtio)驱动的支持

qemu-kvm命令行在不加任何网络相关的参数启动客户机后,在客户机中可以看到它有一个默认的RTL8139系列的网卡,当然由于没有进行更多的网络配置,这个模拟的网卡虽然在客户机中可见,但是它使用的是用户模式的网络,其功能非常有限

查看物理机中的网卡信息:

lspci | grep Ethernet

qemu-kvm命令行中基本的"-net"参数的细节如下:

-net  nic[, vlan=n ] [,m acaddr=mac] [,model=type ][,name=name] [,addr=addr]  [,vectors=v]

执行这个命令行会让QEMU建立一个新的网卡并将其连接到n号VLAN上

其中:

"-net  nic"是必需的参数,表明这是一个网卡的配置。

1)vlan=n, 表示将网卡放入到编号为nVLAN,默认为0

2)macaddr=mac, 设置网卡的MAC地址,默认会根据宿主机中网卡的地址来分配。若局域网中客户机太多,建议自己设置MAC地址,以防止MAC地址冲突。

3)model= type, 设置模拟的网卡的类型,在qemu-kvm中默认为rtl8139。使用qemu-kvm  -net nic,model=? 查询kvm支持的网卡类型

4)name=name, 为网卡设置一个易读的名称,该名称仅在QEMU monitor中可能用到。

5)addr=addr, 设置网卡在客户机中的PCI设备地址为addr

6)vectors=v, 设置该网卡设备的MSI-X向量的数量为n仅对使用virtio驱动的网卡有效。设置为"vectors=0"是关闭virtio网卡的MSI-X中断方式

示例:

-net  vlan=0,macaddr=fe:54:00:86:0d:04,model=rtl8139 ,name=eth0,addr=0x0

如果需要向一个客户机提供多个网卡,可以多次使用"-net"参数

客户机(即虚拟机中)中用一些工具查看网卡相关的信息如下:

lspci|grep Ethernet

ethtool -i eth1                             #-i选项仅显示驱动信息

ifconfig

在QEMU monitor中查看网络的信息,如下:

info  network

一、桥接网络(客户机和宿主机平等,都是局域网中的一个节点,二者网络环境相同,类似vmare中桥接网络)

在QEMU/KVM的网络使用中,网桥(bridge)模式可以让客户机和宿主机共享一个物理网络设备连接网络,客户机有自己的独立IP地址,可以直接连接与宿主机一模一样的网络,客户机可以访问外部网络,外部网络也可以直接访问客户机(就像访问普通物理主机一样)。即使宿主机只有一个网卡设备,使用bridge模式也可知让多个客户机与宿主机共享网络设备

qemu-kvm的命令行中,关于bridge模式的网络参数如下:

-net  tap [,vlan=n] [,name=str] [,fd=h] [,ifname=name] [,script=file] [,downscript=dfile] [,helper=helper] [,sndbuf=nbytes] [,vnet_hdr=on|off] [,vhost=on|off] [,vhostfd=h] [,vhostforce=on|off]

该配置表示连接宿主机的TAP网络接口到nVLAN,并且使用file和dfile两个脚本在启动客户机时配置网络和在关闭客户机时取消网络配置

1)  tap参数,表明使用TAP设备。TAP是虚拟网络设备,它仿真了一个数据链路层设备(ISO七层网络结构的第二层,需要IP地址,仅有mac地址),它像以太网的数据帧一样处理第二层数据报。而TUNTAP类似,也是一种虚拟网络设备,它是对网络层设备的仿真。TAP用于创建一个网络桥,而TUN与路由相关。

2)  vlan=n, 设置该设备VLAN编号,默认值为0。

3)  name=name, 设置名称,QEMU monior中可能用到,一般由系统自动分配即可

4)  fd=h, h为整数,是连接到已经打开的TAP接口的文件描述符,一般不要设置该选项,而是让QEMU自动创建一个TAP接口。在使用了fd=h的选项后,ifnamescriptdownscripthelpervnet_hdr等选项都不可使用了(不能与fd选项同时出现在命令行中)

5) ifname=name , 设置在宿主机中添加的TAP虚拟设备的名称(如tap1tap5等),当不设置这个参数时,QEMU会根据系统中目前的情况,产生一个TAP接口的名称。

6) script  file, 设置宿主机在启动客户机时自动执行的网络配置脚本
                        如果不指定,其默认值为"/etc/qemu-ifup"这个脚本,可指定自己的脚本路径以取代默认值;
                        如果不需要执行脚本,则设置为"script=no"。

7) downscript=file, 设置宿主机在客户机关闭时自动执行的网络配置脚本
       如果不设置,其默认值为"/etc/qemu-ifdown";
       如果户机关闭时宿主机不需要执行脚本,则设置为"downscript=no"。

8)helper=helper, 设置启动客户机时在宿主机中运行的辅助程序,包括建立一个TAP虚拟设备,默认值为/usr/local/libexec/qemu-bridge-helper(编译安装)。一般不用自定义,采用默认值即可

9) sndbuf=nbytes, 限制TAP设备的发送缓冲区大小为n字节, 当需要流量进行流量控制时可以设置该选项。其默认值为"sndbuf=0", 即不限制发送缓冲区的大小。

示例:

-net tap
ifname=vnet0,script=/etc/qemu-ifup,downscript=no

其余几个选项都是与virtio相关的,需要配合virtio使用

1)vnet_hdr =on | off, 设置是否打开TAP设备的"IFF_VNET_HDR"标识
          "vnet_hdr= off‘‘表示关闭这个标识,
          "vnet_hdr=on" 表示强制开启这个标识,如果没有这个标识的支持,则会触发错误。

IFF_VNET_HDRtun/tap的一个标识,打开这个标识则允许发送或接受大数据包时仅做部分的校验和检查。打开这个标识,还可以提高virtio_net驱动的吞吐量

2)vhost=on | off, 设置是否开启vhost-net这个内核空间的后端处理驱动只对使用MIS-X中断方式的virtio客户机有效。

3)vhostfs=h,设置去连接一个已经打开的vhost网络设备

4)vhostforce=on | off,设置是否强制使用vhost作为非MSI-X中断方式的virtio客户机的后端处理程序

准备环境:

宿主机上进行如下操作

1) 要采用bridge模式的网络配置,首先需要安装两个RPM包,即bridge-utils和tunctl,它们提供所需的brctl和tunctl命令行工具

yum  install  bridge-utils   -y

tunctl工具可选安装,centos 7.x系列需要编译安装

2) 查看tun模块是否加载,如下:

lsmod | grep tun                #注意这个模块于是否安装tunctl工具无关

如果tun模块没有加载,则运行"modprobe tun"命令来加载。当然,如果已经将tun编译到内核(可查看内核config文件中是否有"CONFIG_TUN=y"选项),则不需要加载了。如果内核完全没有配置TUN模块,则需要重新编译内核才行

3) 检查/dev/net/tun的权限,需要让当前用户拥有可读写的权限。

ll  /dev/net/tun

4) 建立一个bridge,并将其绑定到一个可以正常工作的网络接口上,同时让bridge成为连接本机与外部网络的接口(下面设置是临时生效,重启机器或重启网络服务后,将会失效,最好是写入到网卡配置文件中)

主要的配置命令如下:

brctl  addbr  br0

brctl  addif  br0  eth0      #这一步如果是ssh远程连接将会断开

brctl  stp  br0  on

ifconfig  eth0  0

dhclient  br0      这一步是自动获取ip地址,可手动设置

route

需要将默认路由设备设置为br0

ping         #测试网络,ping外网

5 ) 准备qemu-ifup和qemu-ifdown脚本。

在客户机启动网络前会执行的脚本是由"script"选项配置的脚本(默认为/etc/qemuif-up),该脚本中创建一个TAP设备并将其与bridge绑定起来

qemu-ifup脚本中"$1"qemu-kvm命令工具传递给脚本的参数(即ifname选项的值),它是(在宿主机使用ifconfig可看到)客户机使用的TAP设备名称(如tap0、tap1等,或者是前面提及的ifname选项的值)。

另外,其中的"tunctl"命令这一行是不需要的,因为qemu-bridge-helper程序已经会创建好TAP设备,这里列出来只是因为在一些版本较旧的qemu-kvm中可能没有自动创建TAP设备

cat  >> /etc/qemu-ifup<<end

#!/bin/bash

#

bridge=br0

if [ -n "$1" ];then

tunctl    -u $(whoami)   -t $1

ip link set $1 up

sleep 1

brctl addif $bridge $1

[ $? -eq 0 ] && exit 0 || exit 1

else

echo "Error: no interface specified."

exit 1

fi

end

qemu-kvm工具在客户机关闭时会自动解除TAP设备与bridge绑定,也会自动删除已不再使用的TAP设备,所以qemu-ifdown这个脚本不是必需的,最好设置为"downscript=no"

安装虚拟机:

qemu-kvm  --enable-kvm  -m 2048 -smp 2  \

-boot order=cd -hda /kvm/os/cs-01.qcow2 \

-cdrom /kvm/iso/CentOS-7-x86_64-Minimal-1804.iso \

-vnc :1 \

-net nic      -net tap,ifname=tap0,script=/etc/qemu-ifup.sh,downscript=no \

-daemonize

启动虚拟机:

qemu-system-x86_64     /kvm/os/cs-01.qcow2  -smp 2  -m 2048 \

-net nic  -net tap,ifname=tap1,script=/etc/qemu-ifup,downscript=no  \

-vnc :0  \

-daemonize

brctl  show        #如果在br0上绑定了tap设备,说明成功

ls  /sys/devices/virtual/net/

使用vncviewer登录到客户机上,设置网络(此时一定要像配置物理机一样配置网络环境)

原文地址:https://www.cnblogs.com/liliyang/p/9634121.html

时间: 2024-10-05 22:29:09

KVM中的网络简介(qemu-kvm)的相关文章

KVM(七)使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照

本文将梳理 QEMU/KVM 快照相关的知识,以及在 OpenStack Nova 中使用 libvirt 来对 QEMU/KVM 虚机做快照的过程. 1. QEMU/KVM 快照 1.1 概念 QEMU/KVM 快照的定义: 磁盘快照:磁盘的内容(可能是虚机的全部磁盘或者部分磁盘)在某个时间点上被保存,然后可以被恢复. 磁盘数据的保存状态: 在一个运行着的系统上,一个磁盘快照很可能只是崩溃一致的(crash-consistent) 而不是完整一致(clean)的,也是说它所保存的磁盘状态可能相

Libvirt/KVM 中的网络模式

NAT 默认方式.虚拟机获取一个私有 IP(例如 192.168.122.0/24 网段的),并通过本地主机的 NAT 访问外网. 创建一个本地网桥 virbr0,包括两个端口:virbr0-nic 为网桥内部端口,vnet0 为虚拟机网关端口(192.168.122.1). brctl show bridge name bridge id STP enabled interfaces virbr0 8000.52540082327e yes virbr0-nic vnet0 虚拟机启动后,配置

KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain]

学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 1. Libvirt 在 OpenStack 架构中的位置 在 Nova Compute 节点上运行的 nova-compute 服务调用 Hypervisor API 去管理运行在该

KVM 介绍(7):使用 libvirt 做 QEMU/KVM 快照和 Nova 快照 (Nova Instances Snapshot Libvirt)

学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 本文将梳理 QEMU/KVM 快照相关的知识,以及在 OpenStack Nova 中使用 libvirt 来对 QEMU/KVM 虚机做快照的过程. 1. QEMU/KV

QEMU KVM Libvirt(12): Live Migration

由于KVM的架构为 Libvirt –> qemu –> KVM 所以对于live migration有两种方式,一种是qemu + KVM自己的方式,一种是libvirt的方式,当然libvirt也是基于qemu+kvm的方式 qemu + KVM自己的方式为使用monitor KVM Migration KVM currently supports savevm/loadvm and offline or live migration Migration commands are give

KVM虚拟化搭建及其KVM中LVM扩容

KVM虚拟化搭建及其KVM中LVM扩容 前言: 公司项目方最近有两台物理服务器系统分别为CentOS 7.2.需要部署KVM虚拟化,第一台服务器A需要虚拟出三台虚拟机(均为CentOS 7.2系统),服务器B上需要虚拟出三台CentOS 7.2 系统和两台windows server2012 系统.其中六台CentOS 7.2 虚拟机需要部署我们自己的平台,两台windows分别部署客户的平台.下面来为大家说一下KVM虚拟化的搭建,以及创建虚拟机的两种办法,及其操作使用.     KVM小课补:

kvm中虚拟机xml文件释义

xml文件内容是来定义kvm中domain的配置信息,可以使用virt-install来生成,但需要指定各个选项,那还不如生成一个基本的xml或复制模板来做相应修改. 以下是kvm中domain的xml配置解释. <!-- #提示信息 WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE  OVERWRITTEN AND LOST. Changes to this xml configuration sho

QEMU KVM libvirt 手册(1)

安装 对虚拟化的支持通常在BIOS中是禁掉的,必须开启才可以. 对于Intel CPU,我们可以通过下面的命令查看是否支持虚拟化. # grep "vmx" /proc/cpuinfo flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdp

QEMU KVM Libvirt手册(6) &ndash; Network Block Device

网络块设备是通过NBD Server将虚拟块设备通过TCP/IP export出来,可以远程访问. NBD Server通常是qemu-nbd 可以提供unix socket qemu-nbd -t -k /home/cliu8/images/ubuntutest-nbd ubuntutest.img 打开另一个窗口,可以连接这个unix socket qemu-system-x86_64 -enable-kvm -name ubuntutest  -m 2048 -hda nbd:unix:/