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

虚拟机启动后,配置 192.168.122.1(vnet0)为网关。所有网络操作均由本地主机系统负责。

DNS/DHCP 的实现

本地主机系统启动一个 dnsmasq 来负责管理。

# ps aux|grep dnsmasq
nobody    2496  0.0  0.0  12892   572 ?        S     2014   0:18 /usr/sbin/dnsmasq --strict-order --pid-file=/var/run/libvirt/network/default.pid --conf-file= --except-interface lo --bind-interfaces --listen-address 192.168.122.1 --dhcp-range 192.168.122.2,192.168.122.254 --dhcp-leasefile=/var/lib/libvirt/dnsmas /default.leases --dhcp-lease-max=253 --dhcp-no-override --dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile --addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts

NAT 的实现

主机系统负责进行 SNAT。

# iptables -nvL -t nat
Chain PREROUTING (policy ACCEPT 76M packets, 3728M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 412K packets, 28M bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  tcp  --  *      *       192.168.122.0/24    !192.168.122.0/24    masq ports: 1024-65535
  231 27466 MASQUERADE  udp  --  *      *       192.168.122.0/24    !192.168.122.0/24    masq ports: 1024-65535
62902 5535K MASQUERADE  all  --  *      *       192.168.122.0/24    !192.168.122.0/24

Chain OUTPUT (policy ACCEPT 412K packets, 28M bytes)
 pkts bytes target     prot opt in     out     source               destination

通过 MacvTap 直接挂在虚机到物理网卡

比较新的 kvm 中支持。基于原先的 MacVlan + tun。

原理是创建一个 tun 设备,直接绑定到指定的(物理)端口进行收发包,在系统中生成 [email protected] 类似格式的虚拟网卡。

# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:1a:64:99:f2:60 brd ff:ff:ff:ff:ff:ff
14: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 52:54:00:82:32:7e brd ff:ff:ff:ff:ff:ff
15: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 500
    link/ether 52:54:00:82:32:7e brd ff:ff:ff:ff:ff:ff
70: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:39:c8:23 brd ff:ff:ff:ff:ff:ff
71: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 500
    link/ether 52:54:00:66:79:1d brd ff:ff:ff:ff:ff:ff

共有四种模式:VEPA、bridge、private、passthrough。

libvirt 的配置文件中关键信息为

 <devices>
    ...
    <interface type=‘direct‘>
      <source dev=‘eth0‘ mode=‘vepa‘/>
    </interface>
  </devices>

VEPA (Virtual Ethernet Port Aggregator)

默认模式。多个虚拟机指定同一个接口(例如 eth0),通过该接口连接到外部的物理网络。但虚机之间的访问需要先绕到外部的物理(也可以配置为软交换机)交换机,然后由外部交换机进行转发,再绕回来。

需要外部交换机支持 Reflective Relay,或者发夹(Hairpin)模式,即从一个接口发上来的流量还能扔回去。

bridge

跟 VEPA 模式类似,但绑到同一接口上(不确定同一主机上多个网卡之间是否可以)上的多个虚机之间直接本地就转发到对应的 macvtap 设备上了,不需要到外面再绕回来。当然,要求源和目的虚机都配置为 bridge 模式。

private

虚拟机之间不能相互访问,即使外部交换机支持 Reflective Relay 也不成。除非虚机处在不同的子网,经过外面网关的转发再绕回来。要求源和目的虚机都配置为 private 模式。这种模式是不是很眼熟,多租户的公有云里面应该用处挺大。

passthrough

如果本地物理网卡支持 SRIOV,那虚机可以直接绑定到不同的 VF 上。这种模式支持虚机迁移。

连接到本地的软件交换机

例如 OpenvSwitch 等,可以先在软件交换机上创建一个 tap 接口,然后在 kvm 中指定绑定到这个 tap 接口。

跟 MACvTap 比,因为 tap 口已经创建了,直接绑定即可。

这种情况下跟 MACvTap 类似,本地系统不进行地址分配和 NAT 等,需要用户自己配置。

基本步骤

需要的脚本:

/etc/ovs-ifup
--------------------------------------------------------------------
#!/bin/sh

switch=‘br0‘
/sbin/ifconfig $1 0.0.0.0 up
ovs-vsctl add-port ${switch} $1
--------------------------------------------------------------------

/etc/ovs-ifdown
--------------------------------------------------------------------
#!/bin/sh

switch=‘br0‘
/sbin/ifconfig $1 0.0.0.0 down
ovs-vsctl del-port ${switch} $1
--------------------------------------------------------------------

创建网桥和虚拟接口。

# ovs-vsctl add-br br0
# ovs-vsctl add-port br0 eth0

启动虚拟机。

# kvm -m 512 -net nic,macaddr=00:11:22:EE:EE:EE -net \
tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown -drive \
file=/path/to/disk-image,boot=on

参考的 libvirt 虚机配置

[...]
    <interface type=‘bridge‘>
      <mac address=‘52:54:00:fb:00:01‘/>
      <source bridge=‘ovsbr0‘/>
      <virtualport type=‘openvswitch‘/>
      <model type=‘virtio‘/>
      <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x03‘ function=‘0x0‘/>
    </interface>
[...]

参考

  • https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-Virtualization_Administration_Guide-Virtual_Networking.html
  • http://seravo.fi/2012/virtualized-bridged-networking-with-macvtap
  • http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=blob_plain;f=INSTALL.KVM;hb=HEAD

转载请注明:http://blog.csdn.net/yeasy/article/details/43794865

时间: 2024-10-13 05:18:56

Libvirt/KVM 中的网络模式的相关文章

virtualBox中NAT网络模式下的ssh连接问题

最近在另一台电脑上更换了个虚拟机VirtualBox,这个虚拟机与Vmware使用上有很大的区别,首先这个虚拟机是免费的,其次网络配置会很简单,但习惯了Vmware的网络配置在VirtualBox中配置ssh远程操作上就遇到了不知道怎样连接了,下面就说下在virtualBox中NAT网络模式下的ssh连接问题,两个虚拟机在桥接模式下的ssh配置都是一样的,知识NAT模式下不同. ssh服务设置 yum list installed | grep openssh-server 查看是否存在ssh服

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命令

KVM 【SNAT/DNAT2种配置实现以及扁平化网络模式(flat)实现/virsh2种动态迁移实现】

------------------------------------------------------------------------- ###KVM SNAT配置过程 ------------------------------------------------------------------------- #增加一个br0网桥(不跟任何网卡绑定) brctl addbr br0 #激活网桥 ifconfig br0 up #给br0配置IP地址 ifconfig br0 10

Vmware中的三种网络模式

安装好 VMware workstation 后,在物理机的网络连接里面你可以看到多了两块网卡: VMnet1 是虚拟机Host-only模式的网络接口 VMnet8 是虚拟机 NAT 模式的网络接口 1.桥接模式(Bridged) 桥接模式:桥接模式下,VMware虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问虚拟机局域网内的任何一台机器.不过你需要多于一个的IP地址,并且需要手工为虚拟系统配置IP地址.子网掩码,而且还要和宿主机器处于同一个网段,这样虚拟系统才能和宿主机器以及和

VMware中的三种网络模式-----NAT模式

2.NAT模式(网络地址转换模式) NAT模式:使用NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网.也就是说使用NAT模式可以实现在虚拟系统里访问互联网. 例子: ①虚拟机中编辑网络模式,选择NAT模式: ②虚拟机中设置为网络连接的IP地址设置为自动获得: ③宿主机的VMnet8的网络连接IP设置为: ④网络拓扑图: 虚拟机通过VMnet8网卡与宿主机进行通信,在VMnet8的两端宿主机与虚拟机在同一网段. 虚拟机想要与外界网络进行通信,通过VMnet

VMware中的三种网络模式-----Host-only模式

3.Host-only模式(仅主机模式) Host-only模式:是一种封闭的网络模式,虚拟机只能与宿主机通过VMnet1进行通信.这种模式适合于在一个独立的环境中进行各种网络实验.这种模式与NAT模式的区别是没有地址转换服务,虚拟机只能访问到宿主机. 下面是一个关于Host-only使用的例子: ①虚拟机中编辑网络模式,选择Host-only模式: ②将虚拟机中网络连接的IP地址设置为: ③宿主机的VMnet1的网络连接IP设置为: ④网络拓扑图: 虚拟机通过VMNet1与宿主机进行通讯,但不

关于虚拟机里面三种网络模式的区别

最近在面试的时候被人问到虚拟机中的网络模式的区别.当时没有回答清楚,之后查了一下资料,总结了一下. 一.虚拟机中网络模式的分类 首先,在我们打开虚拟机后,打开设置选项,一共有三种网络模式,分别是host-only,桥接以及NAT模式.桥接模式简单来说就是不能上网,也不能和主机连接,因此在实际工作中应用不大.我们重点将介绍另外两种模式. 二.桥接模式,NAT模式的各个工作流程 2.1 桥接模式 桥接模式:简单来说,它就是把你的网卡当成是一个交换机,从而使得你的虚拟机和当前机器的网络是平级的.换句话

kvm 网络模式详解

今天我们来介绍下kvm虚拟机里面的网络模式,最常见的就是桥接模式和nat模式,其他还有比如仅主机模式等 1.桥接模式,先附上图看 可以看到这里的物理主机有自己的物理网卡 eth0,eth1,虚拟网卡vnet0,vnet1,网桥br0,虚拟机也有自己的网卡eth0,那么虚拟机数据包是如何访问外网的呢? 首先虚拟机的网卡eth0会对应物理主机的虚拟网卡vnet0,这两个是一一对应的关系,虚拟机数据包首先通过自己的网卡eth0 到达物理机的虚拟网卡vnet0,而vnet0和物理机的网卡eth0都桥接到

kvm网络模式

隔离模型 虚拟机网卡被分成前半段和后半段,彼此之间存在对应关系.前半段在虚拟机上通常表现为eth0.eth1等接口,后半段是物理主机上是一个虚拟接口,通常表现为vnet0.vnet1,与网桥关联(vnet0.vnet1通常称为tap设备).任何时候guest1发往eth0的报文都发往vnet0,guest2发往eth0的报文都发往vnet1,vnet0和vnet1是网桥(虚拟交换机)上的接口,guest1和guest2通信则通过网桥才能进行通信,实现二层通信.(即相当于guest1和guest2