首页 > 其他 > 详细

kvm虚拟化网络管理

时间:2019-05-29 18:47:33      阅读:111      评论:0      收藏:0      [点我收藏+]

一、Linux Bridge网桥管理

网络虚拟化是虚拟化技术中最复杂的部分,也是非常重要的资源。
第一节中我们创建了一个名为br0的linux-bridge网桥,如果在此网桥上新建一台vm,如下图:

技术分享图片

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

查看网络状态:

技术分享图片

 

brct的一些常用命令:

[root@localhost network-scripts]# brctl --help
Usage: brctl [commands]
commands:
    addbr         <bridge>        #增加网桥
    delbr         <bridge>         #删除网桥
    addif         <bridge> <device>    #连接网口与网桥
    delif         <bridge> <device>    删除网口与网桥的链接
    show          [ <bridge> ]         
[root@localhost network-scripts]# 

 

二、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 的。

通常交换机的端口有两种配置模式: Access 和 Trunk。如下图

技术分享图片

 

Access 口(封装在一个vlan口
这些端口被打上了 VLAN 的标签,表明该端口属于哪个 VLAN。 不同 VLAN 用 VLAN ID 来区分,VLAN ID 的 范围是 1-4096。 Access 口都是直接与计算机网卡相连的,这样从该网卡出来的数据包流入 Access 口后就被打上了所在 VLAN 的标签。 Access 口只能属于一个 VLAN


Trunk 口(任何vlan口都可以通过
假设有两个交换机 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 架构,如下图

 技术分享图片

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 中

 

技术分享图片

 

如图ens37充当交换机的角色,添加两个网口ens37.10和ens37.20 ,再网口上分别添加上brvlan-10和brvlan-20的网桥,然后分别连接上电脑。

可以发现在不同vlan口的两台电脑无法ping通,就实现了在同一局域网内限制互相通信的功能,这在企业中有着很实际的应用。

如果有需求连接外网的话可以另外添加网卡。

 

四、Linux Bridge实现Vlan

(1)查看核心是否提供VLAN 功能,执行

# dmesg | grep -i 802      

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

[root@localhost network-scripts]# cd /proc/net/vlan
[root@localhost vlan]# ls
br1.10  br1.20  config        #此目录下保存在创建的网桥等内容

 

如果8021q模块没有载入系统,则可以通过使用modprobe模组命令载入802.1q模组,

並且利用lsmod命令确认模组是否已经载入到核心内。 

# modprobe 8021q          #加载

[root@localhost ~]# lsmod | grep 8021q  
8021q 33208 0
garp 14384 1 8021q
mrp 18542 1 8021q    

 

设置开机载入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@localhost ~]# yum -y localinstall vconfig

 

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

1.执行:  nmtui ,进入下面界面

技术分享图片

 

2.我添加了四块网卡,这里选择有线连接1默认为添加的第一个网卡。

技术分享图片

 

 3.更改配置名称为ens37,然后确认就添加成功了

技术分享图片

 当然也可以直接创建ifcfg-ens37的文件进行编辑配置。

 

4.对已经添加的ifcfg-ens37文件稍作更改

ip获取方式改为static,其他不动

技术分享图片

 

4)在ens37网卡的基础之上建立ens37.10和ens37.20网口

vconfig  add  网卡 vid

[root@localhost network-scripts]# vconfig add ens37 10
Added VLAN with VID == 10 to IF -:ens37:-
[root@localhost network-scripts]# vconfig add ens37 20
Added VLAN with VID == 20 to IF -:ens37:-

 

5)配置ens37.10和ens37.20的文件

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens37 ifcfg-ens37.10

vim ifcfg-ens37.10    #注意ifcfg-的前缀

VLAN=yes
TYPE=vlan
PHYSDEV=ens37
VLAN_ID=10
NAME=ens37.10
ONBOOT=yes
ZONE=trusted
DEVICE=ens37.10
BRIDGE=brvlan-10

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

 

