802.1X 原理与报文 — 基于端口的网络访问控制

三角色模型、受控端口、EAPOL 帧格式、EAP 报文、认证时序与 EAP 方法对比 / 数据链路层 / EtherType 0x888E / IEEE 802.1X-2020

先建立直觉

一句话:802.1X 让网口先验明正身,再决定放不放你进来。

想象小区门口的闸机。你走到闸机前,它不会先让你进去再问你是谁——它把门关着,只留一条刷卡缝。你把卡一刷,闸机把信息传给物业后台,后台确认"这是 8 栋业主",闸机才开门,并且告诉电梯"这人只能去 8 楼"。

有三点值得先记住:闸机自己不认识任何人,判断权在后台;门关着的时候什么都递不进去,只有那条刷卡缝管用;开门之后,你被安排去哪一层是后台说了算,不是你自己选的。这三点就是 802.1X 的全部精髓。

它解决什么问题

没有它的网络是这样的:会议室墙上有个网口,谁把网线一插就在内网里了。这时候他还没登录任何系统、还没输任何密码,但已经能扫全网、能伪造 ARP、能假冒 DHCP——等你在应用层拦他的时候,他早就进屋了

靠 MAC 白名单挡?MAC 一条命令就能改。靠 VPN 或 Portal 网页登录挡?那都是拿到 IP 之后的事,攻击窗口已经打开。

还有个日常痛点:员工换了工位,网络管理员就得跟着改 VLAN、改 ACL。人在动,配置却绑在端口上。

802.1X 把关卡前移到网线刚插上的那一刻:验明身份之前,这个口一个业务包都不放行;验明之后,后台顺便把"你该进哪个网段、能访问什么"一起下发。人走到哪,策略跟到哪。

工作流程(简化版)

先记住这五步主线,后面所有细节都挂在它上面:

  1. 默认关门:网线插上后,交换机端口只放行认证报文,其他一律丢弃——所以这时候你连 IP 都拿不到。
  2. 问你是谁:交换机(或客户端主动)开启对话,先问一句"报上名来"。
  3. 你和后台隔空对话:接下来的所有凭据交换,其实是你的电脑和后台服务器在谈,交换机只是把话原样转述——它听不懂内容,也无权判断。
  4. 后台拍板:服务器验完身份,回一句"接受"或"拒绝"。接受时还会捎带上"把他放进 20 号 VLAN、套上这条 ACL"。
  5. 开门并落策略:交换机据此把端口切到授权状态,按下发的属性配好 VLAN/ACL。此时你的电脑才能发出第一个 DHCP 请求。

下面三小节是这条主线的完整细节。

1.1 三个角色

角色中文承担者职责
Supplicant申请者 / 客户端PC、手机、打印机上的 802.1X 客户端(Windows 有线自动配置服务、wpa_supplicant、macOS 内置)提供身份与凭据,与认证服务器进行 EAP 会话
Authenticator认证者 / 接入设备接入交换机、无线 AP / AC、NAS控制端口开关;在 EAPOL 与 RADIUS 之间做报文转换与中继;不判断凭据对错
Authentication Server认证服务器FreeRADIUS、Microsoft NPS、Cisco ISE、华为 Agile Controller真正校验身份(查 AD/LDAP/证书/数据库),返回接受或拒绝,并下发授权策略

关键理解:Supplicant 与 Authentication Server 之间是端到端的 EAP 会话,Authenticator 只是中间的"翻译工"。EAP 内容(比如 TLS 握手)对交换机而言是不透明的字节流。这就是为什么升级到新的 EAP 方法不需要更换交换机

1.2 受控端口与非受控端口

802.1X 把一个物理端口在逻辑上拆成两个:

逻辑端口状态通过的流量
非受控端口 Uncontrolled Port永远开放只有 EAPOL 帧(EtherType 0x888E)
受控端口 Controlled Port认证前 Unauthorized(未授权);认证后 Authorized(已授权)未授权时:丢弃全部业务流量(ARP、DHCP、IP 一律不通);已授权时:正常转发

端口授权模式(authentication port-control):

  • force-unauthorized:强制关闭,任何设备都不能通过(用于封禁端口);
  • auto标准模式,依认证结果决定(生产环境默认);
  • force-authorized:强制开放,等同于不做认证(用于上联口、服务器口)。

