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 把关卡前移到网线刚插上的那一刻:验明身份之前,这个口一个业务包都不放行;验明之后,后台顺便把"你该进哪个网段、能访问什么"一起下发。人走到哪,策略跟到哪。
工作流程(简化版)
先记住这五步主线,后面所有细节都挂在它上面:
- 默认关门:网线插上后,交换机端口只放行认证报文,其他一律丢弃——所以这时候你连 IP 都拿不到。
- 问你是谁:交换机(或客户端主动)开启对话,先问一句"报上名来"。
- 你和后台隔空对话:接下来的所有凭据交换,其实是你的电脑和后台服务器在谈,交换机只是把话原样转述——它听不懂内容,也无权判断。
- 后台拍板:服务器验完身份,回一句"接受"或"拒绝"。接受时还会捎带上"把他放进 20 号 VLAN、套上这条 ACL"。
- 开门并落策略:交换机据此把端口切到授权状态,按下发的属性配好 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 认证的两段协议
Authenticator 的转换工作非常机械:把收到的 EAP 报文原样塞进 RADIUS 的 EAP-Message 属性(超过 253 字节则拆成多个属性),加上 NAS-IP-Address、NAS-Port、Calling-Station-Id(客户端 MAC)等上下文,附上 Message-Authenticator 校验后发出;反向亦然。
报文 / 头部长什么样
2.1 EAPOL 帧格式(IEEE 802.1X)
看这张表前先记住:EAPOL 只是一层"信封",本身只有 4 个字节的头,作用是"我是第几版协议、我这封信装的是什么、有多长"。真正的认证内容装在 Body 里。看信封不用花力气,重点在 Packet Type 这一格。
| 字段 | 长度 | 含义 |
|---|---|---|
| 目的 MAC — 目的硬件地址 | 6 B | 通常为 PAE 组播地址 01:80:C2:00:00:03(Nearest Non-TPMR Bridge),保证不被网桥转发出本链路 |
| EtherType — 以太网类型 | 2 B | 0x888E |
| Protocol Version — 协议版本 | 1 B | 1=802.1X-2001,2=802.1X-2004,3=802.1X-2010(含 MACsec/MKA) |
| Packet Type — 帧类型 | 1 B | EAPOL 帧类型,见下表 |
| Packet Body Length — 负载长度 | 2 B | Body 字节数;对无 Body 的类型(如 Start、Logoff)为 0 |
| Packet Body — 负载 | 可变 | 按类型承载 EAP 报文或密钥数据 |
看这张表前先记住:五种类型里,认证过程中 99% 的帧都是第一种(EAP-Packet,真正装认证内容),后面四种都是"信令"——开始、结束、送钥匙、报警。
EAPOL Packet Type 取值:
| 值 | 名称 | 用途 |
|---|---|---|
0x00 | EAP-Packet | 承载一个完整的 EAP 报文(认证过程中绝大多数帧) |
0x01 | EAPOL-Start | 客户端主动发起认证(发给 01:80:C2:00:00:03) |
0x02 | EAPOL-Logoff | 客户端主动下线,端口回到未授权状态 |
0x03 | EAPOL-Key | 承载密钥信息(WPA/WPA2 四次握手、MACsec MKA 均用它) |
0x04 | EAPOL-Encapsulated-ASF-Alert | 传递告警(罕用) |
2.2 EAP 报文格式(RFC 3748)
看这张表前先记住:EAP 报文头只回答四个问题——这是问还是答(Code)、这一问一答是否配对(Identifier)、有多长(Length)、用哪种方式验(Type)。抓包时你的眼睛只需要盯 Code 和 Type 这两格。
| |
| 字段 | 长度 | 含义 |
|---|---|---|
| Code — 报文类别 | 1 B | 1=Request(服务器问),2=Response(客户端答),3=Success,4=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 | 名称 | 说明 |
|---|---|---|
1 | Identity | 询问/回答用户名,认证第一步 |
2 | Notification | 向用户显示提示信息 |
3 | NAK | 客户端拒绝服务器建议的方法,并提出自己支持的方法(协商关键) |
4 | MD5-Challenge | 挑战/响应,不安全(明文可被字典攻击、不支持双向认证、无密钥导出),无线禁用 |
13 | EAP-TLS | 双向证书认证,安全性最高(RFC 5216) |
21 | EAP-TTLS | 服务器证书 + 隧道内任意内层认证 |
25 | PEAP | 服务器证书建 TLS 隧道,隧道内跑 MSCHAPv2,企业部署最广 |
26 | MSCHAPv2 | 常作为 PEAP 的内层方法 |
18 / 23 / 50 | EAP-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-Name | 1 | 身份标识(外层 Identity) |
NAS-IP-Address | 4 | 认证者 IP,服务器据此识别接入设备 |
NAS-Port / NAS-Port-Id | 5 / 87 | 具体端口,用于定位物理位置 |
Calling-Station-Id | 31 | 客户端 MAC 地址(排错必看) |
EAP-Message | 79 | 承载 EAP 报文,超 253 字节则多属性串联 |
Message-Authenticator | 80 | HMAC-MD5 完整性校验,携带 EAP 时必须存在 |
Tunnel-Type / Tunnel-Medium-Type / Tunnel-Private-Group-ID | 64 / 65 / 81 | 三者组合下发动态 VLAN(分别取 VLAN(13) / IEEE-802(6) / VLAN 号或名) |
Filter-Id | 11 | 下发 ACL 名称 |
Session-Timeout / Termination-Action | 27 / 29 | 会话超时与超时后动作(重认证或断开) |
交互时序
一句话看懂这张图:竖着看是三根泳道,但中间那根(交换机)只是个传声筒——左边一段用 EAPOL 走二层,右边一段用 RADIUS 走三层,同一份 EAP 内容换了两趟车;直到最右边回来一个 Accept,端口才开门,客户端也才终于能发 DHCP。
| |
失败路径:服务器返回 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/AKA | — | SIM 卡 | 高 | 依赖运营商 | 运营商 Wi-Fi 无感知接入 |
安全要点:PEAP/TTLS 场景下,客户端必须校验服务器证书(勾选"验证服务器证书"并指定受信任 CA 与服务器名)。否则攻击者可架设同名 SSID 的假 RADIUS,诱骗客户端泄露 MSCHAPv2 挑战响应并离线破解。
4.2 动态 VLAN 下发
这是干什么的:让"你能进哪个网段"由后台按人决定,而不是由网口位置决定。
认证成功后由 RADIUS 三个属性组合指定 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 Bypass | RADIUS 服务器不可达 | 避免服务器宕机造成全网断网,临时放行到指定 VLAN。生产环境强烈建议配置 |
优先级配置示例(Cisco IBNS):dot1x 优先,超时降级 mab,再失败进 Guest VLAN。
4.4 端口主机模式(Host Mode)
这是干什么的:规定"一个网口下面能站几个人、要不要每人各刷一次卡"。接了小交换机、IP 电话串 PC、虚拟机等场景全靠它区分。
| 模式 | 允许接入 | 场景 |
|---|---|---|
single-host | 端口下仅 1 个 MAC | 最严格,一人一口 |
multi-host | 首个通过认证后,该端口所有设备都放行 | 便捷但有搭便车风险 |
multi-domain | 1 个数据域 + 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 Authorization 或 Disconnect-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。
知识框架
| |