图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN

http://smilejay.com/2012/08/qemu-kvm-networking-mode/

http://smilejay.com/kvm_theory_practice/

http://smilejay.com/2012/08/kvm-sdl-display/
http://smilejay.com/kvm-principles-and-practices/
http://smilejay.com/2013/12/qemu-kvm-install-guest-in-text-mode/

http://www.diyoms.com/cloud/836.html
http://www.diyoms.com/cloud/827.html

在安装系统时就把桥做好,然后装完进入系统后
systemctl disable NetworkManager
systemctl disable wpa_supplicant
systemctl disable irqbalance
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
reboot
重启后桥丢失,通过systemctl status network发现报错提示没有brctl这个命令
因为默认没有安装bridge-utils这个包,那么由NetworkManager来管理维护桥,这时候NetworkManager又被禁用了,所以不能启动网络

结论就是如果不安装bridge-utils这个包,那么就不应禁用NetworkManager

ip addr add 192.168.0.193/24 dev wlan0
ip addr del 192.168.0.193/24 dev wlan0

在我们安装好虚拟化组件(RHEL6.0之后,系统自带的均是KVM,已经没有XEN虚拟化的支持了),会自动生成一个virbr0这样的桥接设备
[root@clovemzone ~]# brctl  show
bridge name    bridge id        STP enabled    interfaces
virbr0      8000.5254007543ce    yes          virbr0-nic
按照这篇文中所说:http://www.linuxidc.com/Linux/2013-08/88720.htm ,virbr0默认使用的是NAT方式跟虚拟机网卡进行通讯,在实际生产环境中我们多数情况下面使用桥接Bridge的方式进行物理机跟虚拟机的通讯,删除这个virbr0的方法在上面给出的链接中已经说明,这篇文章主要讲述Bridge的简单实现原理以及实际配置方法。
 
安装 Xen 或安装 KVM 后都会发现网络接口里多了一个叫做 virbr0 的虚拟网络接口:        
这是由于安装和启用了 libvirt 服务后生成的,libvirt 在服务器(host)上生成一个 virtual network switch (virbr0),host 上所有的虚拟机(guests)通过这个 virbr0 连起来。默认情况下 virbr0 使用的是 NAT 模式(采用 IP Masquerade),所以这种情况下 guest 通过 host 才能访问外部。
大多数时候我们虚拟机使用的是 bridge(网桥)直接连到局域网里,所以这个 virbr0 不是必须的(注:不要搞混淆了,bridge 和这里的 virbr0 bridge 是互不相干的)。如何关掉这个 virbr0 呢?先 net-destroy 然后 net-undefine,最后别忘了重启 libvirtd 让设置生效:
# virsh net-list
Name                State      Autostart
-----------------------------------------
default              active    yes
# virsh net-destroy default
Network default destroyed
# virsh net-undefine default
Network default has been undefined
# service libvirtd restart
Stopping libvirtd daemon:                                  [  OK  ]
Starting libvirtd daemon:                                  [  OK  ]

NM_CONTROLLED这个属性值,根据redhat公司的文档是必须设置为“no”的(这个值为“yes”表示可以由服务NetworkManager来管理。NetworkManager服务不支持桥接,所以要设置为“no”。),但实际上发现设置为“yes”没有问题。通讯正常。
编辑修改虚拟机配置文件 /etc/libvirt/qemu/v1.xml,增加如下内容

<interface type='bridge'>
      <mac address='52:54:00:da:c3:dc'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

今天在VMWare WorkStation9中安装了CentOS7虚拟机。虚拟机与宿主机网络连接有三种方式:桥接模式、NAT模式和Host Only模式。
    
KVM虚拟机网络配置的两种方式:NAT方式和Bridge方式。Bridge方式的配置原理和步骤。Bridge方式适用于服务器主机的虚拟化。

KVM 客户机网络连接有两种方式:
    用户网络(User Networking):让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机,性能上也需要大的调整。NAT方式。
    虚拟网桥(Virtual Bridge):这种方式要比用户网络复杂一些,但是设置好后客户机与互联网,客户机与主机之间的通信都很容易。Bridge方式。

Linux 抽象网络设备简介

