第224篇:802.1X认证的EAP协议栈

关键词

802.1X、EAP协议栈、EAPOL、RADIUS、Supplicant、Authenticator、认证服务器、EAP-TLS、PEAP、EAP-MD5、EAP-GTC


一、802.1X 认证框架

1.1 认证架构

802.1X 是 IEEE 的端口接入控制标准,用于控制设备接入有线/无线网络:

802.1X 三元组架构:

┌──────────────┐ EAPOL ┌──────────────┐ RADIUS ┌──────────────┐
Supplicant (客户端) PC/手机 ◄────────────► LAN Authenticator (交换机/AP) NAS设备 ◄──────────► UDP 1812/1813 Auth Server (RADIUS) AD/LDAP
角色 功能 示例设备
Supplicant 申请接入的客户端 PC、手机、打印机
Authenticator 控制端口、转发认证请求 交换机、AP、防火墙
Authentication Server 验证身份、返回授权 RADIUS 服务器

1.2 端口状态

802.1X 定义了端口的两种逻辑状态:

未认证前:
  ┌──────────────┐
  │  Supplicant   │
  │  IP: 未分配   │
  └──────┬───────┘
         │ EAPOL 认证流量
         │ (802.1Q VLAN / 802.1p)
  ┌──────┴───────┐
  │  交换机端口   │
  │  受控端口:关闭 ← 只允许 EAPOL 通过
  │  非受控端口:开放 ← EAPOL 可通行
  └──────────────┘

认证通过后:
  ┌──────────────┐
  │  Supplicant   │
  │  IP: DHCP     │
  └──────┬───────┘
         │ 所有数据流量
  ┌──────┴───────┐
  │  交换机端口   │
  │  受控端口:开放 ← 允许所有流量
  │  非受控端口:开放
  └──────────────┘

二、EAP 协议栈

2.1 EAP 协议层次

EAP(Extensible Authentication Protocol)是一个认证框架,支持多种认证方法:

EAP 协议栈架构:

上层:EAP 方法层 EAP-TLS PEAP EAP-TTLS EAP-MD5
中间层:EAP 协议层 Request/Response 交互, 状态机管理 类型(Identity/MD5-Challenge/TLS 等)
下层:EAP 承载层 EAPOL (LAN) PPPoE RADIUS EAP-Message IEEE 802.1X 802.3 RFC 3579

2.2 EAPOL(EAP over LAN)

EAPOL 是 IEEE 802.1X 定义的 EAP 在局域网的承载协议:

EAPOL 帧格式:

MAC 头 类型(1B) 长度(2B) Payload

EAPOL 类型: 0x00: EAP-Packet # EAP 认证数据包 0x01: EAPOL-Start # Supplicant 发起认证 0x02: EAPOL-Logoff # Supplicant 请求下线 0x03: EAPOL-Key # 密钥交换(WPA/WPA2) 0x04: EAPOL-Encapsulated-ASF-Alert

2.3 EAP 包格式

Code 1B ID 1B Length 2B Data...

Code(请求/响应类型): 1 = Request 2 = Response 3 = Success 4 = Failure

Type(在 Request/Response 包中使用): 1 = Identity # 身份请求 2 = Notification # 通知消息 3 = Nak (Response Only) # 不支持建议方法 4 = MD5-Challenge # MD5 挑战 13 = TLS # EAP-TLS 25 = PEAP # PEAP(Protected EAP) 26 = MSCHAPv2 # MSCHAPv2 29 = FAST # EAP-FAST


三、802.1X 认证交互过程

3.1 完整认证流程

以 PEAP-MSCHAPv2 为例:

