如何逐步测试 RADIUS 认证
Published

您正拿着一台笔记本电脑在现场,旁边有一个接入点和一台“应该已经准备就绪”的 RADIUS 服务器。有人进行了 Ping 操作。UDP 1812 端口已开放。仪表板探测甚至显示为绿色。但这些都无法告诉您员工设备是否接入了员工 VLAN,或者已被吊销的证书是否仍能建立会话。
如何测试 RADIUS 认证是一条证明链,而不是单次登录。请将每一个 Access-Accept 都视为一个假设。您仍需检查认证方法、属性、源地址,以及当服务器、目录或证书出现错误时网络所做出的响应。
先从一个受控请求开始。然后扩大测试用例的范围,直到假阳性无处遁形。
目录
- 使用 radtest 发送您的首次测试
- 为何 Access-Accept 并不代表网络访问成功
- 每个 RADIUS 部署所需的测试用例
- 使用 radclient 测量负载与延迟
- 故障路径、故障转移与安全检查
- 读取日志以确认每项测试结果
- 确定 RADIUS 何时准备好进行全面推广
使用 radtest 发送您的首次测试
您可以在五分钟内运行的命令是 radtest testing password 127.0.0.1 0 testing123。FreeRADIUS radtest 手册 将其定义为包含五个输入参数的可控 Access-Request:用户名、密码、服务器地址、NAS-Port 和共享密钥。PAP 为默认协议。该实用程序还可以发送 CHAP、MS-CHAP 或 EAP-MD5。

在修改其他任何配置前先运行基线测试
- 定义测试账户。在服务器可以检索到的位置放置一个已知的用户名和密码。您需要一个无需在目录中查找即可直接输入的凭据。
- 列出客户端。您发送请求的主机或 NAS 必须存在于
clients.conf中,并配有您将输入的密钥。未知来源与密码错误是不同的故障。 - 在调试模式下启动服务器。每个数据包和拒绝原因都应打印在终端上。无提示的失败会浪费测试过程。
- 发送五项输入。用户名、密码、服务器、NAS-Port、密钥。对于首次验证,NAS-Port 为
0就足够了。 - 先读取代码,再读取原因。 Access-Accept 意味着服务器批准了这些凭据。Access-Reject 意味着服务器拒绝了这些凭据。调试输出可以区分不正确的共享密钥、未知的客户端、无效的凭据和策略失败。
- 从 NAS 重复此操作。从接入点或交换机地址发起相同的请求,而不仅仅是从本地主机发起。客户端通常通过源地址和共享密钥共同进行授权。
可达性并不代表最终结果。数据包必须到达,且授权决策必须符合您的预期。在收到接受响应时,请检查返回的属性,如 VLAN、服务类型或 Frame 地址。即使状态代码看起来没有异常,指定了错误 VLAN 的接受响应也算作测试未通过。
在完成基本的接受验证后,同一个手册列出了适用于示例账户的八种可行方法:PAP、CHAP、MS-CHAPv1、MS-CHAPv2、PEAP、EAP-TTLS、EAP-GTC 和 EAP-MD5。今天无需逐一尝试这八种方法。
实用规则: 保存来自真实 NAS 地址的 Access-Accept 和来自错误密码的 Access-Reject。这两条记录是后续判断所有案例的基线。
为什么 Access-Accept 不等于网络访问通过
显示绿色状态的基础设施测试属于假阳性,我是不会签字通过的。这类测试往往只能证明某些请求收到了某种回复。
Meraki RADIUS 故障排查指南 指出,其仪表板测试使用的是结合 MS-CHAPv2 的 PEAP。对于 EAP-TLS,该测试会失败或无法提供有意义的验证,因为接入点没有客户端证书。基于证书的无线网络必须使用包含正确证书和信任链的真实请求者 (supplicant) 进行测试。

