zoukankan      html  css  js  c++  java
  • ubuntu 16.04 环境下实践 VLAN

    01 准备环境

    环境:ubuntu 16.04 环境(物理 or 虚拟)

    确认 CPU 是否支持虚拟化:

    # egrep -o '(vmx|svm)' /proc/cpuinfo
    # vmx
    

    如果不支持,开启 KVM 嵌套虚拟化之后再重启。

    1.1 安装 KVM 环境

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

    1.2 安装 Ubuntu 图形化界面

    sudo apt-get install -y xinit gdm kubuntu-desktop
    

    02 创建 KVM 虚拟机

    使用 virt-manager 创建 KVM 虚拟机,方法比较简单,由于篇幅有限,大家可以查阅相关资料自行了解。

    创建完之后用 virsh list --all 查看创建的 VM:

    Id    Name                           State
    ----------------------------------------------------
     -     kvm1                           shut off
     -     kvm2                           shut off
     -     kvm3                           shut off
    

    我们的实验拓扑如下:

     
    image

    图中创建了 2 个 Linux Bridge:brvlan1 和 brvlan2,宿主机的物理网卡 eth0 抽象出两个虚拟设备 eth0.1 和 eth0.2,也就是两个 VLAN 设备,它们分别定义了两个 VLAN:VLAN1 和 VLAN2。挂接到两个 Bridge 上的网络设备自动加入到相应的 VLAN 中。VLAN1 接两个 VM,VLAN 接一个 VM。

    实验的目的是要验证属于同一个 VLAN1 中 VM1 和 VM2 能 ping 通,而属于不同 VLAN 中的 VM ping 不通。

    03 实验开始

    3.1 配置 VLAN

    编辑 /etc/network/interfaces,加入两个 Bridge 和两个 VLAN 设备的配置,如下:

    # The primary network interface
    auto ens33
    iface ens33 inet dhcp
    
    auto ens33.1
    iface ens33.1 inet manual
            vlan-raw-device ens33
    
    auto brvlan1
    iface brvlan1 inet manual
            bridge_stp off
            bridge_waitport 0
            bridge_fd 0
            bridge_ports ens33.1
    
    auto ens33.2
    iface ens33.2 inet manual
            vlan-raw-device ens33
    
    auto brvlan2
    iface brvlan2 inet manual
            bridge_stp off
            bridge_waitport 0
            bridge_fd 0
            bridge_ports ens33.2
    

    注意,这里务必和自己电脑的接口名称统一,比如我这里叫 ens33,就配 ens33.1 和 ens33.2 的 VLAN 设备,当然你也可以改成 eth0 的形式。

    重启宿主机,ifconfig 查看网络接口:

     
    image

    brctl show 查看当前 Linux Bridge 的配置,ens33.1 和 ens33.2 分别挂载 brvlan1 和 brvlan2 上了。

    # brctl show
    bridge name bridge id       STP enabled interfaces
    brvlan1     8000.000c298c57e8   no      ens33.1
    brvlan2     8000.000c298c57e8   no      ens33.2
    virbr0      8000.000000000000   yes
    

    3.2 配置 VM

    我们先配置 VM1,启动 virt-manager,在图形界面中将 VM1 的虚拟网卡挂到 brvlan1 上:

     
    image

    同样的方式配置 VM2 和 VM3,VM2 也配到 brvlan1 上,VM3 配到 brvlan2 上。

    3.3 查看 VM 配置

    virsh start xxx 启动 3 个 VM:

    # virsh start kvm1
    # virsh start kvm2
    # virsh start kvm3
    

    再通过 brctl show 查看 Bridge,这时发现 brvlan1 下接了 vnet0 和 vnet1,brvlan2 下接了 vnet2:

    # brctl show
    bridge name bridge id       STP enabled interfaces
    brvlan1     8000.000c298c57e8   no      ens33.1
                                vnet0
                                vnet1
    brvlan2     8000.000c298c57e8   no      ens33.2
                                vnet2
    virbr0      8000.000000000000   yes
    

    通过 virsh domiflist xxx 确认这就是 VM 的虚拟网卡:

    # virsh domiflist kvm1
    Interface  Type       Source     Model       MAC
    -------------------------------------------------------
    vnet0      bridge     brvlan1    rtl8139     52:54:00:b3:dd:3a
    
    # virsh domiflist kvm2
    Interface  Type       Source     Model       MAC
    -------------------------------------------------------
    vnet1      bridge     brvlan1    rtl8139     52:54:00:b7:4f:ef
    
    # virsh domiflist kvm3
    Interface  Type       Source     Model       MAC
    -------------------------------------------------------
    vnet2      bridge     brvlan2    rtl8139     52:54:00:d8:b8:2a
    

    04 验证

    为了验证相同 VLAN 之间的连通性和不同 VLAN 之间的隔离性,我们为 3 个 VM 都配置同一网段的 IP。

    使用 virt-manager 进入 VM console 控制面。

    配置 VM1 的 IP:

    ifconfig eth0 192.168.100.10 netmask 255.255.255.0
    

    配置 VM2 的 IP:

    ifconfig eth0 192.168.100.20 netmask 255.255.255.0
    

    配置 VM3 的 IP:

    ifconfig eth0 192.168.100.30 netmask 255.255.255.0
    

    使用 VM1 ping VM2 能 ping 通,VM2 ping VM3 不能 ping 通。

     
    image

    验证完毕。

    大家如果有兴趣,可以抓个包看看,在发送 ping 包之前,需要知道对方的 MAC 地址,所以会先在网络中广播 ARP 包。ARP 是二层协议,VLAN 的作用就是隔离二层的广播域,ARP 包自然就不能在不同 VLAN 中流通,所以在相同 VLAN 中,通信双方能够拿到对方的 MAC 地址,也就能 ping 通,不同 VLAN 反之。


    转自:https://www.jianshu.com/p/afe119456c60
  • 相关阅读:
    PAT (Basic Level) Practise 1013 数素数
    PAT (Basic Level) Practise 1014 福尔摩斯的约会
    codeforces 814B.An express train to reveries 解题报告
    KMP算法
    rsync工具
    codeforces 777C.Alyona and Spreadsheet 解题报告
    codeforces 798C.Mike and gcd problem 解题报告
    nginx + tomcat多实例
    MongoDB副本集
    指针的艺术(转载)
  • 原文地址:https://www.cnblogs.com/pipci/p/13021453.html
Copyright © 2011-2022 走看看