Supplicant             Authenticator           RADIUS Server
    │                       │                       │
    │—— EAPOL-Start ──────►│                       │
    │                       │—— RADIUS Access-Req  ►│
    │◄── EAP-Request/Id ───│◄──────────────────────│
    │                       │  (EAP-Message)        │
    │—— EAP-Response/Id ──►│—— RADIUS Access-Req  ►│
    │    (用户名)           │                       │
    │                       │◄── RADIUS Access-Ch —│
    │◄── EAP-Req/PEAP ─────│  (EAP-Msg: PEAP Start)│
    │   (Server Hello)     │                       │
    │                       │                       │
    │    TLS 隧道建立过程    │                       │
    │    (证书验证)          │                       │
    │                       │                       │
    │◄── EAP-Req/PEAP ─────│◄── RADIUS Access-Ch —│
    │   (TLS Session Key)  │                       │
    │                       │                       │
    │   通过 TLS 隧道        │                       │
    │   传输 MSCHAPv2 挑战   │                       │
    │                       │                       │
    │◄── EAP-Success ──────│◄── RADIUS Accept ────│
    │                       │                       │
    │   端口状态:开放       │                       │
    │   DHCP → 正常通信     │                       │

3.2 不同认证方式的报文对比

EAP-MD5(简单但安全隐患):
  Request: MD5-Challenge (16字节随机数)
  Response: MD5(Challenge + Password)
  ★ 密码在网络上明文哈希传输,无隧道保护

EAP-TLS(双向证书,安全高):
  需客户端证书和服务器证书
  建立 TLS 隧道进行认证
  部署复杂(证书管理成本高)

PEAP(保护性 EAP,最常用):
  只需要服务器证书
  TLS 隧道保护内部认证(MSCHAPv2/GTC)
  兼容性好,Windows 原生支持

EAP-TTLS(类似 PEAP):
  只需要服务器证书
  TLS 隧道保护内部认证
  支持更多内部认证协议

四、RADIUS 与 EAP 的配合

4.1 RADIUS 协议中的 EAP 封装

RADIUS 通过 EAP-Message 属性封装 EAP 包:

RADIUS 包格式(封装 EAP):

Code: Access-Request (1)
ID: 0x01
Length: ...
Attributes:
  User-Name = "zhangsan"
  NAS-IP-Address = 192.168.1.1
  NAS-Port = 0x00000001
  EAP-Message = [EAP Response/Identity...]
  Message-Authenticator = [HMAC-MD5...]

RADIUS 交互流程:
  Supplicant ←EAP→ Authenticator ←RADIUS→ RADIUS Server
                      │                      │
                 EAP 解封装                EAP 封装
                 RADIUS 封装              解封装

4.2 RADIUS 属性说明

关键 RADIUS 属性:

Attribute 1: User-Name
  用户的身份标识

Attribute 79: EAP-Message
  封装 EAP 包(单个 RADIUS 包可包含多个)

Attribute 80: Message-Authenticator
  消息完整性校验(EAP 认证时必须)

Attribute 24: State
  状态属性(用于多轮认证交互)

Attribute 26: Vendor-Specific
  厂商扩展属性(华为、Cisco 等定制功能)

4.3 华为交换机 802.1X 配置

# 华为交换机 802.1X 配置示例

# 全局使能 802.1X
dot1x enable

# RADIUS 服务器配置
radius-server template huawei_radius
 radius-server authentication 10.0.10.10 1812
 radius-server accounting 10.0.10.10 1813
 radius-server shared-key cipher Huawei@123
!

# AAA 认证方案
aaa
 authentication-scheme dot1x_auth
  authentication-mode radius
 accounting-scheme dot1x_acct
  accounting-mode radius
!
 domain default
  authentication-scheme dot1x_auth
  accounting-scheme dot1x_acct
  radius-server huawei_radius
!

# 接口使能 802.1X
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 100
 dot1x enable                                        # 使能 802.1X
 dot1x authentication-method eap                     # EAP 中继方式
 dot1x reauthenticate                                 # 定期重认证
 dot1x max-user 1                                    # 端口最多 1 个用户
 dot1x guest-vlan 200                                # 访客 VLAN(未认证时)

