802.1X 准入认证:插上网线不等于能上网

端口灯亮着,网线换了两根,系统托盘一直转「正在获取 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) 是自动启动,然后在网卡属性的「身份验证」页:

  1. 勾「启用 IEEE 802.1X 身份验证」,方法选 Microsoft: 受保护的 EAP (PEAP)
  2. 「设置」里选「验证服务器证书」,勾上内网 CA,认证方法选 MSCHAPv2
  3. 「其他设置」里可以选「用户或计算机身份验证」,域机器建议「计算机身份验证」——开机就能认证,不用等人登录

域环境里这些全部用组策略推,别一台台点。开机认证(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 调试级别才有。排查第一步永远是直接看会话状态,不是翻日志。

九、排错顺序

  1. 端口是 auto 吗?不是 port-control auto 的话,前面全白搭
  2. 看认证会话。Cisco show authentication sessions interface Gi1/0/1 details、华为 display access-user,状态是 Authenticating / Authorized / Failed 哪一个
  3. EAPoL 有没有交互?终端 wpa_supplicant -dd,能看到 Start、Identity 就说明二层是通的,问题在 RADIUS
  4. RADIUS 收到包了吗?radiusd -X 前台跑,看 Access-Request 有没有进来。没有 = 网络/密钥问题,有 = 凭据/策略问题
  5. 授权阶段。Accept 之后看下发的 VLAN、ACL 是否真的生效,这一步最容易「认证成功但不能上网」

顺带说一句:别用生产交换机做第一次调试。802.1X 配错会把整个接入层锁死,人还在机房里,远程进不来。先在实验室用一台小交换机 + FreeRADIUS 跑通,再上生产。RADIUS 侧还有个神器 eapol_test(FreeRADIUS 自带),不用真终端就能模拟一次完整认证,比自己拿笔记本试快十倍。

十、一句话

802.1X 不是加密,是端口级门禁:认证前只放行 EAPoL,业务报文一律丢——所以「插上网线拿不到 IP」是设计,不是故障。它把判断权交给了 RADIUS,交换机只负责搬报文和开门;真正难的不是配命令,而是把「超时」和「拒绝」、「认证过了」和「授权生效了」这两组现象分开看。

相关的几篇可以接着看:VLAN 实战(动态 VLAN 下发的基础)、交换机与路由器的区别(为什么准入只能做在二层边缘)、DHCP 的 DORA 四步(认证通过之后才轮到它)、ARP 与 MAC 地址(MAB 为什么能被伪造)、交换机端口镜像与抓包(抓 EAPoL 报文看认证卡在哪一步)。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容