linux网络虚拟化

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

(KVM连载)4.4.1 QEMU支持的网络模式

KVM虚拟化原理与实践(连载)

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 forever14: 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]# lltotal 0drwxr-xr-x 7 root root 0 8月   3 16:42 br0drwxr-xr-x 5 root root 0 8月   3 16:20 lodrwxr-xr-x 6 root root 0 8月   3 17:51 tap0drwxr-xr-x 6 root root 0 8月   3 17:51 tap1drwxr-xr-x 7 root root 0 8月   3 16:20 virbr0drwxr-xr-x 6 root root 0 8月   3 16:20 virbr0-nic[root@2nd-kvm net]# ll /dev/nettotal 0crw-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-listName                State      Autostart-----------------------------------------default              active    yes# virsh net-destroy defaultNetwork default destroyed# virsh net-undefine defaultNetwork default has been undefined# service libvirtd restartStopping libvirtd daemon:                                  [  OK  ]Starting libvirtd daemon:                                  [  OK  ]