1.3 认证的两段协议

1
2
[Supplicant] ←── EAP over LAN (EAPOL, 0x888E) ──→ [Authenticator] ←── EAP over RADIUS (UDP 1812) ──→ [RADIUS Server]
                        二层,无 IP 三层,需路由可达

Authenticator 的转换工作非常机械:把收到的 EAP 报文原样塞进 RADIUS 的 EAP-Message 属性(超过 253 字节则拆成多个属性),加上 NAS-IP-AddressNAS-PortCalling-Station-Id(客户端 MAC)等上下文,附上 Message-Authenticator 校验后发出;反向亦然。

报文 / 头部长什么样

2.1 EAPOL 帧格式(IEEE 802.1X)

看这张表前先记住:EAPOL 只是一层"信封",本身只有 4 个字节的头,作用是"我是第几版协议、我这封信装的是什么、有多长"。真正的认证内容装在 Body 里。看信封不用花力气,重点在 Packet Type 这一格。

1
2
| 以太网头 14B | EAPOL 头 4B | EAPOL Body(可变) | [Padding] | FCS |
                └ Version 1B | Type 1B | Body Length 2B ┘
字段长度含义
目的 MAC — 目的硬件地址6 B通常为 PAE 组播地址 01:80:C2:00:00:03(Nearest Non-TPMR Bridge),保证不被网桥转发出本链路
EtherType — 以太网类型2 B0x888E
Protocol Version — 协议版本1 B1=802.1X-2001,2=802.1X-2004,3=802.1X-2010(含 MACsec/MKA)
Packet Type — 帧类型1 BEAPOL 帧类型,见下表
Packet Body Length — 负载长度2 BBody 字节数;对无 Body 的类型(如 Start、Logoff)为 0
Packet Body — 负载可变按类型承载 EAP 报文或密钥数据

看这张表前先记住:五种类型里,认证过程中 99% 的帧都是第一种(EAP-Packet,真正装认证内容),后面四种都是"信令"——开始、结束、送钥匙、报警。

EAPOL Packet Type 取值

