端口灯亮着,网线换了两根,系统托盘一直转「正在获取 IP 地址」,最后给你一个 169.254.x.x。
这时候多数人的第一反应是 DHCP 坏了。但如果你在一个有准入控制的网络里,DHCP 服务器根本没机会看到你的请求——交换机在你完成身份认证之前,压根不放行你的报文。挡你的是 802.1X。
这篇文章把 802.1X 讲透:它到底卡在哪一层、认证的报文怎么走、EAP 方法怎么选、两端怎么配、以及我踩过的九个坑。
一、802.1X 解决的是「谁可以接进来」
先说清楚它不是什么:802.1X 不加密流量。你认证通过之后,数据该明文还是明文,抓包照样看得见。它管的只有一件事——这个物理端口允不允许转发业务报文。
它拦的是这几种情况:
- 外人把笔记本插进办公室墙上的网口,直接拿到内网地址
- 离职员工的设备还在自动连内网
- 一台中毒的机器自己接了个小路由器,把内网又扩出去一层
- 合规审计要求「谁能接入、什么时候接入、接了什么设备」有日志
所以它常常和 VLAN、DHCP Snooping、IP Source Guard 一起出现,是内网准入的基础设施,不是可选项。
二、三个角色,缺一不可
| 角色 | 是谁 | 干什么 |
|---|---|---|
| Supplicant(申请者) | 你的电脑 / 手机,Windows 的「Wired AutoConfig」服务、Linux 的 wpa_supplicant |
发起认证,提供身份和凭据 |
| Authenticator(认证者) | 接入交换机、无线 AP、AC | 不判断你对不对,只把 EAP 报文原样转给 RADIUS,并根据结果开门/关门 |
| Authentication Server(认证服务器) | RADIUS:FreeRADIUS / Windows NPS / Cisco ISE / 华为 Agile Controller | 真正校验凭据,返回 Accept 或 Reject,顺带下发 VLAN、ACL |
关键点:交换机里没有账号密码。它只是个搬运工,把客户端和 RADIUS 之间的 EAP 报文封装进 RADIUS 报文转发出去(RFC 3579)。所有账号、证书、策略都在 RADIUS 上——这也是为什么改了密码之后要等一会儿,某些交换机的重认证周期是 3600 秒。
三、一个端口被劈成两半
这是理解 802.1X 的核心。认证之前,物理端口在逻辑上分成两个:
| 逻辑端口 | 放行什么 | 认证前 | 认证后 |
|---|---|---|---|
| 非受控端口(uncontrolled) | 只有 EAPoL 报文(以太类型 0x888E,目的 MAC 01:80:C2:00:00:03) |
通 | 通 |
| 受控端口(controlled) | 其它一切业务流量,包括 DHCP、ARP | 堵死 | 通 |
所以「一直正在获取 IP 地址」是标准现象,不是故障:你的 DHCP Discover 走的是受控端口,还没开门,包直接被丢了。交换机连日志都不会给你留一条——它丢的是二层帧,不产生任何 ICMP 或 syslog。
为什么这个设计是对的:先认证再给地址,能避免「未授权设备先拿到一个内网 IP」这一段暴露窗口。代价就是哑终端(打印机、摄像头、老式工控机)没有 supplicant,永远过不去,必须另想办法(见第七节的 MAB)。
四、认证报文怎么走
一次典型的有线 802.1X 认证,报文顺序是这样的:
1. 网线插上,链路 up
2. 交换机主动发 EAP-Request/Identity(或等客户端发 EAPOL-Start)
3. 客户端回 EAP-Response/Identity ← 用户名/匿名标识
4. 交换机封装成 RADIUS Access-Request(EAP-Message 属性 79,必须带 Message-Authenticator 属性 80)
5. RADIUS 与客户端通过 EAP 来回几轮(证书校验 / 用户名密码挑战)
6. RADIUS 回 Access-Accept(可能带 VLAN、ACL 属性)
7. 交换机回 EAP-Success,受控端口打开
8. 客户端发 DHCP Discover,现在才能拿到地址
三个细节值得记住:
- EAPoL 是二层链路本地报文,不过三层,不占带宽。它只在交换机与终端之间跑,RADIUS 那边看到的是封装后的 EAP-Message 属性。
- Message-Authenticator(属性 80)是强制的。这是 RFC 3579 的要求,2024 年 Blast-RADIUS 漏洞之后所有实现都收紧了。缺这个属性的报文会被 RADIUS 直接静默丢弃——交换机那边表现为「认证超时」,而不是「认证失败」,这两个现象要分开看。
- Access-Reject 和「没响应」完全不同:前者说明服务器收到了、只是密码/证书不对;后者说明报文根本没到、或者被丢了。排错第一步永远是分清这两种。
五、EAP 方法怎么选
| 方法 | 凭据 | 安全性 | 适合 |
|---|---|---|---|
| EAP-MD5 | 用户名 + 密码(挑战哈希) | 差,可离线爆破,不提供服务器认证 | 只做实验,生产别用 |
| PEAP-MSCHAPv2 | 用户名 + 密码 | 中,靠 TLS 隧道保护密码;必须校验证书 | Windows 域环境、最省事 |
| EAP-TTLS | 用户名 + 密码(或证书) | 中上,和 PEAP 类似,隧道里协议可换 | 需要兼容多种客户端 |
| EAP-TLS | 双向证书,无密码 | 最好 | 高安全场景、设备认证 |
| MAB | 设备 MAC 地址 | 弱(MAC 可伪造),但能管住哑终端 | 打印机、摄像头、IP 电话 |
我的建议很简单:办公电脑用 PEAP-MSCHAPv2,服务器和网络设备用 EAP-TLS,哑终端用 MAB 单独丢进隔离 VLAN。
无论选哪个,有一条是硬要求:客户端必须校验 RADIUS 服务器证书。很多部署为了「省事」让客户端勾上「不验证服务器证书」,等于把 PEAP 的安全性退回明文——任何人都能架个假 AP 假的 RADIUS,把你密码骗走。正确做法是内网自建一个小 CA,把根证书推到所有终端。
六、四处配置
华为交换机(VRP)
dot1x-access-profile name d1
dot1x authentication-method eap
#
authentication-profile name p1
dot1x-access-profile d1
#
radius-server template rd1
radius-server shared-key cipher 你的共享密钥
radius-server authentication 10.0.0.10 1812
radius-server accounting 10.0.0.10 1813
#
aaa
authentication-scheme sch1
authentication-mode radius
#
interface GigabitEthernet0/0/1
authentication-profile p1
quit
display dot1x
display access-user interface GigabitEthernet0/0/1
华为新版本把 802.1X 收进了 authentication-profile(认证模板),老版本是直接在接口下 dot1x enable。看到命令不认,先 display version 看软件版本,别硬套教程。
Cisco 交换机(IOS)
aaa new-model
radius server ISE
address ipv4 10.0.0.10 auth-port 1812 acct-port 1813
key 你的共享密钥
!
aaa authentication dot1x default group radius
aaa authorization network default group radius
dot1x system-auth-control
!
interface GigabitEthernet1/0/1
switchport mode access
authentication port-control auto
dot1x pae authenticator
authentication host-mode multi-auth
mab
!
show authentication sessions
show authentication sessions interface Gi1/0/1 details
port-control auto 是必须的(默认是 force-authorized,等于不开认证直接把门打开),这是新手最常见的错误:配置写了一堆,其实端口一直是放行的。
host-mode 决定一个口能带几台设备,选错会互相踢:
| host-mode | 行为 | 场景 |
|---|---|---|
single-host |
只允许第一台认证设备,之后接交换机/集线器直接失效 | 最严格,纯办公口 |
multi-host |
一台认证通过,后面挂的设备全部放行 | 口上接了个小交换机 |
multi-domain |
数据域 + 语音域各一台(电脑 + IP 电话) | 桌面 IP 电话 |
multi-auth |
每台设备各自认证,一个口多个会话 | 口上挂级联设备、会议室 |
Windows 客户端
「服务」里确认 Wired AutoConfig(dot3svc) 是自动启动,然后在网卡属性的「身份验证」页:
- 勾「启用 IEEE 802.1X 身份验证」,方法选 Microsoft: 受保护的 EAP (PEAP)
- 「设置」里选「验证服务器证书」,勾上内网 CA,认证方法选 MSCHAPv2
- 「其他设置」里可以选「用户或计算机身份验证」,域机器建议「计算机身份验证」——开机就能认证,不用等人登录
域环境里这些全部用组策略推,别一台台点。开机认证(computer authentication)能省掉「开机卡在登录界面、网络未连接、漫游配置文件加载失败」这一串连锁问题。
Linux 客户端
# /etc/wpa_supplicant/wired.conf
network={
key_mgmt=IEEE8021X
eap=PEAP
identity="user@corp.local"
password="你的密码"
phase2="auth=MSCHAPV2"
ca_cert="/etc/ssl/certs/corp-ca.pem" # 千万别删这一行
}
wpa_supplicant -i eth0 -c /etc/wpa_supplicant/wired.conf -D wired -B
# 调试时加 -dd,能看到每一条 EAPoL 报文
调试阶段 -dd 的输出非常值钱:能看到「EAPOL-Start 发出去了吗」「对端回的是 Request/Identity 还是直接超时」,直接把问题定位在终端侧还是交换机侧。
七、三个进阶玩法(部署时八成会用到)
1. 动态 VLAN 下发
RADIUS 在 Access-Accept 里带三个属性,交换机就把这个端口扔进对应 VLAN:
| 属性 | 值 |
|---|---|
| Tunnel-Type | 13(VLAN) |
| Tunnel-Medium-Type | 6(IEEE-802) |
| Tunnel-Private-Group-ID | VLAN ID,如 120 |
好处是按人划分网络,不用按墙上的网口布线。坑在于:那个 VLAN 必须已经在交换机上创建好,否则认证成功、端口也开了,但流量进不去,现象是「认证通过了还是不通」。
2. Guest VLAN 与 Auth-Fail VLAN
没认证的设备(或者认证失败的)丢进一个只能上网的隔离 VLAN,只放行 DNS、DHCP 和 80/443,其余全丢。访客接网线能上网、又碰不到内网,这是最常见的落地方式。
注意 Guest VLAN 里 DHCP 必须可达,否则访客连地址都拿不到,等于没做。
3. MAB:给哑终端留个门
打印机、摄像头、会议平板没有 supplicant。做法是让交换机拿设备的 MAC 地址当用户名去问 RADIUS(密码一般是共享密钥或固定串)。认证顺序是 802.1X 超时 → MAB → Guest VLAN,所以每个哑终端接上会多等 30 秒左右才通,这是正常的,别当成故障。
八、九个真实的坑
| 症状 | 原因 | 处理 |
|---|---|---|
| 一直「正在获取 IP」,最终 169.254 | 受控端口没开,DHCP 包被丢 | 先确认认证是否成功,别去查 DHCP |
| 交换机显示认证超时,RADIUS 日志啥也没有 | 共享密钥不匹配 / 缺 Message-Authenticator | 两端密钥逐字符核对;RADIUS 开 debug 看是否「收到即丢」 |
| RADIUS 显示 Access-Reject | 密码错、账号过期、域名格式不对 | 分清 Reject 与超时;注意 DOMAIN\user 与 user@domain 的区别 |
| 客户端弹「无法验证服务器证书」 | PEAP 服务器证书是自签的,或名字对不上 | 内网 CA 签发,证书 CN/SAN 要含 RADIUS 的 FQDN |
| 认证成功但 ping 不通网关 | 动态 VLAN 没创建 / ACL 下发失败 / 端口 PVID 没跟着变 | 看交换机认证会话里的授权 VLAN 是否等于预期 |
| 配完完全没生效 | Cisco 的 port-control 还是默认 force-authorized |
改成 auto;华为确认接口挂上了认证模板 |
| 电脑休眠唤醒后掉线几十秒 | 重认证周期到点,或唤醒后 supplicant 没起来 | 调 reauth-period;确认唤醒策略不阻断认证 |
| 装了虚拟机/桥接网卡后认证失败 | 桥接驱动劫持了二层,EAPoL 发不出去 | 关掉网卡的桥接/虚拟交换机绑定再试 |
| 无线好用、有线不行 | 无线是 WPA-Enterprise(802.1X + 加密),有线只是准入 | 别拿无线的排错经验套有线,两套配置项完全不同 |
还有一条不算坑但很费时间:802.1X 认证期间交换机不产生任何 syslog。你以为「没日志就是没配」,其实日志要开 dot1x 调试级别才有。排查第一步永远是直接看会话状态,不是翻日志。
九、排错顺序
- 端口是 auto 吗?不是
port-control auto的话,前面全白搭 - 看认证会话。Cisco
show authentication sessions interface Gi1/0/1 details、华为display access-user,状态是 Authenticating / Authorized / Failed 哪一个 - EAPoL 有没有交互?终端
wpa_supplicant -dd,能看到 Start、Identity 就说明二层是通的,问题在 RADIUS - RADIUS 收到包了吗?
radiusd -X前台跑,看 Access-Request 有没有进来。没有 = 网络/密钥问题,有 = 凭据/策略问题 - 授权阶段。Accept 之后看下发的 VLAN、ACL 是否真的生效,这一步最容易「认证成功但不能上网」
顺带说一句:别用生产交换机做第一次调试。802.1X 配错会把整个接入层锁死,人还在机房里,远程进不来。先在实验室用一台小交换机 + FreeRADIUS 跑通,再上生产。RADIUS 侧还有个神器 eapol_test(FreeRADIUS 自带),不用真终端就能模拟一次完整认证,比自己拿笔记本试快十倍。
十、一句话
802.1X 不是加密,是端口级门禁:认证前只放行 EAPoL,业务报文一律丢——所以「插上网线拿不到 IP」是设计,不是故障。它把判断权交给了 RADIUS,交换机只负责搬报文和开门;真正难的不是配命令,而是把「超时」和「拒绝」、「认证过了」和「授权生效了」这两组现象分开看。
相关的几篇可以接着看:VLAN 实战(动态 VLAN 下发的基础)、交换机与路由器的区别(为什么准入只能做在二层边缘)、DHCP 的 DORA 四步(认证通过之后才轮到它)、ARP 与 MAC 地址(MAB 为什么能被伪造)、交换机端口镜像与抓包(抓 EAPoL 报文看认证卡在哪一步)。









暂无评论内容