常备:让KVM虚拟机支持VLAN功能配置详解

 

KVM虚拟机VLAN详细配置步骤...

 
· 虚拟机使用VLAN的好处  

默认情况下,我们的虚拟机支持3种网络连接方式:Bridge、NAT、Host-Only。这3种方式各有不同。但是桥接的方式是我们使用最多的。我们通过表格来比较一下他们的差异。
通信关系
虚拟机与虚拟机
虚拟机和局域网主机
局域网主机和虚拟机
Bridge
可以
可以
可以
NAT
可以
可以
不可以
Host-Only
可以
不可以
不可以


如果想对虚拟机进行访问控制,如限制那些虚拟机不可以访问web服务器,允许那些机器连接外网等,这就可以用VLAN来实现,将虚拟机加入某一个VLAN,对这个VLAN做访问策略即可实现。

· 实现思路

现在,我们在桥接的基础上让KVM虚拟机支持VLAN功能,实现方式类似,虚拟机的网络还是桥接的方式,与局域网的网段相同,只是我们在服务器的物理网卡上创建多个虚拟网卡,然后将子网卡划分到不同VLAN里,再对这些子网卡做桥接网络,虚拟机使用这些VLAN桥接网络就可以了。

· 具体实现方式

要求:服务器至少需要2块物理网卡,一块网卡做VLAN,另外一块网卡用来服务器本身和内网通信。

环境:FreeServer CentOS 6.0,物理网卡eth0与内网连接,eth1与局域网的交换机相连,交换机的网口需要启用Trunk中继(默认是Access模式)。这里我测试的有3个VLAN,并且也允许中继这3个VLAN。

VLAN4:192.168.4.0/24

VLAN6: 192.168.6.0/24

VLAN10: 192.168.10.0/24

主要步骤:

1、  确认当前Linux内核是否已经支持VLAN功能。

2、  决定系统上启用VLAN功能的网卡,并保证该物理网卡启用。

3、  清除启用VLAN功能的物理网卡上的IP地址,以及清除该网卡上所有子网卡。

4、  在物理网卡上添加多个VLAN虚拟网卡。

5、  在每个VLAN虚拟网卡上分配规划的IP地址。

6、  测试VLAN虚拟网卡是否可以和各自VLAN通信。

ⅰ 首先要确认Linux系统内核是否支持VLAN功能:

[root@localhost~]# lsmod| grep 8021q

我们的FreeServer默认是支持的,只是没有8021q模块没有加载。

我们可以通过modprobe 8021q命令来加载,但是重启后就会消失。可以将这条命令加到linux开机启动脚本里,每次开机自动加载。

[root@localhost~]# vi/etc/rc.local

在最后一行添加:modprobe 8021q即可。

ⅱ 启用VLAN功能的物理网卡、清除物理网卡的IP地址

FreeServer默认会对两块网卡做bond,这里必须取消bond,直接删除配置文件即可。这里我用eth0来和内网通信,eth1启用VLAN功能,前面已经说了,局域网交换机跟服务器连接的那个网络接口必须启用Trunk。

删除bond0配置文件:

[root@localhost~]# rm/etc/sysconfig/network-scripts/ifcfg-bond0 -rf

[root@localhost~]# vi/etc/sysconfig/network-scripts/ifcfg-eth0

--------------------------------------------------------

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=none

BRIDGE=br0

--------------------------------------------------------

设定为无IP地址,桥接网络为br0。

[root@localhost~]# vi/etc/sysconfig/network-scripts/ifcfg-eth1

--------------------------------------------------------

DEVICE=eth1

ONBOOT=yes

BOOTPROTO=static

--------------------------------------------------------

设定为静态并且没有IP地址

ⅲ 删除物理网卡上的子网卡、桥接网卡以及虚拟网卡

先看看eth1是否有子网卡(如eth1:1)、桥接网卡(如br1),以及虚拟网卡(如eth1.1),如果有的话,直接删除配置文件即可,如上述删bond0配置文件一样。

ⅳ 在物理网卡上添加多个VLAN虚拟网卡

将eth1添加到VLAN 4中:

[root@localhost~]#vconfig add eth1 4

--------------------------------------------------------

第一次添加VLAN虚拟网卡的时候一定会出现警告,原因是默认情况下/proc/net/vlan/config这个专门用来保存VLAN信息的文件是不存在的。所以第一次添加VLAN网卡,这个文件也会被自动创建,另外由于/proc目录下的文件在系统重启以后就会消失,所以我们在配置VLAN网卡的时候可以为VLAN网卡创建配置文件,这样系统重启后也不会丢失。

--------------------------------------------------------

AddedVLAN with VID == 4 to IF -:eth1:-

这里表示已经将eth1网卡添加到VLAN4中,并且它在VLAN中的虚拟网卡名称为eth1.4。

