用户802.1X认证掉线问题

一、组网

在某项目测试中,H3C S5800交换机作为接入层交换机,直接连接用户PC。用户使用Windows XP自带802.1X客户端,Radius认证服务器为Windows Server 2008,认证方法为MD5-Chanllenge。

H3C S5800交换机使能802.1X认证并透传EAP,相关802.1X认证配置均为缺省,即:

1)端口接入控制方式为mac-based;

2)使能802.1X组播触发,时间间隔为30s;

3)使能802.1X握手,时间间隔为15s,最大重传次数为2;

4)关闭802.1X重认证。

二、问题描述

使用Windows XP SP3的用户可以通过802.1X认证,但上线后不到2分钟即掉线。

三、过程分析

Windows XP SP3自带802.1X客户端基本遵循IEEE 802.1X-2004,先来看看802.1X-2004客户端状态机,如下两个图所示:

           9.png

经过大量测试,可以推断Windows XP SP3的802.1X客户端在后台处理时有两个定时器,这里简称为T1和T2。

T1:含义同authWhile定时器,用于等待接收来自于交换机(准确的俗语为Authenticator)的任何EAP Request,但其初始值不同于协议建议,约为18s。该定时器老化后报Timeout,客户端由Authenticating状态转入Connecting,发送EAPoL-Start以发起新一轮认证,类似802.1X重认证。

T2:按EAP认证方法的一轮处理流程,首次收到一个EAP Request,回EAP Response后,启动该定时器以等待下一个不同的EAP Request,其初始值约为60s。该定时器老化后报Fail,这时按照协议规定客户端应由Authenticating状态转入Held状态,不过Windows XP SP3的802.1X客户端这时报“身份验证失败”而彻底停止响应。

详见下面测试抓包:

Case 1:交换机802.1X默认配置为30s组播触发,15s握手。

10.png

客户端抓包如上图所示:XP SP3 802.1X客户端认证通过后,5秒之内收到握手报文EAP-Request/Identity,这时客户端由Authenticated状态转入Restart状态,随即进入Authenticating状态。随后收到EAP-Request/Identity的时间间隔小于等于15s,即在T1定时器(18s)之内,但客户端因只是收到EAP-Request/Identity,没有后续EAP-Request如EAP-Request/MD5-Challenge而停在Authenticating状态直至T2定时器(60s)超时进入Held状态。客户端状态机变化为Authenticated->Restart->Authenticating->Held。对应网络连接的状态表现为“已连接上”->“尝试验证身份”->“身份验证失败”。而后交换机连续两次发送握手却没有收到回应,即认为该用户已离线,并发送EAP-Failure而结束802.1X认证,这时客户端正常通讯失败。

由此得出用户在线时间为T2+3*握手时间间隔=60+3*15=105s。

Case 2:交换机802.1X配置-30s组播触发,20s握手。

客户端抓包如下图所示:XP SP3 802.1X客户端认证通过后,5秒之内收到握手报文EAP-Request/Identity,这时客户端由Authenticated状态转入Restart状态,随即进入Authenticating状态。而后等待EAP-Request的时间间隔大于T1定时器(18s),导致T1超时而转入Connecting状态,这时客户端主动发送EAPoL-Start发起类似802.1X重认证,结果又通过认证,如此反复。即状态机变化为Authenticated->Restart->Authenticating ->Connecting->

Restart->Authenticating->Authenticated->Restart->Authenticating……。对应网络连接的状态表现为“已连接上”->“尝试验证身份”->“已连接上”……,客户端可以正常通讯。为更容易更明显观察,特配置交换机以取消握手,20s组播触发,见Case 3抓包。

11.png

Case 3:换机802.1X配置-20s组播触发,取消握手:

12.png

综上,Windows XP SP3自带802.1X客户端基本遵循IEEE 802.1X-2004,但因802.1X-2004没有专门区分EAP-Request/Identity的处理且又只定义一个authWhile定时器。于是Windows XP SP3自带802.1X客户端实现中定义两个定时器,见上文中T1和T2描述。如果交换机发送802.1X握手报文的时间间隔小于T1,则必然导致Windows XP SP3自带802.1X客户端在Authenticating状态因T2超时而报“身份验证失败”而停止响应包括802.1X握手的一切802.1X报文,最终交换机发送EAP-Failure而结束802.1X认证,客户端正常通讯失败。

四、解决方法

理解上述Windows XP SP3的802.1X客户端工作机制后,问题则迎刃而解。

H3C S5800交换机从版本CMW5.20-R1108起,802.1X模块增加对于未知MAC的单播触发,命令为以太网端口视图下配置:dot1x unicast-trigger。该单播触发命令和组播触发各自独立,同一端口下可以共存。

于是解决方案如下:

(1)可以在交换机上配置802.1X单播触发并取消组播触发,取消握手或握手时间间隔在18s以上;

(2)如果交换机不是S5800,且最新版本尚不支持802.1X单播触发,则对于Windows XP SP3类用户,因其可以主动发送EAPoL-Start报文,可以在交换机相应端口下取消组播触发,取消握手或握手时间间隔在18s以上;

(3)可以考虑在交换机上配置端口接入控制方式为portbased,这样该端口用户通过认证后,不再发送组播触发报文,同时配置取消握手或握手时间间隔在18s以上。


2017年03月