ACL 与 VLAN的详细讲解
一、ACL 基础
1. ACL 是什么
ACL = Access Control List,访问控制列表。 它本质上是一张有序的规则表,用在两个地方:
| 用途 | 说明 |
|---|---|
| ① 访问控制 | 在路由器流量流入或流出的接口上,匹配流量,然后执行设定动作——permit(放行)/ deny(拒绝) |
| ② 抓取感兴趣流 | 作为"筛选器",把符合条件的流量挑出来交给其他功能处理(如 NAT、策略路由、流量统计) |
第二点很关键:ACL 不只是"防火墙",它更像一个通用的流量分类工具。考试里问"ACL 有什么用",两个都要答。
2. ACL 的匹配规则(必考)
自上而下,逐一匹配;如果匹配到了,则按对应规则执行动作,不再继续向下匹配。
两句话拆开理解
-
顺序很重要:ACL 是按编号从小到大依次比对的,先命中先执行,后面的规则根本没机会看。
-
命中即停:一旦某条规则匹配成功,立刻执行 permit 或 deny,不会继续往下找更精确的规则。
华为与思科的关键差别(高频考点)
| 设备 | 列表末尾的隐含规则 |
|---|---|
| 华为(VRP) | 没有隐含规则——所有规则都没匹配上,报文默认被放行(permit) |
| 思科(IOS) | 末尾隐含一条"拒绝所有"(deny any) |
这个差别带来的直接后果:同样的 ACL,在思科上会导致"没写 permit 的都断了",在华为上则是"没写的都通"。 所以华为上做"白名单"式控制时必须显式写 permit,否则等于没配。
3. ACL 的分类
| 类型 | 关注字段 | 编号范围 |
|---|---|---|
| 基础 ACL(基本 ACL) | 仅关注源 IP 地址 | 2000 ~ 2999 |
| 高级 ACL | 源 IP + 目的 IP + 协议号 + 端口号 | 3000 ~ 3999 |
| 二层 ACL | 源/目的 MAC、以太网类型等二层信息 | 4000 ~ 4999 |
| 自定义 ACL(用户 ACL)【补充】 | 可匹配报文任意偏移位置的字节 | 5000 ~ 5999 |
【补充】创建 ACL 时
acl ?的提示就是这张表:[R2] acl ? INTEGER<2000-2999> Basic access-list(add to current using rules) INTEGER<3000-3999> Advanced access-list(add to current using rules) INTEGER<4000-4999> Specify a L2 acl group ipv6 ACL IPv6 name Specify a named ACL number Specify a numbered ACL
编号 ACL 与命名 ACL:两种写法完全等价,命名 ACL 必须带编号来确定它是哪一类。
[R1] acl 3000 // 编号方式:3000 开头就是高级 ACL [R1] acl name xuqiuer 3000 // 命名方式:起名 xuqiuer,编号 3000 决定类型 [R1-acl-adv-xuqiuer] // 命名后视图名带上了名字
4. 通配符(Wildcard)—— 最容易和反掩码混淆
ACL 规则后面跟的那串 0.0.0.0 不是子网掩码,也不是反掩码,而是通配符。
| 位值 | 含义 |
|---|---|
| 0 | 不可变(必须精确匹配) |
| 1 | 可变(任意值都算匹配) |
与 OSPF 反掩码的关键区别
| ACL 通配符 | OSPF 反掩码 | |
|---|---|---|
| 0 / 1 含义 | 0 = 不可变,1 = 可变 | 同左 |
| 能否穿插 | 可以穿插(0.0.255.0 合法) | 必须连续,0 在前 1 在后 |
| 用途 | 匹配报文字段 | 圈定宣告的地址范围 |
举例
| 写法 | 匹配范围 |
|---|---|
192.168.1.3 0.0.0.0 | 只匹配 192.168.1.3 这一台主机(等价于 /32) |
192.168.1.0 0.0.0.255 | 匹配 192.168.1.0/24 整个网段 |
192.168.0.0 0.0.255.0 | 匹配 192.168.x.0(第 3 字节任意)—— 穿插用法 |
0.0.0.0 255.255.255.255 | 匹配任意地址(any) |
记忆:"0 是死,1 是活"。写
0.0.0.0就是"这位必须一模一样",写255.255.255.255就是"这位随便"。
二、ACL 配置三步法
步骤 1:创建 ACL 列表
[R2] acl 2000 // 数字 2000~2999 → 基础 ACL [R2-acl-basic-2000] // 进入 ACL 视图
步骤 2:在列表上写规则
[R2-acl-basic-2000] rule deny source 192.168.1.3 0.0.0.0
规则编号的规则【补充】
-
不写编号时,华为按 步长 5 自动分配:第 1 条是 5,第 2 条是 10,第 3 条是 15……
-
之所以留空隙,是为了以后能在中间插入规则:想让某条规则排在第 1、2 条之间,就给它编号 7。
[R2-acl-basic-2000] rule 7 deny source 192.168.1.2 0.0.0.0 // 插入到 5 和 10 之间 [R2-acl-basic-2000] undo rule 7 // 按编号删除 [R2] display acl 2000 // 查看整个列表
查看与删除小结
| 操作 | 命令 |
|---|---|
| 查看 ACL | display acl 2000 |
| 删除某条规则 | undo rule 7 |
| 删除整个 ACL | undo acl 2000 |
步骤 3:调用(把 ACL 应用到接口)
[R2-GigabitEthernet0/0/0] traffic-filter inbound acl 2000
| 参数 | 说明 |
|---|---|
traffic-filter | 表示"过滤流量"(ACL 还可以被 NAT、策略路由等调用,命令不同) |
inbound / outbound | 方向是相对路由器而言:inbound = 从该接口进入路由器的流量;outbound = 从该接口出去的流量 |
acl 2000 | 调用的 ACL 编号 |
注意:ACL 创建后不会自动生效,必须被调用到接口(或其他功能)上才有作用。这是新手最容易漏的一步。
三、三个需求实战(讲义原题)
前置假设:PC1 = 192.168.1.2,PC2 = 192.168.1.3;R2 是 192.168.3.0 网段的网关;R2 有一个接口 192.168.2.2。
需求一:PC1 可以访问 192.168.3.0 网段,但 PC2 不行
思路:只限制"谁发的",不管"发给谁"——这是典型的基础 ACL。
[R2] acl 2000 [R2-acl-basic-2000] rule deny source 192.168.1.3 0.0.0.0 // 拒绝 PC2 [R2-acl-basic-2000] quit [R2] interface GigabitEthernet0/0/0 [R2-GigabitEthernet0/0/0] traffic-filter inbound acl 2000 // 在靠近目标的接口上调用
要点
-
只写了一条 deny,不需要写 permit——因为华为 ACL 末尾没有隐含拒绝,没匹配上的默认放行(PC1 自动通过)。
-
但这只挡了"PC2 去 192.168.3.0"吗?不是——它挡的是 PC2 的所有流量。想精确到"只挡去 3.0 网段",就得用高级 ACL。
需求二:PC1 可以 ping 通 3.2,但不能 ping 通 3.3
思路:源相同、目的不同 → 必须看目的 IP → 高级 ACL。
[R1] acl name xuqiuer 3000 // 以重命名方式创建高级 ACL [R1-acl-adv-xuqiuer] rule deny ip source 192.168.1.2 0.0.0.0 destination 192.168.3.3 0.0.0.0 [R1-acl-adv-xuqiuer] quit [R1] interface GigabitEthernet0/0/1 [R1-GigabitEthernet0/0/1] traffic-filter inbound acl 3000 // 在靠近源的接口上调用
要点
-
ip表示匹配所有 IP 报文(含 ICMP),这样 ping 就被挡住了;如果只想挡 ping,也可以写rule deny icmp ...。 -
这里只 deny 了"去 3.3"的流量,去 3.2 的流量没被匹配 → 默认放行。
需求三:PC1 可以 ping 通 R2,但不能 telnet 到 R2
思路:同源同目的,区别只在协议和端口——ping 是 ICMP(无端口),Telnet 是 TCP 23。
[R1] acl 3000 [R1-acl-adv-3000] rule deny tcp source 192.168.1.2 0.0.0.0 destination 192.168.2.2 0.0.0.0 destination-port eq 23 [R1-acl-adv-3000] quit [R1] interface GigabitEthernet0/0/1 [R1-GigabitEthernet0/0/1] traffic-filter inbound acl 3000
要点
-
tcp限定了协议,destination-port eq 23限定了端口 → 只挡 Telnet,ping(ICMP)不受影响。 -
这正是高级 ACL 的价值:能精确到"协议 + 端口"这一层。
常用端口速查【补充】
| 协议/服务 | 端口 | 说明 |
|---|---|---|
| Telnet | TCP 23 | 明文远程登录 |
| SSH | TCP 22 | 加密远程登录 |
| FTP | TCP 20/21 | 数据/控制 |
| HTTP / HTTPS | TCP 80 / 443 | 网页 |
| DNS | UDP 53(查询)/ TCP 53(区域传送) | 域名解析 |
| ICMP(ping) | 无端口 | 所以只能按协议匹配,不能按端口 |
三个需求对比一眼看懂
| 需求 | 区别在哪 | ACL 类型 | 匹配字段 |
|---|---|---|---|
| 一 | 只差"谁发的" | 基础 | 源 IP |
| 二 | 差"发给谁" | 高级 | 源 IP + 目的 IP |
| 三 | 差"用什么协议访问" | 高级 | 源 + 目的 + 协议 + 端口 |
四、ACL 的部署位置原则(重点理解,不要死记)
| ACL 类型 | 部署位置 | 原因 |
|---|---|---|
| 基础 ACL | 靠近目标(目的端) | 它不精准,只看源 IP。若放在靠近源的地方,会把"同一台主机访问其他网段"的流量也一起误杀——误伤 |
| 高级 ACL | 靠近源(发起端) | 它匹配精准(源+目的+协议+端口),不会误伤;放在源头能尽早丢弃,节省沿途带宽和设备资源 |
一句话:越不精准的规则,越要放到离目标近的地方;越精准的规则,越要放到离源头近的地方。 这也是为什么需求一(基础 ACL)配在 R2(目标侧),而需求二、三(高级 ACL)配在 R1(源侧)。
五、VLAN 基础
1. 三个"网"的概念
| 缩写 | 全称 | 范围 |
|---|---|---|
| LAN | Local Area Network,局域网 | 一个广播域(同一广播域内广播包可达) |
| MAN | Metropolitan Area Network,城域网 | 城市范围 |
| WAN | Wide Area Network,广域网 | 跨地域 |
LAN 的本质是"广播域"——这一点是理解 VLAN 的前提:一个 VLAN 就是一个广播域。
2. VLAN 是什么
VLAN = Virtual LAN,虚拟局域网——虚拟的广播域。
由交换机和路由器协同工作,将原来的一个广播域,在逻辑上划分成多个虚拟的广播域。
关键在"逻辑"两个字:物理上还是那些交换机、那些网线,但通过配置把它们在逻辑上切成几个互不相通的广播域。
为什么要划 VLAN【补充】
| 好处 | 说明 |
|---|---|
| ① 隔离广播域 | 广播包只在本 VLAN 内泛洪,广播风暴被限制在小范围,不拖垮整网 |
| ② 提升安全 | 不同 VLAN 默认二层隔离,不能直接互通(要通必须走三层) |
| ③ 灵活组网 | 按部门/功能划分,不受物理位置限制——同一部门可以在不同楼层 |
3. VID(VLAN ID)
| 项目 | 内容 |
|---|---|
| 长度 | 12 位二进制 |
| 范围 | 0 ~ 4095(共 4096 个) |
| 可用 | 1 ~ 4094 |
| 默认 | 设备默认存在 VLAN 1(不能删除) |
【补充】VLAN 0 和 VLAN 4095 是保留值,不能用于业务;所以实际可用是 4094 个。
六、VLAN 的三种划分方式
| 方式 | 依据 | 层级 | 特点 |
|---|---|---|---|
| 接口划分(一层 VLAN / 物理 VLAN) | VID 配置映射给交换机的接口 | 一层 | 最常用,配置简单;但同一接口只能属于一个 VLAN,用户换口就要重配 |
| MAC 划分(二层 VLAN) | VID 配置映射给 MAC 地址 | 二层 | 用户换接口不用重配(跟着人走);但前期要收集所有 MAC,维护量大 |
| 协议划分(三层 VLAN) | VID 配置映射给协议类型 | 三层 | 按报文协议(如 IP、IPX)分 VLAN,实际很少用 |
本课重点掌握接口划分(下面配置全是这种)。
七、VLAN 的基本配置
1. 创建 / 批量创建 / 删除 / 查看
[Huawei] display vlan // 查看所有 VLAN [Huawei] vlan 2 // 创建 VLAN 2(已存在则进入) [Huawei-vlan2] // VLAN 视图 [Huawei] vlan batch 4 to 10 // 批量创建 VLAN 4~10 [Huawei] undo vlan batch 4 to 10 // 批量删除 VLAN 4~10
【补充】
vlan batch 4 to 10也可以写成vlan batch 4 5 6 7 8 9 10,或混写vlan batch 2 to 5 8 10。
2. 将接口划入 VLAN(Access 口)
[Huawei] interface GigabitEthernet0/0/1 [Huawei-GigabitEthernet0/0/1] port link-type access // ① 先把接口类型设为 access [Huawei-GigabitEthernet0/0/1] port default vlan 2 // ② 再把接口划入 VLAN 2
两步顺序不能颠倒:接口默认是 hybrid 类型,必须先改成 access,才能用 port default vlan。
【补充】华为还有一种 hybrid 接口(默认类型),可以同时属于多个 VLAN,并且能手动控制哪些 VLAN 打标签、哪些不打。它功能最灵活,是华为特有的;access 和 trunk 其实都可以看作 hybrid 的特例。
八、802.1Q 帧与 tagged / untagged
1. 802.1Q 帧(tagged 帧)
在原先以太网帧的 源 MAC 和 TYPE 之间,插入 4 字节的 tag(其中包含 12 位的 VID)。
帧结构对比
普通以太网帧:
┌──────────┬──────────┬──────────┬─────────────┬─────┐
│ 目的 MAC │ 源 MAC │ TYPE │ 数据 │ FCS │
└──────────┴──────────┴──────────┴─────────────┴─────┘
802.1Q 帧(tagged):
┌──────────┬──────────┬──────────────┬──────────┬─────────────┬─────┐
│ 目的 MAC │ 源 MAC │ 4 字节 Tag │ TYPE │ 数据 │ FCS │
└──────────┴──────────┴──────────────┴──────────┴─────────────┴─────┘
↑ 插在这里
【补充】4 字节 Tag 的具体构成
| 字段 | 长度 | 作用 |
|---|---|---|
| TPID | 2 字节 | 固定 0x8100,标识"这是一个 802.1Q 帧" |
| PCP | 3 bit | 优先级(0~7),用于 QoS |
| DEI(CFI) | 1 bit | 丢弃 eligible 指示 |
| VID | 12 bit | VLAN ID,就是上面说的 0~4095 |
3 + 1 + 12 = 16 bit = 2 字节(TCI),加上 TPID 2 字节,正好 4 字节。
2. tagged 帧与 untagged 帧
| 类型 | 特征 | 谁能识别 |
|---|---|---|
| untagged 帧 | 普通以太网帧,没有 Tag | PC、服务器等终端(它们不认识 VLAN 标签) |
| tagged 帧 | 带 4 字节 Tag | 交换机、路由器(网络设备) |
这就是为什么终端接入口必须是 access:PC 收到带 Tag 的帧会直接丢弃(不认这个格式)。
九、Access 链路与 Trunk 链路
1. 两种链路的定义
| Access 链路 | Trunk 链路(干道) | |
|---|---|---|
| 连接对象 | 交换机 ↔ 电脑(终端) | 交换机 ↔ 交换机(也可接路由器) |
| 交换机侧接口 | Access 接口 | Trunk 接口 |
| 能通过的帧 | 只能通过 untagged 帧 | 可以通过 tagged 帧 |
| 承载 VLAN | 这些帧都来自某一个 VLAN | 这些帧可以属于多个不同的 VLAN |
2. 一张表看懂收发过程
以 PC1(VLAN 10)→ SW1 ══Trunk══ SW2 → PC2(VLAN 10) 为例:
| 步骤 | 发生在哪 | 做什么 | 帧的形态 |
|---|---|---|---|
| ① | PC1 → SW1 的 Access 口 | PC 发出普通以太网帧 | untagged |
| ② | SW1 入口 | 按该接口的 PVID 给帧打上 VLAN 10 的 Tag | tagged(VID=10) |
| ③ | SW1 → SW2 的 Trunk 口 | 携带 Tag 转发;对端认标签,知道这是 VLAN 10 | tagged |
| ④ | SW2 出口 Access 口 | 查表确认该 VLAN 在此口放行 → 剥掉 Tag | untagged |
| ⑤ | SW2 → PC2 | 送达终端 | untagged |
四步口诀(对应上表 ①~④):Access 口进 → 打标签;Trunk 口出 → 带标签走;Trunk 口进 → 认标签;Access 口出 → 剥标签。
【补充】Trunk 接口有一个 PVID(Port VLAN ID),华为默认是 VLAN 1。从 Trunk 口发出的帧,如果其 VLAN 等于 PVID,则不打标签(untagged);其余 VLAN 都打标签。这也是为什么 VLAN 1 的流量在 Trunk 上通常是"裸"的。
十、Trunk 的配置
[Huawei] interface GigabitEthernet0/0/5 [Huawei-GigabitEthernet0/0/5] port link-type trunk // ① 接口类型改为 trunk [Huawei-GigabitEthernet0/0/5] port trunk allow-pass vlan 2 3 // ② 允许通过的 VLAN 列表
三个易错点
| # | 易错点 | 说明 |
|---|---|---|
| ① | 忘记配 allow-pass | 华为 trunk 接口默认只允许 VLAN 1 通过,不写这条,VLAN 2/3 的流量过不去 |
| ② | 两端 allow-pass 不一致 | 链路两端必须都允许该 VLAN,否则单向通、单向断 |
| ③ | 两端接口类型不一致 | 一端 trunk 一端 access,VLAN 标签处理方式不同,必然不通 |
放行所有 VLAN 的写法【补充】
[Huawei-GigabitEthernet0/0/5] port trunk allow-pass vlan all
生产环境不建议图省事写
all——会把不必要的 VLAN 也放过去,扩大广播域、增加安全隐患。
十一、VLAN 间路由【补充】(讲义只写了标题,这里补齐)
问题:不同 VLAN 属于不同广播域,二层天然隔离。要让 VLAN 10 的 PC 访问 VLAN 20 的 PC,必须经过三层转发。
三种实现方式
| 方式 | 设备 | 原理 | 特点 |
|---|---|---|---|
| ① 单臂路由 | 路由器 | 一个物理口划多个子接口,每个子接口对应一个 VLAN | 省设备,但一根链路承载所有 VLAN 间流量,易成瓶颈 |
| ② 三层交换机 SVI | 三层交换机 | 每个 VLAN 起一个 Vlanif 接口做网关 | 性能好、主流方案 |
| ③ 路由器物理接口 | 路由器 | 每个 VLAN 一个物理口 | 浪费接口,几乎不用 |
方式一:单臂路由(Router-on-a-stick)
# 交换机侧:接路由器的口配成 Trunk,放行要互通的 VLAN [SW1] interface GigabitEthernet0/0/1 [SW1-GigabitEthernet0/0/1] port link-type trunk [SW1-GigabitEthernet0/0/1] port trunk allow-pass vlan 10 20 # 路由器侧:一个物理口划两个子接口 [R1] interface GigabitEthernet0/0/0.10 [R1-GigabitEthernet0/0/0.10] dot1q termination vid 10 // 子接口识别 VLAN 10 的 Tag [R1-GigabitEthernet0/0/0.10] ip address 192.168.10.254 24 // 作为 VLAN 10 的网关 [R1-GigabitEthernet0/0/0.10] arp broadcast enable // 必须打开 ARP 广播 [R1] interface GigabitEthernet0/0/0.20 [R1-GigabitEthernet0/0/0.20] dot1q termination vid 20 [R1-GigabitEthernet0/0/0.20] ip address 192.168.20.254 24 [R1-GigabitEthernet0/0/0.20] arp broadcast enable
两个必须记住的点: ①
dot1q termination vid—— 告诉子接口"你负责拆哪个 VLAN 的标签"; ②arp broadcast enable—— 不配这条,子接口不转发 ARP 广播,主机解析不到网关 MAC,直接不通。这是单臂路由最经典的坑。
方式二:三层交换机 SVI(Vlanif)
[SW1] interface Vlanif 10 [SW1-Vlanif10] ip address 192.168.10.254 24 [SW1] interface Vlanif 20 [SW1-Vlanif20] ip address 192.168.20.254 24
前提条件:该 VLAN 内部至少要有一个物理接口处于 UP 状态,否则 Vlanif 接口是 Down 的,路由不生效。
三层交换机内部有路由引擎,VLAN 间转发在设备内部完成,不需要外接路由器,速度和背板带宽一致——这是它取代单臂路由的原因。
十二、命令速查表
ACL
| 操作 | 命令 |
|---|---|
| 创建基础 ACL | acl 2000 |
| 创建高级 ACL(编号) | acl 3000 |
| 创建高级 ACL(命名) | acl name xuqiuer 3000 |
| 写基础规则 | rule deny source 192.168.1.3 0.0.0.0 |
| 写高级规则(按 IP) | rule deny ip source 192.168.1.2 0.0.0.0 destination 192.168.3.3 0.0.0.0 |
| 写高级规则(按 TCP 端口) | rule deny tcp source ... destination ... destination-port eq 23 |
| 插入规则(指定编号) | rule 7 deny source 192.168.1.2 0.0.0.0 |
| 删除规则 | undo rule 7 |
| 查看 ACL | display acl 2000 |
| 接口调用(入方向) | traffic-filter inbound acl 2000 |
| 接口调用(出方向) | traffic-filter outbound acl 2000 |
VLAN
| 操作 | 命令 |
|---|---|
| 查看 VLAN | display vlan |
| 创建 VLAN | vlan 2 |
| 批量创建/删除 | vlan batch 4 to 10 / undo vlan batch 4 to 10 |
| 接口设为 access | port link-type access |
| 接口划入 VLAN | port default vlan 2 |
| 接口设为 trunk | port link-type trunk |
| Trunk 放行 VLAN | port trunk allow-pass vlan 2 3 |
| 创建 Vlanif(三层) | interface Vlanif 10 + ip address ... |
| 查看接口 VLAN 信息 | display port vlan 【补充】 |
十三、本天小结
1. ACL 一句话总结
ACL 是一张"自上而下、命中即停"的规则表:只写 deny 不写 permit 在华为是"黑名单"(华为末尾无隐含拒绝),在思科则变成"白名单"(末尾隐含拒绝全部)。
三条铁律
-
顺序决定结果——宽泛的规则写在前面会吃掉后面精确的规则。
-
通配符 0 死 1 活,且可以穿插(与 OSPF 反掩码不同)。
-
基础靠目标、高级靠源——不精准的别放源头,精准的尽早丢弃。
2. VLAN 一句话总结
VLAN 就是把一台交换机在逻辑上切成多个广播域:Access 口接终端(untagged),Trunk 口连交换机(tagged),跨 VLAN 通信必须走三层。
两张表记住
| Access | Trunk | |
|---|---|---|
| 接谁 | 终端 | 交换机 |
| 帧 | 只 untagged | 可 tagged |
| VLAN 数 | 1 个 | 多个 |
| 划分方式 | 依据 | 别称 |
|---|---|---|
| 接口 | 接口 | 一层 / 物理 VLAN |
| MAC | MAC 地址 | 二层 VLAN |
| 协议 | 协议类型 | 三层 VLAN |
3. 与前面几天的衔接
-
第七~九天讲的是路由(三层怎么找路),第十天开始进入交换 + 访问控制(二层怎么隔离、流量怎么过滤)。
-
ACL 里的"通配符"和第九天 OSPF 的"反掩码"长得像但规则不同,是同一份试卷里最爱放一起对比的两个概念。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)