· 虚拟机使用VLAN的好处 默认情况下,我们的虚拟机支持3种网络连接方式:Bridge、NAT、Host-Only。这3种方式各有不同。但是桥接的方式是我们使用最多的。我们通过表格来比较一下他们的差异。
如果想对虚拟机进行访问控制,如限制那些虚拟机不可以访问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”即可。 欢迎报名:云计算存储技术峰会.成都站
更多详情请扫描活动下方二维码参与报名! |
|
来自: raymonddime > 《技术干货》