kvm虚拟化网络管理(5)

一、Linux Bridge网桥管理

网络虚拟化是虚拟化技术中最复杂的部分,也是非常重要的资源。

第一节中我们创建了一个名为br0的linux-bridge网桥,如果在此网桥上新建一台vm,如下图:

kvm虚拟化网络管理(5)

VM2 的虚拟网卡 vnet1 也连接到了 br0 上。 现在 VM1 和 VM2 之间可以通信,同时 VM1 和 VM2 也都可以与外网通信。

查看网络状态:

kvm虚拟化网络管理(5)

用brctl show 显示当前网桥连接状态:

kvm虚拟化网络管理(5)

brctl命令详解:

kvm虚拟化网络管理(5)

二、VLAN介绍

  LAN 表示 Local Area Network,本地局域网,通常使用 Hub 和 Switch 来连接 LAN 中的计算机。一般来说,两台计算机连入同一个 Hub 或者 Switch 时,它们就在同一个 LAN 中。
  一个 LAN 表示一个广播域。 其含义是:LAN 中的所有成员都会收到任意一个成员发出的广播包。
  VLAN 表示 Virtual LAN。一个带有 VLAN 功能的switch 能够将自己的端口划分出多个 LAN。计算机发出的广播包可以被同一个 LAN 中其他计算机收到,但位于其他 LAN 的计算机则无法收到。 简单地说,VLAN 将一个交换机分成了多个交换机,限制了广播的范围,在二层将计算机隔离到不同的 VLAN 中。
  比方说,有两组机器,Group A 和 B,我们想配置成 Group A 中的机器可以相互访问,Group B 中的机器也可以相互访问,但是 A 和 B 中的机器无法互相访问。 一种方法是使用两个交换机,A 和 B 分别接到一个交换机。 另一种方法是使用一个带 VLAN 功能的交换机,将 A 和 B 的机器分别放到不同的 VLAN 中。

  VLAN 的隔离是二层上的隔离,A 和 B 无法相互访问指的是二层广播包(比如 arp)无法跨越 VLAN 的边界。但在三层上(比如IP)是可以通过路由器让 A 和 B 互通的。
  现在的交换机几乎都是支持 VLAN 的。 通常交换机的端口有两种配置模式: AccessTrunk。如下图

kvm虚拟化网络管理(5)

Access 口
  这些端口被打上了 VLAN 的标签,表明该端口属于哪个 VLAN。 不同 VLAN 用 VLAN ID 来区分,VLAN ID 的 范围是 1-4096。 Access 口都是直接与计算机网卡相连的,这样从该网卡出来的数据包流入 Access 口后就被打上了所在 VLAN 的标签。 Access 口只能属于一个 VLAN。
Trunk 口
  假设有两个交换机 A 和 B。 A 上有 VLAN1(红)、VLAN2(黄)、VLAN3(蓝);B 上也有 VLAN1、2、3,那如何让 AB 上相同 VLAN 之间能够通信呢?
办法是将 A 和 B 连起来,而且连接 A 和 B 的端口要允许 VLAN1、2、3 三个 VLAN 的数据都能够通过。这样的端口就是Trunk口了。 VLAN1, 2, 3 的数据包在通过 Trunk 口到达对方交换机的过程中始终带着自己的 VLAN 标签。

三、Linux Bridge实现Vlan的原理

KVM 虚拟化环境下实现 VLAN 架构,如下图

kvm虚拟化网络管理(5)

  eth0 是宿主机上的物理网卡,有一个命名为 eth0.10 的子设备与之相连。 eth0.10 就是 VLAN 设备了,其 VLAN ID 就是 VLAN 10。 eth0.10 挂在命名为 brvlan10 的 Linux Bridge 上,虚机 VM1 的虚拟网卡 vent0 也挂在 brvlan10 上。

  这样的配置其效果就是: 宿主机用软件实现了一个交换机(当然是虚拟的),上面定义了一个 VLAN10。 eth0.10,brvlan10 和 vnet0 都分别接到 VLAN10 的 Access口上。而 eth0 就是一个 Trunk 口。VM1 通过 vnet0 发出来的数据包会被打上 VLAN10 的标签。
eth0.10 的作用是:定义了 VLAN10
brvlan10 的作用是:Bridge 上的其他网络设备自动加入到 VLAN10 中

增加一个 VLAN20,如下图

kvm虚拟化网络管理(5)

  这样虚拟交换机就有两个 VLAN 了,VM1 和 VM2 分别属于 VLAN10 和 VLAN20。

  对于新创建的虚机,只需要将其虚拟网卡放入相应的 Bridge,就能控制其所属的 VLAN。
  VLAN 设备总是以母子关系出现,母子设备之间是一对多的关系。 一个母设备(eth0)可以有多个子设备(eth0.10,eth0.20 ……),而一个子设备只有一个母设备。

四、Linux Bridge实现Vlan

1、查看核心是否提供VLAN功能

[root@ren11 ~]# dmesg | grep -i 802

