Linux 系统下实践 VLAN
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。
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 反之。
我的公众号 「Linux云计算网络」(id: cloud_dev) ,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。
Linux 系统下实践 VLAN的更多相关文章
- Linux系统下DHCP服务安装部署和使用详解
一.概述 DHCP :动态主机设置协议(英语:Dynamic Host Configuration Protocol,DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:用于内部网或 ...
- Jmeter(五十四) - 从入门到精通高级篇 - 如何在linux系统下运行jmeter脚本 - 上篇(详解教程)
1.简介 上一篇宏哥已经介绍了如何在Linux系统中安装Jmeter,想必各位小伙伴都已经在Linux服务器或者虚拟机上已经实践并且都已经成功安装好了,那么今天宏哥就来介绍一下如何在Linux系统下运 ...
- 在Linux系统下运行微信Web开发者工具
微信Web开发者工具只有window版本和mac版本,如果想要在Linux系统下运行微信Web开发者工具,需要花费很大周折. 注:带 * 的步骤或文件为不确定是否管用的步骤或文件.本人系统为Linux ...
- Vi (Unix及Linux系统下标准的编辑器)VIM (Unix及类Unix系统文本编辑器)
Vi是Unix及Linux系统下标准的编辑器.学会它后,您将在Linux的世界里畅行无阻.基本上vi可以分为三种状态,分别是命令模式.插入模式,和底行模式. vi编辑器是所有Unix及Linux系统下 ...
- linux系统下的权限知识梳理
下面对linux系统下的有关权限操作命令进行了梳理总结,并配合简单实例进行说明.linux中除了常见的读(r).写(w).执行(x)权限以外,还有其他的一些特殊或隐藏权限,熟练掌握这些权限知识的使用, ...
- linux系统下修改文件夹目录权限
linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何 ...
- Linux系统下配置JDK环境变量
刚申请了阿里云,平时很少接触Linux,特此记录一下Linux系统下安装JDK的步骤. 1.进入usr:cd /usr: 2.创建java文件夹:mkdir java: 3.将下载好的文件拷贝至jav ...
- Linux系统下远程文件拷贝scp命令
在Linux系统下,不同机器上实现文件拷贝 一.将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid ...
- linux系统下的软连接与硬链接
前几天在linux系统下安装mongoDB,然后运行脚本导入数据的时候遇到了链接库查询不到的情况,如图 1所示.当时是通过创建软连接的方式解决的这个问题.虽然,通过网上的教程解决了这个问题,但是对于软 ...
随机推荐
- linux学习第十九天 (Linux就该这么学) 结课了
今天最后一天课程了,结课了,还有点舍不得那,在些也祝 李老师 事业蒸蒸日上,超来超好, 今天内容是部署了 LNMP 部署动态网站环境(linux +nginx+mysql+php) 安装文件挺别多, ...
- Maven 基本用法
1. 新建一个项目目录 2. 在项目目录中新建并编写 pom.xml 文件, 3. 在项目目录中新建主代码目录 src/main/java 4. 在项目目录中新建测试代码目录 src/test/jav ...
- GUI学习之四——QWidget控件学习总结
上一章将的QObject是PyQt里所有控件的基类,并不属于可视化的控件.这一章所讲的QWidget,是所有可视化控件的基类. QWidget包含下面几点特性 a.控件是用户界面的最小的元素 b.每个 ...
- 服务管理之rsync
目录 rsync 1. rsync简介 2. rsync特性 4. rsync命令 5. rsync+inotify rsync 1. rsync简介 rsync是linux系统下的数据镜像备份工具. ...
- oracle service name sid , 用户 和 表空间
oracle 的四个概念: 数据库: 就是一堆静态的数据文件.注意是静态的 instance 实例: 可以类比数据库连接. 实例就是为了操作数据库而开辟的进程和内存空间,有了这个实例你才能操作数据库. ...
- Unity3D 在Update中不要过多地修改Transform 信息
前文说到碰撞检测时候,不要在Update内部尝试移动GameObject 来检查碰撞检测,这样是徒劳无功.但是 说到 因为你移动的过程中其实并没有将实际的移动位置更新到物理引擎,只是做了个缓存而已, ...
- Lambda表达式按字段名字排序
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...
- java反射获取Object的属性和值
在看反射顺便做个笔记,目前知道的反射的Object都是要有对象的也就是实体Bean. import java.lang.reflect.Field; import java.util.ArrayLis ...
- django 如何接收bootstrap-table传送的 ajax数组
今天在用django传递id的时候,使用 alert(ids)以及console.log("id:",ids),都可以看到是把选中的数据的id打印出来的,用console.log可 ...
- Windows和Office激活汇总
Windows和Office是常用的软件.多数情况下,即使不激活,也会使用一部分功能.今天来看一下很多前辈的工作成果. 1. Windows 7&10 1.1 永久激活 通过key 分享几个常 ...
