802.1X 实战与排错 — 基于端口的网络访问控制
EAPOL/RADIUS 抓包、wpa_supplicant 与 FreeRADIUS 配置、认证失败与拿不到 IP 的排查 / 数据链路层 / EtherType 0x888E
Table of Contents
这篇你能学到
- 分段定位:学会 802.1X 排错的第一原则——前段(客户端↔交换机,抓 EAPOL)和后段(交换机↔服务器,抓 RADIUS)分开抓,先判断故障落在哪一段,再往下钻。
- 配得出来:Linux 端
wpa_supplicant(PEAP / EAP-TLS 两种写法)、交换机端 Cisco IOS dot1x 完整配置、服务端 FreeRADIUSclients.conf与动态 VLAN 下发,以及 Windows 的dot3svc。 - 修得回来:从"插网线拿不到 IP"“认证一直失败"“服务器不响应"“进错 VLAN"“打印机上不了网"“RADIUS 宕机全楼断网"六类现象出发,结论先行地定位根因。
1. 抓包观察
802.1X 排错必须两段分开抓:客户端到交换机抓 EAPOL,交换机到服务器抓 RADIUS。判断"故障在前段还是后段"是排错的第一个分叉点。
1.1 Wireshark 显示过滤式
这张表按"前段 / 后段"排列:上半部分(
eapol、eap)看客户端和交换机之间发生了什么,下半部分(radius)看交换机和服务器之间发生了什么。
| 过滤式 | 作用 |
|---|---|
eapol | 所有 EAPOL 帧(客户端侧起手式) |
eapol.type == 1 | 仅 EAPOL-Start(客户端是否发起了认证) |
eapol.type == 2 | 仅 EAPOL-Logoff |
eapol.type == 3 | EAPOL-Key(WPA 四次握手 / MACsec MKA) |
eap | 所有 EAP 报文 |
eap.code == 1 | EAP-Request(服务器在问什么) |
eap.code == 2 | EAP-Response(客户端答了什么) |
eap.code == 3 | EAP-Success(认证成功的决定性证据) |
eap.code == 4 | EAP-Failure(认证失败) |
eap.type == 1 | EAP-Identity,可直接看到用户名明文 |
eap.type == 3 | EAP-NAK,说明客户端拒绝了服务器建议的方法(方法不匹配) |
eap.type == 25 | PEAP;eap.type == 13 为 EAP-TLS |
eth.type == 0x888e | 从链路层维度确认 EAPOL 帧存在 |
radius | 所有 RADIUS 报文(服务器侧起手式) |
radius.code == 1 | Access-Request |
radius.code == 2 | Access-Accept |
radius.code == 3 | Access-Reject |
radius.code == 11 | Access-Challenge(多轮 EAP 交换中大量出现) |
radius.Calling_Station_Id contains "aa-bb-cc" | 按客户端 MAC 追踪某台设备的完整认证过程 |
radius.Tunnel_Private_Group_Id | 查看下发的动态 VLAN |
radius && udp.port == 1812 | 认证流量;1813 为计费流量 |
捕获过滤式(BPF):ether proto 0x888e(EAPOL)、udp port 1812 or udp port 1813(RADIUS)。这两条在抓包时就把无关流量丢掉,适合在交换机镜像口或服务器上长时间挂机采集。
1.2 一次成功认证应该看到的序列
下面这段是"健康基线”——把现场抓到的包和它逐行对照,第一个对不上的位置就是故障点。
客户端侧(EAPOL):
服务器侧(RADIUS):Access-Request → 多个 Access-Challenge/Access-Request 往返 → Access-Accept(含 EAP-Message: Success、MS-MPPE-*-Key、Tunnel-Private-Group-Id)→ Accounting-Request(Start)。
典型字段判读:
Calling-Station-Id= 客户端 MAC,Called-Station-Id= 交换机端口 MAC / 无线 BSSID+SSID;NAS-Port-Id(如GigabitEthernet0/5)直接定位物理端口;- 只有
Access-Request而没有任何响应 → 服务器不可达或共享密钥(shared secret)不匹配(密钥错误时 FreeRADIUS 通常静默丢弃并打日志); - 看到
EAP-NAK→ 客户端与服务器 EAP 方法不一致。
2. 常用命令 / 配置
2.1 Linux 客户端(wpa_supplicant,有线 802.1X)
这份配置能干什么:让 Linux 具备"刷卡"能力。核心是四件事——用哪种方法(eap=PEAP)、我是谁(identity)、凭据是什么(password)、以及怎么确认对面的 RADIUS 是真的(ca_cert + domain_suffix_match,这两行是防假冒服务器的关键,别省)。
/etc/wpa_supplicant/wired.conf:
| |
这组命令能干什么:把客户端跑起来并看它到底走到了哪一步。排错时优先用第一条的前台 -dd 模式——EAP 每一轮的收发都会打出来,比任何猜测都快。注意最后一条:必须认证成功之后再去要 IP,顺序反了什么也拿不到。
| |
这份配置能干什么:换成双向证书认证(EAP-TLS)。区别在于不再有密码,改为提供自己的证书和私钥——安全性最高,代价是要有 PKI 体系分发证书。
EAP-TLS 版本的 network 段:
2.2 服务端联调工具
这组工具能干什么:绕开交换机、绕开客户端,直接验证 RADIUS 服务器本身对不对。这是缩小故障范围最有效的一招——如果这里就跑不通,那前面怎么查交换机都是白费。四条命令由浅入深:先验账号密码,再模拟完整 EAP 会话,再前台看服务器的判决过程,最后翻日志。
| |
2.3 抓包
这组命令能干什么:把两段流量分别落盘。前两条对应"前段/后段"两个抓包位置,第三条 tshark 则是一行命令直接列出所有认证结果——谁通过了、谁被拒了、对应哪个 MAC 和用户名,适合批量排查。
| |
Wireshark 解密 RADIUS 中的 EAP 内容需在
编辑 → 首选项 → Protocols → RADIUS填入 shared secret。
2.4 交换机配置(Cisco IOS 风格)
这段配置能干什么:分三块看——全局块告诉交换机"认证找谁、密钥是什么、总开关打开”;端口块规定这个口怎么认、认不过怎么降级;排错块是出问题时现场敲的命令。特别注意 dot1x system-auth-control 这一行,漏配是最常见的低级错误:端口配得再全,全局没使能就什么都不会发生。
| |
2.5 FreeRADIUS 关键配置
这段配置能干什么:两件事。上半段 clients.conf 是给交换机上户口——服务器只理会已登记 IP 且共享密钥对得上的请求,否则直接无视(这正是"发了 Access-Request 却毫无回音"的头号原因)。下半段是账号本身,以及认证通过后要下发的动态 VLAN 属性。
2.6 Windows 客户端
这组命令能干什么:确认 Windows 这边"刷卡的手"到底伸出来没有。有线 802.1X 依赖 dot3svc 服务,而它默认是手动启动——“插网线毫无反应、连 EAPOL 帧都抓不到"的绝大多数情况就是它没跑起来。后面几条用来查看当前认证状态与配置文件。
事件日志路径:事件查看器 → 应用程序和服务日志 → Microsoft → Windows → Wired-AutoConfig(无线为 WLAN-AutoConfig)。
3. 常见故障与排错
3.1 现象:网线插上,拿不到 IP,链路灯却是亮的
先记住结论:这不是 DHCP 的问题,是端口根本没开门。 链路灯亮只代表物理层通了,而受控端口在未授权状态下会丢弃包括 DHCP 在内的全部业务流量。所以第一件事是看有没有 EAPOL 帧,而不是去查 DHCP 服务器。
这是 802.1X 环境最典型的现象——端口未授权,DHCP 报文被直接丢弃。
排查顺序:
tcpdump -i eth0 ether proto 0x888e:有没有 EAPOL 帧?- 完全没有 → 客户端未启用 802.1X(Windows 查
dot3svc服务;Linux 查wpa_supplicant是否运行); - 只有交换机发的
Request/Identity、客户端不回 → 客户端侧配置缺失; - 只有客户端
EAPOL-Start、交换机不回 → 交换机端口未使能dot1x pae authenticator或漏配全局dot1x system-auth-control。
- 完全没有 → 客户端未启用 802.1X(Windows 查
- 交换机执行
show authentication sessions interface Gi0/5 details,看Status是Unauthorized/Running/Authz Success。 - 若卡在
Running且反复超时 → 转向 RADIUS 侧排查。
3.2 现象:认证一直失败(EAP-Failure / Access-Reject)
先记住结论:能收到 Reject/Failure,说明链路和服务器都是通的——问题出在"凭据"或"方法"上,范围已经大大缩小。经验上,证书类问题占了一大半,其中又以有效期和时间同步最常见(表现为"某天突然集体失败”)。
| 原因 | 定位方法 |
|---|---|
| 用户名或密码错误 | freeradius -X 看拒绝原因;先用 radtest 单独验证账号 |
| EAP 方法不匹配(客户端 PEAP、服务器只允许 TLS 等) | 抓包看是否有 EAP-NAK(eap.type == 3) |
| 服务器证书问题(过期、CN/SAN 不匹配、CA 链不全) | 客户端日志出现 TLS: Certificate verification failed;用 openssl s_client 或 openssl x509 -noout -dates 核对 |
| 客户端未安装 CA 根证书 | 检查 ca_cert 路径 / Windows"受信任的根证书颁发机构” |
| 域账号被锁定、密码过期、不在允许组 | 查 AD 账号状态与 NPS 网络策略的组条件 |
| 客户端证书过期(EAP-TLS) | openssl x509 -in client.pem -noout -dates |
经验:证书类问题占 EAP-TLS/PEAP 故障的一大半,且往往是"某天集体失败”——先查证书有效期与时间同步(NTP 偏差过大会导致证书校验失败)。
3.3 现象:交换机发出 Access-Request,但服务器毫无响应
先记住结论:“完全没有回音"几乎等同于服务器压根不认这台交换机——共享密钥不匹配或 NAS 未在 clients.conf 登记时,FreeRADIUS 会静默丢弃而不是回一个 Reject。所以别去纠结账号密码,先核对密钥与登记 IP,再看网络可达性。
| 原因 | 排查 |
|---|---|
| 共享密钥不匹配 | FreeRADIUS 日志报 Received packet from ... with invalid Message-Authenticator 或直接静默丢弃;核对 clients.conf 与交换机 key |
交换机 IP 未在 clients.conf 登记 | 日志 Ignoring request from unknown client。注意登记的应是交换机源 IP(受 ip radius source-interface 影响) |
| 路由 / 防火墙拦截 UDP 1812 | 服务器侧 tcpdump udp port 1812 看有没有包到达;show aaa servers 看 NAS 侧统计的 timeout 计数 |
| 端口用错(旧设备用 1645/1646) | 核对 auth-port / acct-port |
3.4 现象:认证成功但被扔进了错误的 VLAN
先记住结论:认证和授权是两件事,认证过了不代表授权对了。 先用 show authentication sessions 看 Authorized By 这一列——是 Authentication Server 说明属性来自 RADIUS(那就查属性齐不齐),是 Guest Vlan 则说明其实压根没认证成功,只是掉进了兜底 VLAN。
| 原因 | 排查 |
|---|---|
| RADIUS 未下发 VLAN 属性 | 抓包看 Access-Accept 是否含 Tunnel-Private-Group-Id;三个 Tunnel 属性必须齐全 |
| 交换机未开启动态授权 | 缺 aaa authorization network default group radius 或 radius-server vsa send authentication |
| VLAN 在交换机上不存在 / 未在 trunk 放行 | show vlan brief、show interface trunk |
| 实际落进 Guest/Auth-Fail VLAN | show authentication sessions 看 Authorized By 是 Authentication Server 还是 Guest Vlan |
3.5 现象:打印机、摄像头、IP 电话无法上网
先记住结论:这类设备根本不会说 802.1X,别指望它们能认证成功——正确做法不是"修好它们的认证”,而是给它们配兜底通道 MAB,并接受"MAB 安全性弱"这个前提,用受限 VLAN 把风险圈起来。
它们没有 802.1X 客户端。启用 MAB 并在 RADIUS 中登记 MAC 白名单,同时把这类设备放进受限 VLAN(因 MAC 可伪造,MAB 安全性弱)。注意交换机需等 tx-period × (max-reauth-req+1) 才降级到 MAB,可适当调小 tx-period 缩短等待。
3.6 现象:RADIUS 服务器宕机导致全楼断网
先记住结论:这是设计缺陷,不是突发故障。 802.1X 默认"认证不了就不放行”,服务器一挂全楼新接入全部失败是必然结果。上线前就必须把降级通道和冗余设计好,事后再补代价极大。
根因:未配置 Critical VLAN / Inaccessible Authentication Bypass。
处置:配置 authentication event server dead action authorize vlan <数据VLAN>,并部署至少两台 RADIUS 服务器做冗余,同时监控 show aaa servers 的 dead 状态。这是 802.1X 上线前必须做的可用性设计。
3.7 现象:一个端口下接了集线器/虚拟机,只有第一台能上网
先记住结论:问题在端口的"主机模式",不在客户端。 一个口下要让每台设备各自认证、各自授权,只有 multi-auth 能做到;其他模式要么只认一台,要么认一台放全部。
原因:主机模式为 multi-host(首个认证通过后全放行,但 MAC 表可能受限)或 single-host。改为 authentication host-mode multi-auth,每个 MAC 独立认证独立授权。
4. 与其他协议对比
| 维度 | 802.1X | Portal / Web 认证 | MAB | DHCP Snooping + DAI | VPN 接入 |
|---|---|---|---|---|---|
| 生效层次 | 数据链路层(入网前) | 应用层(已有 IP 后) | 数据链路层 | 数据链路层(报文校验) | 网络层/应用层 |
| 校验对象 | 设备/用户身份 | 用户身份 | MAC 地址 | 报文与绑定表一致性 | 用户身份 + 隧道 |
| 认证前可否拿 IP | 否 | 是(受限网络) | 否 | 是 | 是(外网) |
| 安全强度 | 高(可用双向证书) | 中(易被绕过) | 低(MAC 可伪造) | 中(防欺骗但不认身份) | 高 |
| 客户端要求 | 需 supplicant | 仅需浏览器 | 无 | 无 | 需 VPN 客户端 |
| 可下发策略 | VLAN / ACL / QoS | ACL 为主 | VLAN / ACL | 无 | 路由 / ACL |
| 典型场景 | 企业有线、WPA-Enterprise | 访客、酒店、公共 Wi-Fi | 打印机等哑终端 | 防 ARP/DHCP 欺骗 | 远程办公 |
常见组合:802.1X(认身份)+ MAB(兜底哑终端)+ Guest VLAN(访客)+ DHCP Snooping/DAI(防二层欺骗)+ CoA(失陷终端隔离)。
5. 速查表 / 常见面试题
5.1 速查
| 记忆点 | 值 |
|---|---|
| EAPOL EtherType | 0x888E |
| EAPOL 目的 MAC | 01:80:C2:00:00:03(PAE 组播) |
| RADIUS 端口 | 1812 认证 / 1813 计费(旧 1645/1646),CoA 用 3799 |
| EAP Code | 1=Request,2=Response,3=Success,4=Failure |
| EAPOL Type | 0=EAP-Packet,1=Start,2=Logoff,3=Key |
| 关键 EAP Type | 1=Identity,3=NAK,13=TLS,25=PEAP,26=MSCHAPv2 |
| 动态 VLAN 属性 | Tunnel-Type=13 + Tunnel-Medium-Type=6 + Tunnel-Private-Group-Id |
| 抓包起手式 | eapol / eap / radius |
| 调试三板斧 | freeradius -X、eapol_test、show authentication sessions |
5.2 常见面试题
Q1:802.1X 的三个角色分别是什么?谁做出认证决策? Supplicant(客户端)、Authenticator(交换机/AP)、Authentication Server(RADIUS)。决策由认证服务器做出,认证者只负责中继报文与控制端口开关,不判断凭据正误。
Q2:受控端口与非受控端口的区别? 非受控端口永远开放但只通 EAPOL;受控端口在认证通过前处于未授权状态,丢弃全部业务流量(含 ARP、DHCP),通过后才转发。
Q3:EAP、EAPOL、RADIUS 三者是什么关系?
EAP 是认证内容框架;EAPOL 是把 EAP 送过二层链路的封装(客户端↔交换机);RADIUS 是把 EAP 送到服务器的后端承载(交换机↔服务器,用 EAP-Message 属性)。一句话:同一份 EAP 内容,前后换乘两趟不同的车。
Q4:为什么 802.1X 环境下客户端认证前拿不到 IP? DHCP 是 IP/UDP 流量,属于受控端口管辖范围,认证前一律被丢弃。只有 EAPOL 能通过。
Q5:PEAP 和 EAP-TLS 的区别?该怎么选? PEAP 只需服务器证书,隧道内用 MSCHAPv2 校验域账号,部署轻、与 AD 集成好,是企业主流;EAP-TLS 需要双向证书,安全性最高、抗钓鱼,但要建 PKI 并分发管理客户端证书。安全要求高或物联网设备场景选 EAP-TLS。
Q6:PEAP 部署时最容易被忽视的安全隐患是什么?
客户端未校验服务器证书。攻击者可搭建同名 SSID + 假 RADIUS,诱使客户端把 MSCHAPv2 挑战响应交出来离线破解。必须启用"验证服务器证书"并配置 domain_suffix_match / 服务器名称匹配。
Q7:打印机不支持 802.1X 怎么办? 用 MAB(MAC 认证旁路):交换机在 EAPOL 超时后把设备 MAC 当账号密码交给 RADIUS 查白名单。因 MAC 可伪造,须配合受限 VLAN 与 ACL。
Q8:RADIUS 服务器挂了会怎样?如何避免全网断网? 默认所有新接入都无法认证。必须配置 Critical VLAN(Inaccessible Authentication Bypass),在服务器不可达时把端口临时授权到指定 VLAN,同时部署多台 RADIUS 冗余。
Q9:管理员如何在用户已在线时强制其下线或改变权限?
用 RADIUS CoA(RFC 5176):服务器主动向 NAS 的 UDP 3799 发送 Disconnect-Message(踢下线)或 CoA-Request(改 VLAN/ACL)。这是 NAC 联动隔离失陷终端的基础。
Q10:WPA2-Enterprise 与 802.1X 的关系?
WPA2/WPA3-Enterprise 就是以 802.1X + EAP 做认证。EAP 成功后双方导出 MSK,服务器用 MS-MPPE-*-Key 把 PMK 送给 AP,AP 与客户端再做四次握手(用 EAPOL-Key 帧)派生 PTK/GTK 开始加密。相比 WPA2-PSK 的全网共享一个密码,Enterprise 实现了一人一密与集中审计。
Q11:EAP-NAK 报文出现说明什么? 客户端拒绝服务器建议的 EAP 方法,并在报文中提出自己支持的方法。看到它基本可断定:客户端与服务器的 EAP 方法配置不一致。