名称用途
0x00EAP-Packet承载一个完整的 EAP 报文(认证过程中绝大多数帧)
0x01EAPOL-Start客户端主动发起认证(发给 01:80:C2:00:00:03
0x02EAPOL-Logoff客户端主动下线,端口回到未授权状态
0x03EAPOL-Key承载密钥信息(WPA/WPA2 四次握手、MACsec MKA 均用它)
0x04EAPOL-Encapsulated-ASF-Alert传递告警(罕用)

2.2 EAP 报文格式(RFC 3748)

看这张表前先记住:EAP 报文头只回答四个问题——这是问还是答(Code)、这一问一答是否配对(Identifier)、有多长(Length)、用哪种方式验(Type)。抓包时你的眼睛只需要盯 Code 和 Type 这两格。

1
| Code 1B | Identifier 1B | Length 2B | Data(Type 1B + Type-Data) |
字段长度含义
Code — 报文类别1 B1=Request(服务器问),2=Response(客户端答),3=Success4=Failure
Identifier — 配对标识1 B请求与响应的配对序号,防止串包与重放混淆
Length — 报文总长度2 B整个 EAP 报文长度(含头部)
Type — 认证方法类型1 B仅 Request/Response 有。认证方法类型,见下表
Type-Data — 方法数据可变该方法的具体数据(如身份字符串、TLS 记录分片)

看这张表前先记住:这张表里真正要背的只有五个数字——1 问名字、3 是拒绝并改提议、13 是双证书、25 是企业最常见的 PEAP、26 是塞在 PEAP 里面的那层。其余混个脸熟即可。

常见 EAP Type

Type名称说明
1Identity询问/回答用户名,认证第一步
2Notification向用户显示提示信息
3NAK客户端拒绝服务器建议的方法,并提出自己支持的方法(协商关键)
4MD5-Challenge挑战/响应,不安全(明文可被字典攻击、不支持双向认证、无密钥导出),无线禁用
13EAP-TLS双向证书认证,安全性最高(RFC 5216)
21EAP-TTLS服务器证书 + 隧道内任意内层认证
25PEAP服务器证书建 TLS 隧道,隧道内跑 MSCHAPv2,企业部署最广
26MSCHAPv2常作为 PEAP 的内层方法
18 / 23 / 50EAP-SIM / AKA / AKA'运营商 SIM 卡认证

2.3 关键 RADIUS 属性

看这张表前先记住:这些属性可以分成三堆——“你是谁”(User-Name、Calling-Station-Id)、“你从哪个口进来的”(NAS-IP-Address、NAS-Port)、“批准后给你什么待遇”(Tunnel-* 三件套、Filter-Id、Session-Timeout)。排错时最常盯的是 Calling-Station-Id(客户端 MAC)。

属性编号作用
User-Name1身份标识(外层 Identity)
NAS-IP-Address4认证者 IP,服务器据此识别接入设备
NAS-Port / NAS-Port-Id5 / 87具体端口,用于定位物理位置
Calling-Station-Id31客户端 MAC 地址(排错必看)
EAP-Message79承载 EAP 报文,超 253 字节则多属性串联
Message-Authenticator80HMAC-MD5 完整性校验,携带 EAP 时必须存在
Tunnel-Type / Tunnel-Medium-Type / Tunnel-Private-Group-ID64 / 65 / 81三者组合下发动态 VLAN(分别取 VLAN(13) / IEEE-802(6) / VLAN 号或名)
Filter-Id11下发 ACL 名称
Session-Timeout / Termination-Action27 / 29会话超时与超时后动作(重认证或断开)

交互时序

一句话看懂这张图:竖着看是三根泳道,但中间那根(交换机)只是个传声筒——左边一段用 EAPOL 走二层,右边一段用 RADIUS 走三层,同一份 EAP 内容换了两趟车;直到最右边回来一个 Accept,端口才开门,客户端也才终于能发 DHCP。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
sequenceDiagram
    autonumber
    participant S as Supplicant<br/>(PC 客户端)
    participant A as Authenticator<br/>(接入交换机)
    participant R as RADIUS Server<br/>(FreeRADIUS/NPS)

    Note over A: 端口初始为 Unauthorized<br/>只放行 EAPOL(0x888E)

    S->>A: EAPOL-Start(可选,也可由交换机主动发起)
    A->>S: EAP-Request / Identity
    S->>A: EAP-Response / Identity(user@corp.com)

    Note over A,R: 转换点:EAP 装进 RADIUS 的 EAP-Message 属性
    A->>R: RADIUS Access-Request<br/>[EAP-Message, NAS-IP, Calling-Station-Id, Message-Authenticator]
    R->>A: RADIUS Access-Challenge<br/>[EAP-Request/PEAP or TLS Start]
    A->>S: EAP-Request / PEAP(Type=25)

    rect rgb(235,240,248)
    Note over S,R: 多轮往返:TLS 握手 + 隧道内 MSCHAPv2<br/>每一轮 = EAPOL 一段 + RADIUS 一段
    S->>A: EAP-Response(TLS ClientHello…)
    A->>R: Access-Request
    R->>A: Access-Challenge(Certificate, ServerKeyExchange…)
    A->>S: EAP-Request
    S->>A: EAP-Response(内层凭据,受 TLS 隧道保护)
    A->>R: Access-Request
    end

    R->>A: RADIUS Access-Accept<br/>[EAP-Success, Tunnel-Private-Group-ID=20, Filter-Id, MS-MPPE-Keys]
    Note over A: 端口切换为 Authorized<br/>并按属性下发动态 VLAN 20 / ACL
    A->>S: EAP-Success(EAPOL 封装)
    A->>R: RADIUS Accounting-Request(Start,UDP 1813)

    Note over S: 此时才能发 DHCP Discover
    S->>A: DHCP / ARP / 业务流量(放行)

    S->>A: EAPOL-Logoff(下线)
    Note over A: 端口回到 Unauthorized
    A->>R: Accounting-Request(Stop)

失败路径:服务器返回 Access-Reject → 认证者转成 EAP-Failure 发给客户端,端口保持未授权;此时可按配置进入 Guest VLAN(无客户端响应时)或 Auth-Fail VLAN / Restricted VLAN(认证失败时)。

关键机制 / 变体

4.1 EAP 方法选型对比

这是干什么的:决定"到底用什么方式证明你是你"——密码、服务器证书、双向证书还是 SIM 卡。802.1X 的骨架是固定的,这里换的是里子。

方法服务器证书客户端证书安全性部署复杂度适用场景
EAP-MD5(明文挑战、单向认证、不导出密钥)极低仅限有线且低安全要求;无线禁用
PEAP-MSCHAPv2需要中高中(只需服务器证书 + 域账号)企业最主流:与 AD 集成,员工用域账号登录
EAP-TTLS需要中高内层可用 PAP/CHAP,便于对接旧有认证库
EAP-TLS需要需要最高(双向证书、抗钓鱼)高(需 PKI 与证书分发)高安全场景、物联网设备、零信任架构
EAP-SIM/AKASIM 卡依赖运营商运营商 Wi-Fi 无感知接入

安全要点:PEAP/TTLS 场景下,客户端必须校验服务器证书(勾选"验证服务器证书"并指定受信任 CA 与服务器名)。否则攻击者可架设同名 SSID 的假 RADIUS,诱骗客户端泄露 MSCHAPv2 挑战响应并离线破解。

4.2 动态 VLAN 下发

这是干什么的:让"你能进哪个网段"由后台按人决定,而不是由网口位置决定。

认证成功后由 RADIUS 三个属性组合指定 VLAN,实现"策略跟着人走":

1
2
3
Tunnel-Type = VLAN (13)
Tunnel-Medium-Type = IEEE-802 (6)
Tunnel-Private-Group-Id = "20" # VLAN ID 或 VLAN 名

研发接入即落到研发 VLAN,财务接入落到财务 VLAN,同一个网口对不同人给出不同网络——这是 802.1X 相比静态 VLAN 的最大价值。

4.3 无客户端设备的兜底:MAB 与 Guest VLAN

这是干什么的:给"不会刷卡的人"想办法。打印机、摄像头不会说 802.1X,RADIUS 也可能宕机——总不能让全楼断网,所以要预设几条降级通道。

打印机、IP 电话、摄像头、老旧设备往往没有 802.1X 客户端,需要兜底策略:

机制触发条件说明
MAB(MAC Authentication Bypass)端口在 tx-period × max-reauth-req 后仍无 EAPOL 响应交换机把设备 MAC 当作用户名/密码发给 RADIUS 查白名单。安全性弱(MAC 可伪造),应配合限制 VLAN
Guest VLAN客户端完全不响应 EAPOL放进受限访客网络,通常只能上外网
Auth-Fail / Restricted VLAN客户端响应了但认证失败放进修复网络(如只能访问补丁服务器、自助改密页)
Critical VLAN / Inaccessible BypassRADIUS 服务器不可达避免服务器宕机造成全网断网,临时放行到指定 VLAN。生产环境强烈建议配置

优先级配置示例(Cisco IBNS):dot1x 优先,超时降级 mab,再失败进 Guest VLAN。

4.4 端口主机模式(Host Mode)

这是干什么的:规定"一个网口下面能站几个人、要不要每人各刷一次卡"。接了小交换机、IP 电话串 PC、虚拟机等场景全靠它区分。

模式允许接入场景
single-host端口下仅 1 个 MAC最严格,一人一口
multi-host首个通过认证后,该端口所有设备都放行便捷但有搭便车风险
multi-domain1 个数据域 + 1 个语音域(各 1 台)IP 电话串接 PC 的标准方案
multi-auth每个 MAC 独立认证、独立授权端口下接哑集线器/虚拟机,安全性最好

4.5 重认证与会话维护

这是干什么的:解决"进门时是你,进门后还是不是你"——定期复查、拔线即失效、必要时管理员能远程把人踢出去。

  • 周期性重认证Session-Timeout + Termination-Action=RADIUS(1) 或交换机本地 dot1x timeout reauth-period,定期确认用户仍合法。
  • 链路 down 即下线:网线拔出时端口立刻回到未授权(防止"认证后换设备")。
  • CoA(RFC 5176):RADIUS 服务器可主动下发 Change of AuthorizationDisconnect-Message(UDP 3799),实现管理员强制下线、动态改 VLAN、隔离失陷终端——这是 NAC 联动的关键能力。

4.6 与 WPA2/WPA3-Enterprise 的衔接

这是干什么的:说明企业 Wi-Fi 输入域账号那一步,本质上就是这套流程搬到了无线上——而且认证顺带产出了加密用的密钥。

无线场景 EAP 成功后,服务器与客户端各自导出 MSK(Master Session Key),服务器通过 MS-MPPE-Recv-Key/Send-Key 属性把 PMK 送给 AP,随后 AP 与客户端执行 四次握手(用 EAPOL-Key 帧承载) 派生 PTK/GTK,开始加密通信。也就是说:WPA2-Enterprise ≈ 802.1X 认证 + 四次握手密钥协商

常见误区

  • 误区一:“交换机负责验证账号密码。” 错。Authenticator(交换机/AP)不判断凭据对错,它只做 EAPOL ↔ RADIUS 的报文中继与端口开关控制。真正的校验在 Authentication Server(RADIUS)上。这也正是"升级 EAP 方法不用换交换机"的原因——EAP 内容对交换机而言是不透明的字节流。

  • 误区二:“认证之前至少能拿到 IP 吧。” 不能。DHCP 属于业务流量,归受控端口管,未授权时连同 ARP、IP 一并丢弃。认证前能通过的只有 EAPOL。“网线插上、灯亮着、拿不到 IP"是 802.1X 环境的正常表现,不是 DHCP 坏了。

  • 误区三:“PEAP 不用管证书,反正客户端没有证书。” 危险的误解。PEAP/TTLS 虽然不需要客户端证书,但客户端必须校验服务器证书。否则攻击者架个同名 SSID + 假 RADIUS,就能骗走 MSCHAPv2 挑战响应拿去离线破解。必须启用"验证服务器证书"并配置受信任 CA 与服务器名匹配。

  • 误区四:“MAB 也是一种认证,安全性和 802.1X 差不多。” 错。MAB 是把设备 MAC 当账号密码去查白名单,而 MAC 可以随意伪造,安全性明显弱于 802.1X,只能作为哑终端的兜底,必须配合受限 VLAN 与 ACL 使用。

  • 误区五:“RADIUS 挂了大不了新用户进不来,老用户不受影响就行。” 这个假设很危险。默认情况下服务器不可达就意味着所有新接入都无法认证,足以造成"全楼断网”。生产环境必须配置 Critical VLAN / Inaccessible Authentication Bypass,并部署多台 RADIUS 冗余。

速记口诀

角色口诀申请者递卡、认证者传话、服务器拍板——中间那个不许有主见。

端口口诀一口拆两门,一门只走 EAPOL,一门管所有业务;没批之前,业务门关死。

换乘口诀EAP 是货,EAPOL 和 RADIUS 是前后两趟车——货不变,车换两次。

兜底口诀不吭声进 Guest,答错了进 Auth-Fail,后台死了进 Critical,没客户端就用 MAB。

知识框架

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
mindmap
  root((802.1X 端口访问控制))
    定位
      IEEE 802.1X-2020
      数据链路层准入
      EAPOL EtherType 0x888E
      先认证后入网
    三角色
      Supplicant 申请者
        wpa_supplicant
        Windows 有线自动配置
      Authenticator 认证者
        交换机 / AP
        仅做中继与端口控制
      Authentication Server
        FreeRADIUS / NPS / ISE
        对接 AD LDAP PKI
    端口模型
      非受控端口只通EAPOL
      受控端口 Unauthorized
      受控端口 Authorized
      force-authorized
      force-unauthorized
      auto
    报文
      EAPOL帧
        Version
        Type EAP-Packet
        EAPOL-Start
        EAPOL-Logoff
        EAPOL-Key
      EAP报文
        Code 1请求2响应3成功4失败
        Identifier配对
        Type Identity NAK TLS PEAP
      RADIUS属性
        EAP-Message 79
        Message-Authenticator 80
        Calling-Station-Id 31
        Tunnel-Private-Group-ID 81
        Filter-Id 11
    EAP方法
      EAP-MD5 不安全
      PEAP-MSCHAPv2 最主流
      EAP-TTLS
      EAP-TLS 双向证书最安全
      EAP-SIM AKA
    兜底与扩展
      MAB MAC旁路
      Guest VLAN
      Auth-Fail VLAN
      Critical VLAN
      动态VLAN下发
      主机模式 single multi-auth
      CoA RFC 5176 强制下线
    延伸
      WPA2 WPA3 Enterprise
      四次握手导出PMK
      MACsec 802.1AE + MKA