kvm网络模式

隔离模型

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

网桥上没有关联物理网卡,所有隔离模型无法与外部网络进行通信也无法与主机自身通信。隔离模型类似于vmware中的VMnet2、VMnet3等虚拟通道。

路由模型

隔离模型中在物理机上添加一个虚拟网卡并将该虚拟网卡后半段关联至网桥,只要虚拟机中网卡和该虚拟网卡后半段IP地址设置成同一个网段,guest1和guest2和物理机的虚拟网卡就能够通信了,但是还是无法与物理机之外的网络通信。可以将guest的网关指向物理机虚拟网卡的地址,并且在物理机上打开核心转发功能,guest就能够实现与外部网络进行通信。
这样存在一个问题:guest收不到外部网络回应的报文,路由模型需要在外部网络中为guest网段添加回程路由,这样会相当麻烦。即路由模型可以与外部网路进行通信了,但是无法作为通信目标使用。

NAT模型

为了解决路由模型中存在的问题,在物理主机上添加一个nat server,所有来自内部的报文通过物理网卡出去之前都将源地址转化成物理网卡的地址,所有的回应报文也都将回应给物理网卡,物理网卡由nat会话表再将物理网卡的地址转化回内部主机的地址。

桥接模型

桥接即在物理机上创建一个网桥并关联物理网卡至网桥,一旦将网卡设置为网桥可以将物理网卡看成是一台交换机,同时也会在物理机上为该物理网卡创建一个虚拟网卡(br0)并将物理网卡原本使用的MAC地址放至br0,同时物理网卡打开混杂模式(不管报文的目标mac地址是不是自身,该网卡将报文全部接收)。这样所有guest通过eth*发往vnet*的报文直接发往该网桥,而网桥有上关联了物理网卡,从而来自guest的报文直接从物理网卡发出;当网卡收到回应报文时,因为开启了混杂模式会接收所有的报文,报文目标MAC如果是的物理网卡就会将回应报文转交给br0,报文目标MAC如果是虚拟机就会将回应报文转虚拟机对应的网卡。(即物理网卡本身就相当于一个交换机)

测试环境

虚拟机网段:10.0.100.0/24;物理主机ip地址:192.168.1.230(eth3);用于测试的外部网络地址:192.168.1.25。

添加一个网桥

依赖的软件包是bridge-utils

依赖的模块:即在内核级别软件模拟一个软交换机,即使用bridge-utils向内核发指令,由内核创建网桥设备,网桥是在内核中实现的。

#brctl -h     查看帮助信息

#brctl addbr br0     添加网桥设备,命名为br0

#brctl stp br0 off    关闭stp

#ifconfig -a

表现为一个网络接口,使用ifconfig无法查看,原因是br0未激活。

#brctl show  查看当前主机上的所有桥设备

#ip link set dev br0 up   激活接口

注意:以上添加网桥的方式,重启后就消失了。要想永久生效,需要自定义脚本,创建kvm虚拟机时同时指定脚本路径。

#!/bin/bash
#
bridge=br0

if [ -n "$1" ];then
        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

/etc/qemu-ifup

#!/bin/bash
#
bridge=br0

if [ -n "$1" ];then
        brctl delif $bridge $1
        ip link set $1 down
        exit 0
 else
        echo "Error: no interface specified."
        exit 1
fi

/etc/qemu-ifdown

#chmod +x /etc/qemu-ifup

#chmod +x /etc/qemu-ifdown

设置隔离模型

#brctl addbr br0

#ip link set dev br0 up    激活网桥

添加第一台虚拟机至网桥

#qemu-kvm -m 128 -cpu host -smp 2 -name "test1" -drive file=/image/cirros-no_cloud-0.3.0-x86_64-disk.img,if=virtio,media=disk,format=qcow2,cache=writeba
ck -nographic -net nic -net tap,ifname=vif0.0,script=/etc/qemu-ifup

  添加第二台虚拟机至同一网桥

