Linux 如何实现 VLAN - 天天5分钟玩转 OpenStack(12)

LAN 表示 Local Area Network,本地局域网,一般使用 Hub 和 Switch 来链接 LAN 中的计算机。
通常来讲,两台计算机连入同一个 Hub 或者 Switch 时,它们就在同一个 LAN 中。网络

一个 LAN 表示一个广播域。 其含义是:LAN 中的全部成员都会收到任意一个成员发出的广播包。 spa

VLAN 表示 Virtual LAN。一个带有 VLAN 功能的switch 可以将本身的端口划分出多个 LAN。
计算机发出的广播包能够被同一个 LAN 中其余计算机收到,但位于其余 LAN 的计算机则没法收到。 简单地说,VLAN 将一个交换机分红了多个交换机,限制了广播的范围,在二层将计算机隔离到不一样的 VLAN 中。 orm

比方说,有两组机器,Group A 和 B。
咱们想配置成 Group A 中的机器能够相互访问,Group B 中的机器也能够相互访问,可是 A 和 B 中的机器没法互相访问。
一种方法是使用两个交换机,A 和 B 分别接到一个交换机。 另外一种方法是使用一个带 VLAN 功能的交换机,将 A 和 B 的机器分别放到不一样的 VLAN 中。
blog

请注意,VLAN 的隔离是二层上的隔离,A 和 B 没法相互访问指的是二层广播包(好比 arp)没法跨越 VLAN 的边界。
但在三层上(好比IP)是能够经过路由器让 A 和 B 互通的。概念上必定要分清。
路由

如今的交换机几乎都是支持 VLAN 的。 一般交换机的端口有两种配置模式: Access 和 Trunk。看下图 it

Access 口
这些端口被打上了 VLAN 的标签,代表该端口属于哪一个 VLAN。 不一样 VLAN 用 VLAN ID 来区分,VLAN ID 的 范围是 1-4096。 Access 口都是直接与计算机网卡相连的,这样从该网卡出来的数据包流入 Access 口后就被打上了所在 VLAN 的标签。 Access 口只能属于一个 VLAN。
import

Trunk 口
假设有两个交换机 A 和 B。 A 上有 VLAN1(红)、VLAN2(黄)、VLAN3(蓝);B 上也有 VLAN一、二、3 那如何让 AB 上相同 VLAN 之间可以通讯呢?
软件

办法是将 A 和 B 连起来,并且链接 A 和 B 的端口要容许 VLAN一、二、3 三个 VLAN 的数据都可以经过。
这样的端口就是Trunk口了。 VLAN一、二、3 的数据包在经过 Trunk 口到达对方交换机的过程当中始终带着本身的 VLAN 标签。
配置

了解了 VLAN 的概念以后,咱们来看 KVM 虚拟化环境下是如何实现 VLAN 的。仍是先看图, ueditor

eth0 是宿主机上的物理网卡,有一个命名为 eth0.10 的子设备与之相连。 eth0.10 就是 VLAN 设备了,其 VLAN ID 就是 VLAN 10。 eth0.10 挂在命名为 brvlan10 的 Linux Bridge 上,虚机 VM1 的虚拟网卡 vent0 也挂在 brvlan10 上。

这样的配置其效果就是: 宿主机用软件实现了一个交换机(固然是虚拟的),上面定义了一个 VLAN10。 eth0.10,brvlan10 和 vnet0 都分别接到 VLAN10 的 Access口上。而 eth0 就是一个 Trunk 口。
VM1 经过 vnet0 发出来的数据包会被打上 VLAN10 的标签。

eth0.10 的做用是:定义了 VLAN10 brvlan10 的做用是:Bridge 上的其余网络设备自动加入到 VLAN10 中

咱们再增长一个 VLAN20,见下图

image38.png

这样虚拟交换机就有两个 VLAN 了,VM1 和 VM2 分别属于 VLAN10 和 VLAN20。 对于新建立的虚机,只须要将其虚拟网卡放入相应的 Bridge,就能控制其所属的 VLAN。

VLAN 设备老是以母子关系出现,母子设备之间是一对多的关系。 一个母设备(eth0)能够有多个子设备(eth0.10,eth0.20 ……),而一个子设备只有一个母设备。

下一节咱们经过实验来实践 VLAN。


相关文章
相关标签/搜索