Linux下vlan的学习(下)

下面介绍在一个物理机上通过几个虚拟机使用软件模拟实现VLAN的具体步骤

 

更多具体的概念可查看博文 http://www.ibm.com/developerworks/cn/linux/1310_xiawc_networkdevice/-Linux上基础设备详解

准备工作

物理主机:Ubuntu 16.04

KVM安装(安装后可自行检测):

sudo apt-get install qemu-kvm qemu-system libvirt-bin virt-manager bridge-utils vlan

虚拟机创建:

  • 启动虚拟系统管理器

    sudo virt-manager
  • 将Linux镜像文件放入KVM默认查找目录/var/lib/libvirt/images中,随后按提示步骤创建即可(如果担心自己的物理机配置不够支撑,可以将虚拟机配置分配低一点,或者你可以选择更小的实验用Linux镜像,如cirros,可以在http://download.cirros-cloud.net/下载.img文件,创建时选择导入现有磁盘映像)

  • 配置VLAN*

VLAN结构图(其中的eth0为物理网卡名,我的为wlp3s0b1)

编辑/etc/network/interface,配置wlp3s0b1.10、wlp3s0b1.20、brvlan10和brvlan20,添加下列配置(其中的wlp3s0b1是我的物理网卡名,因人而异)

#
auto wlp3s0b1.10  
iface wlp3s0b1.10 inet manual  
        vlan-raw-device wlp3s0b1

auto brvlan10  
iface brvlan10 inet manual  
        bridge_stp off
        bridge_waitport 0
        bridge_fd 0
        bridge_ports wlp3s0b1.10

auto wlp3s0b1.20  
iface wlp3s0b1.20 inet manual  
        vlan-raw-device wlp3s0b1

auto brvlan20  
iface brvlan20 inet manual  
        bridge_stp off
        bridge_waitport 0
        bridge_fd 0
        bridge_ports wlp3s0b1.20

重启网络后ifconfig,可以看到配置生效

使用brctl show查看Bridge情况,可以看到wlp3s0b1.10与brvlan10相连,wlp3s0b1.20与brvlan20相连。

配置VM1虚拟网卡与brvlan10相连,再启动VM1(如未在列表找到桥接,可重启管理器)

同理配置VM2虚拟网卡与brvlan20相连,我们再额外配置一个VM3与brvlan20相连。分别启动VM2、VM3。

再使用brctl show查看Bridge情况(brvlan10连着两个设备wlp3s0b1.10和vnet0,而brvlan20连着三个设备wlp3s0b1.20、vnet1、vnet2)

使用virsh确认各个虚拟机的虚拟网卡

可知现在VM1处于VLAN10,而VM2、VM3处于VLAN20

为VM1、VM2、VM3配置同一网段的IP))

验证VLAN连通性(VM2 与 VM3 互能 ping通))

验证VLAN隔离性(VM1不能 ping 通 VM2、VM3)

原因如下:

  1. VM1向VM2发 Ping 包之前,需要知道VM2的IP 192.168.100.10 所对应的 MAC 地址。VM2 会在网络上广播 ARP 包,其作用就是问 “谁知道 192.168.100.10 的 MAC 地址是多少?”
  2. ARP是二层协议,VLAN 的隔离作用使得ARP只能在VLAN10 范围内广播,只有 brvlan10 和wlp3s0b1.10 能收到,VLAN20 里的设备是收不到的。VM2 无法应答 VM1 发出的ARP包。
  3. VM1拿不到VM2 vnet0的MAC地址,也就Ping不到VM2。

验证VLAN原理

用各个虚拟机ping物理机,发现均显示不可达(无网关且处于不同网段)。

之后将虚拟机的IP手动改成与物理机同一网段,依然无法ping通,虽然在虚拟网卡中能抓包到ARP包,但是物理网卡却并没有接受到。

在用物理机ping各个虚拟机,一直处于等待,虽然能在物理网卡上抓到发出去的ICMP,但是并没有返回的ICMP包。且虚拟网卡也没有收到。

看起来物理网卡wlp3s0b1就相当于虚拟交换机上的 trunk 口,允许 vlan10 和 vlan20 的数据通过,而VLANBridge一起实现了隔离和交换的功能。

参考博文:

Linux上基础设备详解:http://www.ibm.com/developerworks/cn/linux/1310_xiawc_networkdevice/

动手实现Linux VLANhttp://www.cnblogs.com/CloudMan6/p/5326737.html

 

觉得不错不妨打赏一笔