#qemu-kvm -m 128 -cpu host -smp 2 -name "test2" -drive file=/image/cirros-no_cloud-0.3.0-x86_64-disk.img,if=virtio,media=disk,format=qcow2,cache=writeba
ck -nographic -net nic,macaddr=52:54:00:12:34:57 -net tap,ifname=vif1.0,script=/etc/qemu-ifup

#ifconfig    在物理机上查看创建的tap设备(即后半段)

#brctl show    查看网桥关联的tap设备

分别为创建的虚拟机网卡设置ip地址,两台虚拟机就可以正常通信:

虚拟机1:

#ifconfig eth0 10.0.100.1/24

虚拟机2:

ifconfig eth0 10.0.100.2/24d

设置路由模型

在上述隔离模式的基础上执行以下操作。

在物理机上添加一块虚拟网卡(前半段和后半段):

#ip link add veth1.0 type veth peer veth1.1

#ifconfig -a     查看生成的虚拟网卡

激活网卡:

#ip link set veth0 up

#ip link set veth0.1 up

将veth1:0(后半段)关联至网桥:

#brctl addif br0 veth1.0

查看网桥上关联的接口:

#brctl show

为veth0(前半段)配置ip地址:

#ifconfig veth0 10.0.100.3/24

此时虚拟机1和虚拟机2能够与veth0虚拟接口进行通信,要实现虚拟机能够与物理机物理网卡通信,要在虚拟机上指定网关(网关为veth0):

虚拟机1:

#route add default gw 10.0.100.3

虚拟机2:

#route add default gw 10.0.100.3

此时虚拟机能够与网络主机通信,要实现虚拟机与外部网络通信,主机要开启核心转发功能:

#echo 1 > /proc/sys/net/ipv4/ip_forward

存在的问题是:无法收到回包,可以通过在外部网络中添加路由实现(这种方式不太现实),也可以通过NAT模式实现(这种方式比较理想)。

设置NAT模型

添加iptables规则:

#iptables -t nat -A POSTROUTING -s 10.0.100.0/24 -o eth3 -j SNAT --to-source 192.168.1.230

#iptables -t nat -L -n

#tcpdump -i veth0 -nn icmp    抓包查看ping过程

测试发现虚拟机无法ping通外部网络,导致的原因是通信链太长,如下图:

在上述的网络模式中,br0作为一个网桥,在主机上显示的是一个虚拟网卡即ifconfig查看是一个虚拟网卡,同时主机又添加了一张虚拟网卡(虚拟网卡的前半段关联至网桥,即在物理机上多了两个虚拟接口)。这样会导致整个通信链过长。由于br0本身就是虚拟网卡,可以直接在br0设置一个ip地址作为虚拟机的网关,完全没有必要在物理机上再生成一张虚拟网卡。

删除虚拟网卡:

#ip link delete veth1.0 type veth

为br0配置IP地址:

#ifconfig br0 10.0.100.3

这时就可以ping通外部网络了。可以通过抓包查看地址转换过程:

#tcpdump -i br0 -nn icmp

#tcpdump -i eth3 -nn icmp

设置桥接模型

在桥接模型下,需要将物理网卡关联至网桥而且网桥上不能配置地址,再上述的环境中实现要先拆除网桥上配置的地址:

#ip addr del 10.0.100.3/24 dev br0

删除物理网卡上的IP地址;将物理网卡添加至br0上;为br0配置地址(原先eth3的地址配置在br0上):

#ip addr del 192.168.1.230 dev eth3; brctl addif br0 eth3; ip addr add 192.168.1.230 dev br0;

#ifconfig   此时的地址在br0上,物理网卡eth3无地址

#brctl show  网桥上关联了一张物理网卡和两个虚拟机网卡的后半段即虚拟网卡的后半段直接关联至物理网卡

设置虚拟机地址:

虚拟机1:

#ifconfig eth0 192.168.1.67/24

虚拟机2:

#ifconfig eth0 192.168.1.68/24

测试:虚拟机可以直接ping通外部网络

虚拟机1:

#ping 192.168.1.230  通

#ping 192.168.1.25  通

原文地址:https://www.cnblogs.com/lriwu/p/9248448.html

时间: 2024-08-27 17:52:55

