专栏首页aCloudDeveloperLinux 系统下实践 VLAN

Linux 系统下实践 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

我们的实验拓扑如下:

图中创建了 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 查看网络接口:

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 上:

同样的方式配置 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 通。

验证完毕。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LeetCode:114_Flatten Binary Tree to Linked List | 将一棵二叉树变成链表的形式 | Medium

    要求:Given a binary tree, flatten it to a linked list in-place.将二叉树转化为平坦序列的树。比如: ?...

    CloudDeveloper
  • 从一个集合中查找最大最小的N个元素——Python heapq 堆数据结构

    Top N问题在搜索引擎、推荐系统领域应用很广, 如果用我们较为常见的语言,如C、C++、Java等,代码量至少也得五行,但是用Python的话,只用一个函数就...

    CloudDeveloper
  • 算法导论第七章快速排序

    一、快速排序概述 关于快速排序,我之前写过两篇文章,一篇是写VC库中的快排函数,另一篇是写了快排的三种实现方法。现在再一次看算法导论,发现对快速排序又有了些新的...

    CloudDeveloper
  • .NET 基金会项目介绍-Newtonsoft.Json

    Newtonsoft.Json 是属于 .Net 基金会的一个项目,本文将简要介绍该项目相关的信息。

    newbe36524
  • 一个小白的 TensorFlow 学习笔记(一)

    本系列文章以《深度学习原理与TensorFlow实践》一书的内容为基础,结合网络上其他材料,提取并梳理了一些感觉比较有意义的点,也记录了一个菜鸟的心路历程。好东...

    雷博生
  • CentOS7.x系统根目录分区扩容

    说明:系统版本为 Linux version 3.10.0-327.el7.x86_64

    拓荒者
  • ECCV 2018 | 港科腾讯等提出Bi-Real net:超XNOR-net 10%的ImageNet分类精度

    作者:Zechun Liu,Baoyuan Wu,Wenhan Luo,Xin Yang,Wei Liu,Kwang-Ting Cheng

    机器之心
  • 【PPT】未来的战争:德国工业4.0与中国制造2025

    我国还是一个发展中的国家,仍处于工业化进程中,落后与先进并存、传统与现代共生,需要积极探讨中国特色工业化道路:提升传统产业与培育新兴产业相结合;传统手工艺与先进...

    钱塘数据
  • 美的启动大规模机器换人:未来五年投入50亿

    家电生产大规模自动化,2015年是一个重要的年份。 “2015年是自动化生产的‘分水岭’。”美的家用空调事业部负责制造的副总裁乌守保表示,他们厂在自动化的在投...

    机器人网
  • 自定义天气显示温度变化的LinearChart控件

    这次发表的是前几个月搞定的一个自定义控件,那时自己在写一个小的查看天气的软件,在这过程中就涉及了显示天气变化的折线图,一开始想用一些画图框架来解决问题,不过考虑...

    HelloJack

扫码关注云+社区

领取腾讯云代金券