6)建立brvlan-10和brvlan-20的网桥

brctl  addbr  bridge名

[root@localhost network-scripts]# brctl addbr brvlan-10 
[root@localhost network-scripts]# brctl addbr brvlan-20 

 

7)配置添加网桥的配置文件

编辑网桥brvlan-10配置文件:
#vim ifcfg-brvlan-10
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-10
DEVICE=brvlan-10
ONBOOT=yes

编辑网桥brvlan-20配置文件:
#vim ifcfg-brvlan-20
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-20
DEVICE=brvlan-20
ONBOOT=yes

 

然后查看网桥连接状态

brctl show

[root@localhost network-scripts]# brctl show
bridge name    bridge id    STP enabled    interfaces
br0    8000.000c29e7d62c    no    ens33
brvlan-10    8000.000000000000    no    
brvlan-20    8000.000000000000    no    
virbr0    8000.5254001b9b1c    yes    virbr0-nic

 

 8) 将网桥brvlan-10接到ens37.10口brvlan-20接到ens37.20上

[root@localhost network-scripts]# brctl addif brvlan-10 ens37.10
[root@localhost network-scripts]# brctl addif brvlan-20 ens37.20

 

9)再次查看

[root@localhost network-scripts]# brctl show
bridge name    bridge id        STP enabled    interfaces
br0        8000.000c29e7d62c    no        ens33
brvlan-10        8000.000c29e7d636    no        ens37.10
brvlan-20        8000.000c29e7d636    no        ens37.20
virbr0        8000.5254001b9b1c    yes        virbr0-nic

 

10)重启网卡,查看网卡状态

如下图:

可以看到配置的网卡和网桥都成功显示并且是up状态

有时候状态为down而不是up

可以尝试重启或者进入nmtui界面激活。

[root@localhost network-scripts]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.253.165  netmask 255.255.255.0  broadcast 192.168.253.255
        inet6 fe80::20c:29ff:fee7:d62c  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:e7:d6:2c  txqueuelen 1000  (Ethernet)
        RX packets 56  bytes 3902 (3.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 82  bytes 13996 (13.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

brvlan-10: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::3c:ecff:fe3f:388a  prefixlen 64  scopeid 0x20<link>
        ether 02:3c:ec:3f:38:8a  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 656 (656.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

brvlan-20: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::9087:b7ff:fe9b:28c8  prefixlen 64  scopeid 0x20<link>
        ether 92:87:b7:9b:28:c8  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 656 (656.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:e7:d6:2c  txqueuelen 1000  (Ethernet)
        RX packets 106948  bytes 147633162 (140.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 30428  bytes 2175888 (2.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens37.10: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fee7:d636  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:e7:d6:36  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 1312 (1.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens37.20: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fee7:d636  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:e7:d6:36  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 1312 (1.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:1b:9b:1c  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vnet1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::fc54:ff:fef8:ca47  prefixlen 64  scopeid 0x20<link>
        ether fe:54:00:f8:ca:47  txqueuelen 1000  (Ethernet)
        RX packets 638  bytes 50738 (49.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1641  bytes 128613 (125.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

 

11)来到图形化界面

启动两个虚拟机vm1和vm2

vm1选择网桥brvlan-10和ens37.10口,启动

技术分享图片

 

 vm2选择网桥brvlan-20和ens37.20接口,启动

技术分享图片

 

 

12)进入虚拟机后配置一个ip地址,与另一台相同网段

技术分享图片

 

2.ipv4选择手动配置,然后激活。

技术分享图片

 

3、重新启动网卡,vm2同理。

 

4、在vm1上执行:

ping 192.168.75.5

技术分享图片

可以看到无法连通,说明vlan实验成功!!

 

13)如果有需要让两台虚拟机通信的话可以改为同一个网桥网口。

 如果有连通外网的需求的话可以添加一个网卡ens33,网桥为br0

 

kvm虚拟化网络管理

原文:https://www.cnblogs.com/zzzynx/p/10945391.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!