kvm网络模式的相关文章

kvm 网络模式详解

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

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

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

KVM修改网络模式为Bridge后,原有虚拟机该如何修改配置

场景说明:KVM虚拟机之前没有设置为Bridge模式,然后就直接创建虚拟机了(当时网卡模式选择的为default),后来调整KVM网卡模式为Bridge后,虚拟机没法正常联网. [[email protected] ~]# virsh shudown CentOS-7.3-X86_64 [[email protected] ~]# virsh edit CentOS-7.3-X86_64 将xml配置文件中的:     <interface type='network'>       <

KVM网卡模式(NAT/UserNetworking)

在默认情况下,如果不指定任何网络模式的话,kvm会默默的为我们选择NAT模式,除了NAT之外还有Bridge及Vlan模式. User Networking(NAT模式) 采用该模式,不需要对宿主机进行任何额外配置.正常情况下虚拟机可以直接访问宿主机的物理网络.宿主机无法访问虚拟机. 好处是简单.无需任何配置,如果宿主机可以上网则虚拟机也可以上网. 坏处是虚拟机与虚拟机之间网络不可达.ICMP协议无法正常工作(即ping功能不能正常返回值).NAT采用的是转发机制,因此效率比较低. # 宿主机:

通过ssh访问NAT网络模式虚拟机里的Linux

进入 GuestOS : #/sbin/ifconfig 查看 inet addr : 10.0.2.15 然后到 HostOS 去, 看控制面板, 看网络和共享中心的VirtualBox Host-Only Network 的 ipv4 属性的ip 地址:192.168.56.1 准备够了, 下面果断配置: Notes: ssh 的默认端口是 22 打开virtualbox 的设置窗口 -〉网络-〉 Adapter1 启用 网络连接-〉连接方式:Nat -> 接入网线-> Port Forw

Windows和linux虚拟机之间联网实现SSH远程连接以及VMware的3种网络模式[NAT、桥接和Host-only]

Windows和linux虚拟机之间联网实现SSH远程连接以及VMware的3种网络模式[NAT.桥接和Host-only] 作者:天齐 一.Windows和linux虚拟机之间联网实现SSH远程连接 假如我们要给主机名为mini1的虚拟机配置ip地址,需要以下几个步骤: 在linux上查看ip地址,如果linux服务器有ip地址,让它的ip地址和windows的ip地址在同一个网段,它们之间才能联网.在linux上查看ip地址的命令为"ifconfig": 发现eth0网卡没有配置i

虚拟机三种网络模式的选择和讲解。

很多人安装虚拟机的时候,经常遇到不能上网的问题,而vmware有三种网络模式,对初学者来说也比较眼花聊乱,今天我就来基于虚拟机3种网络模式,帮大家普及下虚拟机上网的背景知识.(博文原创自http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646007.html) 虚拟机网络模式 无论是vmware,virtual box,virtual pc等虚拟机软件,一般来说,虚拟机有三种网络模式: 1.桥接 2.NAT 3.Host-Only 初学者看

VMWare虚拟机bridged、host-only和NAT网络模式的区别和用法

VMWare提供了三种工作模式,它们是bridged(bridged 模式).NAT( 网络地址转换模式)和host-only(主机模式) . 1  VMWare虚拟机bridged.host-only和NAT网络模式的区别 1.1 bridged(桥接模式) 在bridged 模式下, VMWare 虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在bridged模式下,你需要手工为虚拟系统配置I P 地址.子网掩码, 而且还要和宿主机器处于同一网段, 这样虚拟系

ClouStack4.5(高级网络模式)+Xen

一.环境 1.软件信息 名称 版本 备注 CloudStack 4.5.x Centos 6.7 Mysql 5.x 系统自带 Tomcat 6.x/7.x 系统自带 XenServer 6.5 2.硬件信息 名称 配置 类型 IP 数量 CloudStack 管理节点 2C/4G 管理节点 192.168.16.242 1 XenServer 4C/8G 资源节点 192.168.16.245/246 2 NFS存储 2c/4G 存储节点 192.168.16.247 1 3.网络信息 CS中