常备:让KVM虚拟机支持VLAN功能配置详解
KVM虚拟机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虚拟化实践
微信扫一扫关注公众号