周振林 周振林
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • 学习笔记

    • 《JavaScript教程》
    • 《ES6 教程》
    • 《TypeScript》
    • 《Vue》
    • 《Git》
    • 《小程序笔记》
    • 《JS设计模式总结笔记》
  • 规范
  • Spring
  • 安装教程
  • 其他教程
  • 归真医学
  • 常用药材
  • 学习笔记
  • 经方学习心得
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏
  • 分类
  • 标签
  • 归档

周振林

IT界的小学生
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • 学习笔记

    • 《JavaScript教程》
    • 《ES6 教程》
    • 《TypeScript》
    • 《Vue》
    • 《Git》
    • 《小程序笔记》
    • 《JS设计模式总结笔记》
  • 规范
  • Spring
  • 安装教程
  • 其他教程
  • 归真医学
  • 常用药材
  • 学习笔记
  • 经方学习心得
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏
  • 分类
  • 标签
  • 归档
  • 基础

  • 虚拟化

    • 虚拟化介绍
    • 准备KVM实验环境
    • 启动第一个KVM虚拟机
    • 远程管理KVM虚拟机
    • KVM内存和CPU虚拟化原理
    • KVM存储虚拟化原理
    • KVM LVM类型的存储池
    • KVM网络虚拟化基础
    • KVM动手实践虚拟网络
    • KVM理解virbr0
    • Linux 如何实现 VLAN
    • 动手实践 Linux VLAN
      • 动手实践 Linux VLAN
        • 配置 VLAN
        • 配置 VM1
        • 配置VM2
        • 验证 VLAN 的隔离性
        • Linux Bridge + VLAN = 虚拟交换机
    • 云计算与 OpenStack
    • ESXI主机安装与配置
    • ESXI虚拟机安装
    • KVM介绍
    • KVM主机安装
    • KVM虚拟机安装
    • KVM Libvirt 存储池
    • KVM网络配置
  • Docker

  • OpenStack

  • 心情杂货

  • 更多
  • 虚拟化
周振林
2025-03-21
目录

动手实践 Linux VLAN

# 动手实践 Linux VLAN

doc2b944a0045664a17acb6247e76bc9ece.webp

本节我们来看如何在实验环境中实施和配置如下 VLAN 网络。

docf0a18ff5a0e74b5493738620bcd014f2.webp

# 配置 VLAN

编辑 /etc/network/interfaces,配置 eth0.10、brvlan10、eth0.20 和 brvlan20。下面用 vmdiff 展示了对 /etc/network/interfaces 的修改。

doc9e58b13d51324f9e8c29c6047c2bc839.webp

重启宿主机,ifconfig 各个网络接口如下所示:

doc9e1e37e8e497464eae477c8d23e9bcc8.webp

用 brctl show 查看当前 Linux Bridge 的配置。 eth0.10 和 eth0.20 分别挂在 brvlan10 和 brvlan20上了。

docab8c13b7c7fc4b2fb9505e2ebffa93a3.webp

在宿主机中已经提前创建好了虚机 VM1 和 VM2,现在都处于关机状态。

docbd0f54f59d22438882cbb36dd1645bbe.webp

# 配置 VM1

在 virt-manager 中将 VM1 的虚拟网卡挂到 brvlan10 上。

docb5cddcaeb51841c6a5a7e5d85090f37a.jpg

启动 VM1。

docdfa70b081b8341069ff5ea8bcd335ffb.webp

查看 Bridge,发现 brvlan10 已经连接了一个 vnet0 设备。

doc5c6965d049864f5182536f28f06eda27.webp

通过 virsh 确认这就是 VM1 的虚拟网卡。

doc5df828f653774794842ef62a02063ce8.webp

# 配置VM2

类似的,将 VM2 的网卡挂在 brvlan20 上。

doc055eb61ce24e450dbe354ec787de6ba9.webp

启动 VM2。

doc59bbb4c5477646978c1af5bcfee43e23.webp

查看 Bridge,发现 brvlan20 已经连接了一个 vnet1 设备。

doc7f79beaecd9f4e71be12a807eedf1078.webp

通过 virsh 确认这就是 VM2 的虚拟网卡。

doc864ee74e17904c30aa5ac9ba64c513da.webp

# 验证 VLAN 的隔离性

为了验证 VLAN10 和 VLAN20 之间的隔离,我们为 VM1 和 VM2 配置同一网段的 IP。

配置 VM1 的 IP。

doc77d3b4c6865b48669ff5a98d03624987.webp

配置 VM2 的 IP

docce7531706e4742da908bddbbcb75ce5d.webp

Ping 测试结果: VM1 与 VM2 是不通的。

doc0af253a649f34a059a7195769037ec54.webp

原因如下:

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

# Linux Bridge + VLAN = 虚拟交换机

现在对 KVM 的网络虚拟化做个总结:

  1. 物理交换机存在多个 VLAN,每个 VLAN 拥有多个端口。 同一 VLAN 端口之间可以交换转发,不同 VLAN 端口之间隔离。 所以交换机其包含两层功能:交换与隔离。
  2. Linux 的 VLAN 设备实现的是隔离功能,但没有交换功能。 一个 VLAN 母设备(比如 eth0)不能拥有两个相同 ID 的 VLAN 子设备,因此也就不可能出现数据交换情况。
  3. Linux Bridge 专门实现交换功能。 将同一 VLAN 的子设备都挂载到一个 Bridge 上,设备之间就可以交换数据了。

总结起来,Linux Bridge 加 VLAN 在功能层面完整模拟现实世界里的二层交换机。eth0 相当于虚拟交换机上的 trunk 口,允许 vlan10 和 vlan20 的数据通过。

eth0.10,vent0 和 brvlan10 都可以看着 vlan10 的 access 口。 eth0.20,vent1 和 brvlan20 都可以看着 vlan20 的 access 口。

Last Updated: 2025/06/18, 08:59:15
Linux 如何实现 VLAN
云计算与 OpenStack

← Linux 如何实现 VLAN 云计算与 OpenStack→

最近更新
01
Docker安装
06-10
02
Docker运行JAR
06-10
03
Docker部署MySQL
06-10
更多文章>
Copyright © 2019-2025 鲁ICP备19032096号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式