或者检查/proc/net/vlan目录是否存在;如果没有提供VLAN功能,/proc/net/vlan目录是不存在的。

kvm虚拟化网络管理(5)

如果8021q模块没有载入系统,则可以通过使用modprobe模组命令载入802.1q模组,并利用lsmod命令确认模组是否已经载入到核心内。

[root@ren11 ~]# modprobe 8021q
[root@ren11 ~]# lsmod | grep 8021q

kvm虚拟化网络管理(5)

设置开机载入8021q模块(可选)
在/etc/sysconfig/modules下增加一个8021q.modules文件,文件内容为modprobe 8021q

vim /etc/sysconfig/modules/8021q.modules
modprobe 8021q

2、安装用于查看VLAN配置的工具---vconfig

提前装备好vconfig-1.9-16.el7.x86_64.rpm

[root@ren11 ~]# rpm -ivh vconfig-1.9-16.el7.x86_64.rpm 

kvm虚拟化网络管理(5)

3、创建VLAN接口

(1)创建vlan接口前,在设备上添加一块网卡ens37。

kvm虚拟化网络管理(5)

(2)网络配置如图:

kvm虚拟化网络管理(5)

注意:将BOOTPROTO=static

(3)基于网卡ens37建立vlan10,vlan20接口:ens37.10,ens37.20:

vconfig add ens37 10
vconfig add ens37 20

kvm虚拟化网络管理(5)

kvm虚拟化网络管理(5)

vconfig命令:

kvm虚拟化网络管理(5)

(4)创建ens37.10接口配置文件

[root@ren11 ~]# cd /etc/sysconfig/network-scripts/
[root@ren11 network-scripts]# cp ifcfg-ens37 ifcfg-ens37.10
[root@ren11 network-scripts]# vim ifcfg-ens37.10 
VLAN=yes
TYPE=vlan
PHYSDEV=ens37
VLAN_ID=10
NAME=ens37.10
ONBOOT=yes
ZONE=trusted
DEVICE=ens37.10
BRIDGE=brvlan-10

(5)创建ens37.20接口配置文件

[root@ren11 network-scripts]# cp ifcfg-ens37.10 ifcfg-ens37.20
[root@ren11 network-scripts]# vim ifcfg-ens37.20 
VLAN=yes
TYPE=vlan
PHYSDEV=ens37
VLAN_ID=20
NAME=ens37.20
ONBOOT=yes
ZONE=trusted
DEVICE=ens37.20
BRIDGE=brvlan-20

4、分别建立网桥brvlan-10,brvlan-20

brctl addbr brvlan-10
brctl addbr brvlan-20

kvm虚拟化网络管理(5)

5、编辑网桥brvlan-10和brvlan-20配置文件:

#vim ifcfg-brvlan-10
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-10
DEVICE=brvlan-10
ONBOOT=yes
#vim ifcfg-brvlan-20
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-20
DEVICE=brvlan-20
ONBOOT=yes

6、将网桥brvlan-10接到网口ens37.10,brvlan-20接到网口ens37.20

brctl addif brvlan-10 ens34.10
brctl addif brvlan-20 ens34.20

kvm虚拟化网络管理(5)

7、重新启动网络服务

systemctl restart network
[root@ren11 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:0c:29:de:8b:ff brd ff:ff:ff:ff:ff:ff
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:de:8b:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.6.130/24 brd 192.168.6.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fede:8b09/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:99:d3:26 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:99:d3:26 brd ff:ff:ff:ff:ff:ff
7: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether fe:54:00:16:f2:bd brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe16:f2bd/64 scope link 
       valid_lft forever preferred_lft forever
9: ens37.10@ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master brvlan-10 state UP group default qlen 1000
    link/ether 00:0c:29:de:8b:09 brd ff:ff:ff:ff:ff:ff
10: ens37.20@ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master brvlan-20 state UP group default qlen 1000
    link/ether 00:0c:29:de:8b:09 brd ff:ff:ff:ff:ff:ff
11: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0c:29:de:8b:ff brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.11/24 brd 192.168.11.255 scope global noprefixroute br0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fede:8bff/64 scope link 
       valid_lft forever preferred_lft forever
12: brvlan-10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0c:29:de:8b:09 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::20c:29ff:fede:8b09/64 scope link 
       valid_lft forever preferred_lft forever
13: brvlan-20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0c:29:de:8b:09 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::20c:29ff:fede:8b09/64 scope link 
       valid_lft forever preferred_lft forever

五、vlan模式测试虚机

先将NetworkManager服务关闭
1、在宿主机中已经提前创建好了虚机 VM1
在 virt-manager 中将 VM1 的虚拟网卡挂到 brvlan-10 上

(2)从VM1克隆一台虚机VM2
virst-clone -o vm1 -n vm2 -f /var/lib/libvirt/images/vm2.qcow2

(3)启动VM1和VM2,并配置ip
(4)查看 Bridge,发现 brvlan10 已经连接了 vnet0 vnet1设备。

 

上一篇:NOIP2016提高组初赛(2)四、读程序写结果3、求最长回文子序列


下一篇:db2数组、函数