一、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                                          // 查看整个列表

查看与删除小结

操作命令
查看 ACLdisplay acl 2000
删除某条规则undo rule 7
删除整个 ACLundo 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 的价值:能精确到"协议 + 端口"这一层。

常用端口速查【补充】

协议/服务端口说明
TelnetTCP 23明文远程登录
SSHTCP 22加密远程登录
FTPTCP 20/21数据/控制
HTTP / HTTPSTCP 80 / 443网页
DNSUDP 53(查询)/ TCP 53(区域传送)域名解析
ICMP(ping)无端口所以只能按协议匹配,不能按端口

三个需求对比一眼看懂

需求区别在哪ACL 类型匹配字段
一只差"谁发的"基础源 IP
二差"发给谁"高级源 IP + 目的 IP
三差"用什么协议访问"高级源 + 目的 + 协议 + 端口

四、ACL 的部署位置原则(重点理解,不要死记)

ACL 类型部署位置原因
基础 ACL靠近目标(目的端)它不精准,只看源 IP。若放在靠近源的地方,会把"同一台主机访问其他网段"的流量也一起误杀——误伤
高级 ACL靠近源(发起端)它匹配精准(源+目的+协议+端口),不会误伤;放在源头能尽早丢弃,节省沿途带宽和设备资源

一句话:越不精准的规则,越要放到离目标近的地方;越精准的规则,越要放到离源头近的地方。 这也是为什么需求一(基础 ACL)配在 R2(目标侧),而需求二、三(高级 ACL)配在 R1(源侧)。


五、VLAN 基础

1. 三个"网"的概念

缩写全称范围
LANLocal Area Network,局域网一个广播域(同一广播域内广播包可达)
MANMetropolitan Area Network,城域网城市范围
WANWide 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 的具体构成

字段长度作用
TPID2 字节固定 0x8100,标识"这是一个 802.1Q 帧"
PCP3 bit优先级(0~7),用于 QoS
DEI(CFI)1 bit丢弃 eligible 指示
VID12 bitVLAN ID,就是上面说的 0~4095

3 + 1 + 12 = 16 bit = 2 字节(TCI),加上 TPID 2 字节,正好 4 字节。

2. tagged 帧与 untagged 帧

类型特征谁能识别
untagged 帧普通以太网帧,没有 TagPC、服务器等终端(它们不认识 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 的 Tagtagged(VID=10)
③SW1 → SW2 的 Trunk 口携带 Tag 转发;对端认标签,知道这是 VLAN 10tagged
④SW2 出口 Access 口查表确认该 VLAN 在此口放行 → 剥掉 Taguntagged
⑤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

操作命令
创建基础 ACLacl 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
查看 ACLdisplay acl 2000
接口调用(入方向)traffic-filter inbound acl 2000
接口调用(出方向)traffic-filter outbound acl 2000

VLAN

操作命令
查看 VLANdisplay vlan
创建 VLANvlan 2
批量创建/删除vlan batch 4 to 10 / undo vlan batch 4 to 10
接口设为 accessport link-type access
接口划入 VLANport default vlan 2
接口设为 trunkport link-type trunk
Trunk 放行 VLANport trunk allow-pass vlan 2 3
创建 Vlanif(三层)interface Vlanif 10 + ip address ...
查看接口 VLAN 信息display port vlan 【补充】

十三、本天小结

1. ACL 一句话总结

ACL 是一张"自上而下、命中即停"的规则表:只写 deny 不写 permit 在华为是"黑名单"(华为末尾无隐含拒绝),在思科则变成"白名单"(末尾隐含拒绝全部)。

三条铁律

  1. 顺序决定结果——宽泛的规则写在前面会吃掉后面精确的规则。

  2. 通配符 0 死 1 活,且可以穿插(与 OSPF 反掩码不同)。

  3. 基础靠目标、高级靠源——不精准的别放源头,精准的尽早丢弃。

2. VLAN 一句话总结

VLAN 就是把一台交换机在逻辑上切成多个广播域:Access 口接终端(untagged),Trunk 口连交换机(tagged),跨 VLAN 通信必须走三层。

两张表记住

AccessTrunk
接谁终端交换机
帧只 untagged可 tagged
VLAN 数1 个多个
划分方式依据别称
接口接口一层 / 物理 VLAN
MACMAC 地址二层 VLAN
协议协议类型三层 VLAN

3. 与前面几天的衔接

  • 第七~九天讲的是路由(三层怎么找路),第十天开始进入交换 + 访问控制(二层怎么隔离、流量怎么过滤)。

  • ACL 里的"通配符"和第九天 OSPF 的"反掩码"长得像但规则不同,是同一份试卷里最爱放一起对比的两个概念。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