四个层级,四个不同的问题
传输层用于询问是否有任何响应。超时并不等于拒绝。
身份验证旨在确认密码或证书对该身份是否有效。
授权旨在确认回复中是否包含了您预期的 VLAN、角色或 ACL。
可达性 询问终端是否获得了预期的地址、DNS 策略以及对该分段应允许的资源的访问权限。
某一个层级通过验证并不代表其他三个层级也没有问题。结合 FreeRADIUS EAP 行为阅读相同的 Meraki 指南,它将成功的 EAP-TLS 测试描述为多报文 Access-Request 与 Access-Challenge 交换,接着是真正的客户端网络接入。单次的连通性探测并不算作此类测试。
检查请求者信任的服务器名称、CA 链、证书有效期和设备时钟。时钟漂移会导致有效的证书验证失败。假设一台员工笔记本电脑通过了身份验证,但随后位于默认的 VLAN 而非员工网段。Accept(接受)是真实的,但网络分配错误。这是大多数检查清单从未记录过的遗漏。
请为密码用户、EAP-TLS 设备、xPSK 身份以及目录驱动的策略保留单独的行。不能使用 PAP 接受来替代证书接入。
在备用设备上测试 EAP-TLS
- 从服务器信任的同一个 CA 发行测试客户端证书。
- 将证书和 CA 链安装到备用笔记本电脑或手机上。
- 确认请求者验证了您配置的服务器名称。
- 连接并捕获挑战交换过程,而非单数据包探测。
- 确认会话在预期的 VLAN 上终止,并具有真实的网络接入权限。
简要查看该数据交换,可以帮助您在自己的追踪记录充满杂音时更容易识别抓包内容。
每个 RADIUS 部署都需要涵盖的测试用例
即使凭据有效且系统输出了 Access-Accept,用户也可能会接入错误的网络。请分别测试每个层级:请求处理、身份验证、授权属性以及终端的实际接入权限。FreeRADIUS 性能测试指南 涵盖了负载和准确性测试。测试中还应包含异常情况:无效凭据应返回 Access-Reject,而畸形请求、无法识别的 NAS 以及错误的共享密钥绝不能导致登录成功。
radtest 工作流程由来已久,且仍在使用相同的五个输入。对于隧道化方法,请在 UDP 端口 18120 上单独测试内部身份验证服务器。当 PEAP 为外部方法时,请使用 MS-CHAP 内部测试。这有助于排查故障是出在外部 EAP 交换、证书或 TLS 配置,还是内部凭据检查。
Access-Accept 是一个有待验证的假设,而不是网络访问正确的证明。FreeRADIUS 实现指南 描述了 NAS 如何丢弃不支持的 VLAN 属性或将缺失的属性映射到默认 VLAN。检查返回的属性,然后验证终端节点的地址、VLAN、ACL、DNS 策略和可达性。EAP-MD5 不提供无线所需的密钥材料,因此 EAP-MD5 接受不能作为无线就绪的凭据。请仅将其用于有限的有线测试。
在运行授权测试之前确定预期的网络分段;WiFi 访问控制 解释了如何构建该策略。
作为最低要求的九行配置
| 测试用例 | 运行方法 | 预期结果 |
|---|---|---|
| 基线接受 | 从 NAS IP 使用有效的测试账户运行 radtest |
带有预期 VLAN 属性的 Access-Accept;确认端点接入该 VLAN |
| 密码错误 | 使用不正确的密码运行 radtest |
Access-Reject,并记录原因 |
| 共享密钥错误 | 从配置了不匹配密钥的客户端发送请求 | 无 Access-Accept;调试输出中可见密钥错误 |
| 未知 NAS | 从未定义为客户端的 IP 地址发送请求 | 丢弃或拒绝并记录日志 |
| 有效的 EAP-TLS 设备 | 连接具有有效证书和受信任证书链的真实请求者 (supplicant) | Access-Accept 以及针对其组的正确 VLAN;确认设备的网络访问权限 |
| 证书过期或已吊销 | 连接带有过期或已吊销证书的设备 | Access-Reject,且不回退至默认网络 |
| 目录组变更 | 将测试用户移动至另一个组,然后重新进行身份验证 | VLAN 或角色更改为匹配新组,或者拒绝访问 |
| 主服务器不可用 | 阻止通往主服务器的 UDP 1812 端口或停止主服务器 | 在超时时间内故障转移至备用服务器,并应用相同的策略 |
| 计费开始和停止 | 启动会话,然后结束会话 | 开始和停止记录与会话匹配 |
对于每一行,记录请求到达时间、响应代码、往返时延、选定的策略、返回的属性以及计费开始和停止。重复每次测试以捕获偶发性的 UDP 丢包。单次干净的运行可能会漏掉错误的 VLAN 或不一致的策略决策。
如果接受请求却将客户端划入错误的网络,则属于测试失败。
使用 radclient 测量负载与延迟
静默接受掩盖了排队问题。容量测试需要专门针对批量处理构建的工具,而不是另一次单点登录。
- 构建一个身份验证文件,其中包含随机生成的用户名和密码。将有效与无效条目混合,以便对拒绝进行计数,而不是将其视为噪声。
- 发送文件并计算批次耗时,在
radclient驱动服务器的同时使用 Unixtime命令。 - 记录原始计数。包括请求总数、接受数、拒绝数、超时数、错误响应数以及耗时。
- 计算相关速率。接受率应与文件中的有效比例一致。拒绝率应与无效比例一致。同时获取平均延迟和百分位延迟。
- 在高峰时段重复测试。早晨签到或学校开学时会展现出午餐时间实验室运行所无法体现的排队情况。
| 指标 | 计算方法 | 目标 |
|---|---|---|
| 请求总数 | 从身份验证文件发送的行数 | 等于文件长度 |
| 接受率 | 接受数除以请求总数 | 与文件中的有效条目比例一致 |
| 拒绝率 | 拒绝数除以请求总数 | 与文件中的无效条目比例一致 |
| 超时和错误 | 运行期间无响应和错误响应的计数 | 正常路径下为零 |
| 平均延迟 | 所有请求的平均响应时间 | 高峰期符合您的延迟目标 |
| 耗时 | 整个批次的 Unix 时间输出 | 重复运行保持稳定 |
将隧道与账户存储区分开
如果接受率低于有效份额,在明确哪一半失败之前,请勿归咎于“负载”。对于 PEAP,请使用针对内部服务器的 MS-CHAP 请求单独测试内部方法。内部接受但外部加入失败表明问题出在证书或 TLS 设置上。内部检查时终止的外部握手则指向账户存储、密码哈希或策略所期望的组。
将这些时间记录在与功能结果相同的日志中。日后的固件或目录变更应与该基线进行比较,而不是凭“感觉变慢了”的印象。
如果超时仅在高峰期攀升,请在添加站点之前修复容量或路径。一个正确但缓慢的服务器仍会导致先放弃的客户端发生故障。
故障路径、故障转移与安全检查
即使数据交换正常运行,也可能存在安全隐患。如果排错过程仅确认 UDP 1812 是否收到回复,那就停止得太早了。
Juniper 的 2025 安全公告 描述了 RFC 2865 响应验证程序 (Response Authenticator) 中存在的 Blast-RADIUS 漏洞。能够修改流量的本地攻击者可以通过 MD5 选择前缀碰撞,潜在地将一个有效响应转换为另一个响应。“身份验证成功”并不能作为部署已受保护的证据。