将eth1添加到VLAN6中:

[root@localhost~]#vconfig add eth1 6

AddedVLAN with VID == 6 to IF -:eth1:-

这里表示已经将eth1网卡添加到VLAN6中,并且它在VLAN中的虚拟网卡名称为eth1.6。

将eth1添加到VLAN10中:

[root@localhost~]#vconfig add eth1 10

AddedVLAN with VID == 10 to IF -:eth1:-

这里表示已经将eth1网卡添加到VLAN10中,并且它在VLAN中的虚拟网卡名称为eth1.10。

检查添加的VLAN虚拟网卡信息:



为了防止VLAN配置信息重启后丢失,我们为这3个VLAN虚拟网卡创建配置文件。

在/etc/sysconfig/network-scripts/目录下。

[root@localhostnetwork-scripts]# vi ifcfg-eth1.4

--------------------------------------------------------

DEVICE=eth1.4

ONBOOT=yes

BRIDGE=br1.4

--------------------------------------------------------

以上述配置作模板,创建ifcfg-eth1.6, ifcfg-eth1.10,需要修改DEVICE和BRIDGE。

现在我们为这3个VLAN虚拟网卡创建桥接网卡,为后续KVM虚拟机支持VLAN功能做准备。

[root@localhostnetwork-scripts]# vi ifcfg-br1.4

--------------------------------------------------------

DEVICE=br1.4

BOOTPROTO=static

ONBOOT=yes

TYPE=Bridge

--------------------------------------------------------

以上述配置作模板,创建ifcfg-br1.6, ifcfg-br1.10,需要修改DEVICE。

ⅴ 在每个VLAN虚拟网卡上分配规划的IP地址并且启用。

由于我们为了后续KVM虚拟机支持VLAN功能,前面也说到过,虚拟机需要桥接网络。所以这里不能为eth1.x配置IP地址,而是要为br1.x配置IP地址。

设定VLAN4虚拟网卡的地址并启用

[root@localhost~]#ifconfig br1.4 192.168.4.199 up

设定VLAN6虚拟网卡的地址并启用

[root@localhost~]#ifconfig br1.6 192.168.6.199 up

设定VLAN10虚拟网卡的地址并启用

[root@localhost~]#ifconfig br1.10 192.168.10.199 up

这3个VLAN虚拟网卡的配置在重启网络配置后会消失,所以建议还是放在开机启动脚本里。

[root@localhost~]# vi/etc/rc.local

在最后一行添加上述3条命令:

ifconfigbr1.4 192.168.4.199 up

ifconfigbr1.6 192.168.6.199 up

ifconfigbr1.10 192.168.10.199 up

ⅵ 测试是否可以与VLAN4,6,10通信。

[root@localhost~]# ping -Ibr1.4 192.168.4.1

--------------------------------------------------------

PING 192.168.4.1 (192.168.4.1) from 192.168.4.199 br1.4: 56(84)bytes of data.

64bytes from 192.168.4.1: icmp_seq=1 ttl=255 time=3.70 ms

64bytes from 192.168.4.1: icmp_seq=1 ttl=255 time=0.465 ms

64bytes from 192.168.4.1: icmp_seq=1 ttl=255 time=2.48 ms

--------------------------------------------------------

[root@localhost~]# ping -Ibr1.6 192.168.6.1

这个没有ping通,原因是我的eth0也是192.168.6.0/24这个网段的,属于VLAN6,所以造成了上述ping不通的原因。但是不影响在这个VLAN下的虚拟机和其他主机通信。

[root@localhost~]# ping -Ibr1.10 192.168.10.1

PING 192.168.10.1 (192.168.10.1) from 192.168.10.199 br1.10: 56(84)bytes of data.

--------------------------------------------------------

64bytes from 192.168.4.1: icmp_seq=1 ttl=255 time=4.13 ms

64bytes from 192.168.4.1: icmp_seq=1 ttl=255 time=0.461 ms

64bytes from 192.168.4.1: icmp_seq=1 ttl=255 time=0.467 ms

--------------------------------------------------------

· KVM虚拟机测试VLAN功能

打开虚拟机的网卡选项Open -> Details -> NIC







将Host device选为“Specify shared device name”,然后Bridge name填“br1.6”。

将IP地址设为DHCP自动获取,如果能从局域网DHCP服务器获取到IP,说明KVM虚拟机在VLAN6下了,并且可以和VLAN6下的其他主机以及可以和其他VLAN通信。 如果想切换其他VLAN,还是按照上述方法,将Bridge name改为“br1.4”或“br1.10”即可。

欢迎报名:云计算存储技术峰会.成都站



更多详情请扫描活动下方二维码参与报名!

云计算存储技术峰会.成都站

干货 |  技术 | 交流 | 分享


    关注 KVM虚拟化实践


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册