五、802.1X 的部署模式

5.1 EAP 中继 vs EAP 终结

EAP 中继模式(推荐):
  Supplicant ←EAP→ Authenticator ←RADIUS→ RADIUS Server
                       │
                ┌──────┴──────┐
                │ 透传 EAP 包  │
                │ 不解密/处理  │
                │ 仅重新封装   │
                └─────────────┘
  优点:支持所有 EAP 方法
  缺点:设备负担略高

EAP 终结模式(旧设备):
  Supplicant ←EAP→ Authenticator ──RADIUS(PAP/CHAP)→ RADIUS Server
                       │
                ┌──────┴──────┐
                │ 终结 EAP 隧道│
                │ 提取用户名密码│
                │ 用 PAP/CHAP  │
                └─────────────┘
  优点:设备兼容性
  缺点:只支持简单认证方法

5.2 有线 vs 无线 802.1X

有线 802.1X:
  端口粒度控制
  物理连接决定认证触发
  MAC 地址绑定可选

无线 802.1X:
  SSID + BSSID 粒度控制
  EAPOL over 802.11
  WPA/WPA2 密钥派生(4次握手)
  漫游时快速重认证(PMK Caching)

六、常见问题与排查

6.1 故障排查命令

# 华为交换机排查命令

# 查看 802.1X 全局状态
display dot1x
  Global 802.1X status: Enabled
  EAP authentication method: EAP relay

# 查看接口 802.1X 状态
display dot1x interface GigabitEthernet0/0/1
  Port status: Authorized              # 已认证
  Auth user count: 1
  Auth user MAC: 00e0-fc12-3456
  Update time: 2024-03-15 10:30:00

# 查看认证失败记录
display aaa abnormal-offline-record
  Username: zhangsan
  MAC: 00e0-fc12-3456
  Reason: Authentication timeout       # 认证超时
  Time: 2024-03-15 09:15:23

6.2 常见问题

问题 1:认证超时
  原因:RADIUS 服务器不可达
  排查:ping RADIUS 服务器
       display radius-server template

问题 2:认证失败(Access-Reject)
  原因:用户名/密码错误
       证书过期
       不在允许的用户组
  排查:display aaa authentication-failed-record

问题 3:EAP 协商失败
  原因:Supplicant 和 Server 无共同的 EAP 方法
  排查:检查 Supplicant 配置的 EAP 方法
       检查 RADIUS 服务器支持的 EAP 方法

问题 4:DHCP 在认证成功后获取不到 IP
  原因:VLAN 切换问题(guest Vlan 到业务 Vlan)
  排查:check dot1x guest-vlan / authorized-vlan 配置

七、总结

知识点 核心要点
802.1X 三元组 Supplicant / Authenticator / Auth Server
端口状态 受控端口(控制数据)、非受控端口(EAPOL)
EAP 协议栈 方法层→协议层→承载层(EAPOL)
EAP 方法 EAP-TLS(双向证书)、PEAP(单证书+隧道)、EAP-MD5
RADIUS 封装 EAP-Message 属性承载 EAP 包
中继 vs 终结 中继透传 EAP,终结在交换机处理
常见问题 超时、拒绝、方法不匹配、VLAN 切换

八、思考

  1. 802.1X 架构中的三个角色分别是什么?各自负责什么功能?
  2. EAPOL 协议中 EAP-Packet、EAPOL-Start、EAPOL-Logoff 分别在什么场景使用?
  3. EAP-TLS 和 PEAP 在证书需求上有什么不同?哪种部署成本更低?
  4. 什么是 EAP 中继模式?为什么推荐使用 EAP 中继而不是 EAP 终结?
  5. 当用户认证成功后无法获取 IP 地址,可能的原因是什么?

下篇预告:第225篇《访客认证与Portal认证流程》——详解 Portal 认证原理、重定向机制和常见的访客认证方案。