故障转移测试中必须包含的检查项
在平台允许的情况下保护路径。 确认路径上的篡改已被阻断,并且对需要数据包强制执行 Message-Authenticator 验证。
关闭弱加密方法。 已过时的 EAP 类型应当被禁用,而不是留着“以防万一”。如果您仍在证书与密码外层方法之间做选择,请在保持两者均启用之前,先在 EAP-TLS 与 PEAP 中对它们进行比较。
故意使服务器故障。 下面的每个场景都应展示预期的故障闭合或受控回退,以及日志行、警报和你可以向现场经理解释的用户体验。
| 故障场景 | 如何触发 | 通过条件 |
|---|---|---|
| 超时 | 阻止发送至服务器的 UDP 1812 | 故障闭锁或受控回退,且已记录日志并发出警报 |
| Access-Reject | 使用错误的密码 | 拒绝访问且无回退网络 |
| 证书过期 | 使用已过期证书的设备 | Access-Reject 且无默认 VLAN |
| 证书已被吊销 | 使用已被吊销证书的设备 | Access-Reject 且无默认 VLAN |
| 未知的 NAS 源 IP | 从未定义的地址发送 | 丢弃或拒绝,并已记录日志 |
| 共享密钥不正确 | 客户端上的密钥不匹配 | 无 Access-Accept 且调试输出中显示密钥错误 |
| 目录不可达 | 中断目录连接 | 根据策略拒绝访问或受控回退 |
| 授权响应延迟 | 为授权回复添加延迟 | 超时处理妥当且未开放访问权限 |
区域故障转移必须保留的内容
由另一台服务器响应并不意味着策略的一致性。当您停止主服务器时,请将备用服务器的 VLAN、带宽限制、吊销状态和审计属性与主服务器进行对比。如果访客在故障转移后接入了员工网段,即便接入速度很快,也是一次失败的测试。
将任何回退到开放访问的场景标记为失败,无论用户是否上线。将每个结果写入与功能基线相同的测试日志中,以便日后的故障转移变更清晰可见。
查看日志以确认各项测试结果
每次测试都应留下可与测试 ID 或已知账户匹配的痕迹。在繁忙的设备群中,该标签能让你找到自己的运行记录,而无需滚动浏览其他所有人的早间记录。
对于每次身份验证,请对齐以下字段:
- 身份与设备:接入的是谁或什么设备,而不仅是您希望属于您的 MAC 地址。
- 方法: EAP-TLS、PEAP 或个人 PSK。未部署的方法即属于检测发现。
- 位置:接入点、SSID 和站点。
- 决策: 返回的 VLAN 和角色,或拒绝原因。
- 时间: 处于您测试的时间窗口内的时间戳。
我们的认证日志正是为此类匹配而设计的。一次覆盖整个企业网络的查询即可显示每个接受和拒绝记录,包括身份、设备、注册状态、方法、接入点、SSID、站点、VLAN、角色、原因和时间戳。当某个站点有多个接入点,且您需要查看是所有地方都出现了相同的故障还是仅在某台控制器上出现时,可以使用此功能。
意味着记录有误的三种模式
原因与测试不匹配。 你发送了错误的密码,但日志显示未知的客户端。你测试了错误的内容,或者叠加了两个故障。
接受消息中指定了默认 VLAN。 凭据有效,但位置分配无效。请勿关闭此工单。
计费已开始但从未停止。由于会话记录不完整,您无法证明客户端已在您预期的时刻离线。请将开始和停止时间与您运行的实际会话进行比对,而不是与附近其他用户的会话进行对比。
在测试窗口期间针对拒绝激增设置警报,以便错误的共享密钥不会看起来像“用户输入错误”。将日志提取与测试说明放在一起。几周后当有人询问你证明了什么时,该提取内容就是审计证据。
判断 RADIUS 何时准备好全面推广
仅当证据满足全部五个关口时才可上线。工程师的主观自信不能作为上线标准。
- 矩阵中的每一行都在您部署的每种 NAS 类型上通过,包括您打算保留的每个 SSID 或访问策略。
- 故障转移保持与主服务器相同的 VLAN、策略和吊销行为。以不同角色进行响应的备用服务器无法通过此关卡。
- 任何故障场景都不会导致错误放行。密码错误、目录失效、证书过期以及延迟响应绝不能将用户放入未受受控的网络中。
- 负载在高峰期维持在您的延迟目标范围内,且接受率与测试文件的有效比例一致。
- 日志为判定为通过的每次运行显示预期的原因和 VLAN。
在真实站点上确认这五项均成立之前,暂缓更广泛的部署,切勿仅凭实验室环境的测试结果判断 VLAN。
我们允许您先在一个站点上验证这一点。在该站点已运行的接入点上部署新的开放、安全和 xPSK 网络(与目前使用的网络并存),并在任何其他站点变更前根据工单和审计证据评估结果。在此试点期间,日志应能在无需开会讨论的情况下回答两个问题:哪些设备通过哪些 VLAN 接入,以及哪种接受或拒绝原因最常出现。
只有在工单和审计提取数据均未显示任何异常拒绝且无设备接入错误网段时,才进行扩展。请将该测试矩阵作为常设的回归测试套件。在每次证书更新、固件升级或目录更改后,在用户感知到变化之前,针对相同的基线重新运行测试。关于试点站点的规划方式,请参阅 WiFi 网络设计,并测试您打算长期保留的设计,而不是下周就会删除的临时 SSID。
Purple Access 为您提供云端 RADIUS,可根据身份将每个设备分配至开放、安全或 xPSK 网络,并在身份验证日志中显示 VLAN 和拒绝原因。如果您希望针对现有的接入点运行该测试计划,可先从一个站点开始,在进一步推广前查看结果。请访问 Purple Access,将首个站点置于可防御的基线之上。