和磁盘设备类似,Linux 用户想要使用网络功能,不能通过直接操作硬件完成,而需要直接或间接的操作一个 Linux 为我们抽象出来的设备,既通用的 Linux 网络设备来完成。一个常见的情况是,系统里装有一个硬件网卡,Linux 会在系统里为其生成一个网络设备实例,如 eth0,用户需要对 eth0 发出命令以配置或使用它了。更多的硬件会带来更多的设备实例,虚拟的硬件也会带来更多的设备实例。随着网络技术,虚拟化技术的发展,更多的高级网络设备被加入了到了 Linux 中,使得情况变得更加复杂。在以下章节中,将一一分析在虚拟化技术中经常使用的几种 Linux 网络设备抽象类型:Bridge、802.1.q VLAN device、VETH、TAP,详细解释如何用它们配合 Linux 中的 Route table、IP table 简单的创建出本地虚拟网络。

如果已安装 VLAN 内核模块和管理工具 vconfig,TAP/TUN 设备管理工具 tunctl

[root@localhost ~]# modprobe -l|grep vlan
kernel/drivers/net/macvlan.ko
kernel/net/bridge/netfilter/ebt_vlan.ko

[root@1st-kvm ~]# lsmod |grep vlan
[root@1st-kvm ~]# modprobe ebt_vlan
[root@1st-kvm ~]# lsmod |grep vlan
ebt_vlan               12911  0

The vconfig program configures and adjusts 802.1q VLAN parameters.
This tool is deprecated in favor of "ip link" command.
这个工具已经降级,取而代之的是ip link命令

查询 VLAN 设备情况:cat /proc/net/vlan/[VLAN DEVICE NAME]
    创建 VETH 设备:ip link add link [DEVICE NAME] type veth
    创建 TAP 设备:tunctl -p [TAP DEVICE NAME]
    删除 TAP 设备:tunctl -d [TAP DEVICE NAME]
    查询系统里所有二层设备,包括 VETH/TAP 设备:ip link show
    删除普通二层设备:ip link delete [DEVICE NAME] type [TYPE]

tap参数,表明使用TAP设备。TAP是虚拟网络设备,它仿真了一个数据链路层设备(ISO七层网络结构的第二层),它像以太网的数据帧一样处理第二层数据报。
而TUN与TAP类似,也是一种虚拟网络设备,它是对网络层设备的仿真。TAP被用于创建一个网络桥,而TUN与路由相关。 同时启动两个虚拟机
295 /usr/libexec/qemu-kvm -boot dc -hda disk/cs65-2.qcow2 -m 1024 -vnc :1 -net bridge -net nic -daemonize
296 /usr/libexec/qemu-kvm -boot dc -hda disk/cs65.qcow2 -m 1024 -vnc :2 -net bridge -net nic -daemonize 生成两个tap虚拟设备
13: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN qlen 500
link/ether fe:4e:d4:29:d1:ea brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc4e:d4ff:fe29:d1ea/64 scope link
valid_lft forever preferred_lft forever
14: tap1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN qlen 500
link/ether fe:7c:80:c8:9a:f9 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc7c:80ff:fec8:9af9/64 scope link
valid_lft forever preferred_lft forever
但是这两个虚拟机的网卡ip与mac是一样的
[root@2nd-kvm net]# pwd
/sys/devices/virtual/net
[root@2nd-kvm net]# ll
total 0
drwxr-xr-x 7 root root 0 8月 3 16:42 br0
drwxr-xr-x 5 root root 0 8月 3 16:20 lo
drwxr-xr-x 6 root root 0 8月 3 17:51 tap0
drwxr-xr-x 6 root root 0 8月 3 17:51 tap1
drwxr-xr-x 7 root root 0 8月 3 16:20 virbr0
drwxr-xr-x 6 root root 0 8月 3 16:20 virbr0-nic [root@2nd-kvm net]# ll /dev/net
total 0
crw-rw-rw- 1 root root 10, 200 8月 3 16:20 tun 如果是2块物理网卡冗余, 采用这样的方式,eth0 和 eth1 绑定成 bond0,br0 再绑定 bond0,客户机tap加入br0。可行吗? 可以的啊,我就这样用过的,先建立bond0,再用它建立br0。宿主机双网卡,可以考虑3个用途:1. 就是你自己说的那样;2. 独立建立两个bridge,给不同的客户机用;3.可以将一个网卡VT-d直接分配给对网络要求很高的虚拟机,另一个建立br0做普通用途。 大多数时候我们虚拟机使用的是 bridge(网桥)直接连到局域网里,所以这个 virbr0 不是必须的(注:不要搞混淆了,bridge 和这里的 virbr0 bridge 是互不相干的)。如何关掉这个 virbr0 呢?先 net-destroy 然后 net-undefine,最后别忘了重启 libvirtd 让设置生效:
# virsh net-list
Name State Autostart
-----------------------------------------
default active yes
# virsh net-destroy default
Network default destroyed
# virsh net-undefine default
Network default has been undefined
# service libvirtd restart
Stopping libvirtd daemon: [ OK ]
Starting libvirtd daemon: [ OK ]

linux网络虚拟化的更多相关文章

  1. Docker核心实现技术(命名空间&控制组&联合文件系统&Linux网络虚拟化支持)

    作为一种容器虚拟化技术,Docker深度应用了操作系统的多项底层支持技术. 早期版本的Docker是基于已经成熟的Linux Container(LXC)技术实现的.自Docker 0.9版本起,Do ...

  2. linux 网络虚拟化: network namespace 简介

    linux 网络虚拟化: network namespace 简介 network namespace 是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息.不管是虚拟机还是 ...

  3. 【 Linux 网络虚拟化 】Netns

    netns 可以创建一个完全隔离的新网络环境,这个环境包括一个独立的网卡空间,路由表,ARP表,ip地址表,iptables等.总之,与网络有关的组件都是独立的. 创建网络空间: # ip netns ...

  4. 网络虚拟化技术(一): Linux网络虚拟化

    创建虚拟网络环境 使用命令 $ ip netns add net0 可以创建一个完全隔离的新网络环境,这个环境包括一个独立的网卡空间,路由表,ARP表,ip地址表,iptables,ebtables, ...

  5. 【 Linux 网络虚拟化 】Openvswitch

    openvswitch:    openvswitch: 开放的虚拟交换机,虚拟交换就是利用虚拟平台,通过软件的方式形成交换机部件.跟传统的物理交换机相比,虚拟交换机同样具备众多优点:         ...

  6. 理解 Linux 网络栈(2):非虚拟化Linux 环境中的 Segmentation Offloading 技术

    本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + Vx ...

  7. 网络虚拟化基础一:linux名称空间Namespaces

    一 介绍 如果把linux操作系统比作一个大房子,那命名空间指的就是这个房子中的一个个房间,住在每个房间里的人都自以为独享了整个房子的资源,但其实大家仅仅只是在共享的基础之上互相隔离,共享指的是共享全 ...

  8. KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)

    网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 Open ...

  9. 理解 Linux 网络栈(3):QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(发送端)

    本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + Vx ...

随机推荐

  1. 转: Vue.js——60分钟组件快速入门(上篇)

    转自: http://www.cnblogs.com/keepfool/p/5625583.html Vue.js——60分钟组件快速入门(上篇)   组件简介 组件系统是Vue.js其中一个重要的概 ...

  2. Ubuntu 16.04服务器安装及软件配置

    1.配置静态地址 vim /etc/network/interfaces auto enp1s0 iface enp1s0 inet static address 192.168.1.131 netm ...

  3. javascript复习总结

    改变HTML内容:document.getElementById(id).innerHTML = new HTML; 改变HTML属性:document.getElementById(id).inne ...

  4. Java数据库操作

    一.JDBC 1.JDBC Java数据库连接,用于Java程序中实现数据库操作功能,java.sql包中提供了执行SQL语句,访问各种数据库的方法,并为各种不同的数据库提供统一的操作接口及类. 2. ...

  5. HDU 1372 Knight Moves

    最近在学习广搜  这道题同样是一道简单广搜题=0= 题意:(百度复制粘贴0.0) 题意:给出骑士的骑士位置和目标位置,计算骑士要走多少步 思路:首先要做这道题必须要理解国际象棋中骑士的走法,国际象棋中 ...

  6. WCF初探-24:WCF序列化和反序列化

    前言 WCF包含很多封装的内部机制,这些是我们在编写程序时不会经常看到的.比如上一篇讲解的Message.这一篇我将讲解WCF的另一种内部机制,WCF的序列化和反序列化.通常我们在编写WCF服务程序的 ...

  7. Android ImageView的scaleType属性与adjustViewBounds属性

    ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fi ...

  8. McAfee重返科技业 研制D-Central防政府监视

    新闻链接:http://tech.qq.com/a/20131008/016127.htm 新闻时间: 10月8日编译 新闻正文:McAfee重返科技业 研制D-Central防政府监视 约翰·迈克菲 ...

  9. Xceed Ultimate Suite Xceed界面控件套包下载

    Xceed Ultimate Suites是一款用户界面.数据处理套包,从.NET/WPF/silverLight平台到ActiveX下包含了65个子控件,以及Xceed公司的所有控件,具有表格.风格 ...

  10. IIS+PHP配置一次成功无错误版

    1.首先去PHP官网下载php的压缩包(.zip),由于web服务器是IIS所以尽量使用线程不安全版本的,我下载的是: VC11 x86 Non Thread Safe (2015-May-14 18 ...