RADIUS 经 F5 VIP 后真实地址回包问题分析笔记
1. 结论摘要
本次抓包中,锐捷 S5310 交换机 93.4.19.204 向 F5 虚拟地址 93.0.177.12 发起 RADIUS/802.1X 认证请求,但响应报文由后端真实地址 93.224.14.1 直接回给交换机。
测试时交换机配置为:
aaa group server radius 2
server 93.0.177.12
server X.X.X.X
aaa authentication dot1x default group 2
其中 group 2 不包含旧配置中的 F5 后端真实地址 93.224.14.1。因此,本次认证能够通过,不能解释为“93.224.14.1 本来就在 RADIUS 服务器列表中”。更合理的判断是:
锐捷 S5310 在该 dot1x/RADIUS 场景下,没有强制要求响应报文源 IP 必须等于配置的 radius-server IP。
它接受了来自 93.224.14.1 的 RADIUS Access-Challenge / Access-Accept,
并依据 RADIUS 协议层的 Identifier、Response Authenticator、shared secret 继续完成认证。
认证结果可用,但 F5/VIP 回程形态不规范。标准和更稳妥的生产形态应当让交换机看到响应源地址仍为 VIP:
93.0.177.12:1812 -> 93.4.19.204:1812
而不是:
93.224.14.1:1812 -> 93.4.19.204:1812
2. 拓扑示意
flowchart LR
Client["终端 / Supplicant"] -->|EAPOL| SW["锐捷 S5310<br/>SD53XF04-A4<br/>93.4.19.204"]
SW -->|RADIUS Access-Request<br/>dst 93.0.177.12:1812| F5["F5 Virtual Server<br/>VIP 93.0.177.12:1812"]
F5 -->|负载均衡 / DNAT| RS["后端 RADIUS 真实服务器<br/>93.224.14.1:1812"]
RS -.->|Access-Challenge / Access-Accept<br/>src 93.224.14.1:1812<br/>dst 93.4.19.204:1812| SW
note1["现象:请求目的地址是 VIP,响应源地址是后端真实地址"]
RS -.-> note1
3. 抓包文件与对象
抓包文件:
F:\A-工作间\A-FTP\ras_2_办公网_(2026-06-25 15_39_00 - 2026-06-25 15_43_05)_1782437338409.pcap
关键地址:
| 对象 | 地址 | 说明 |
|---|---|---|
| 交换机 | 93.4.19.204 | 锐捷 S5310,dot1x NAS / RADIUS client |
| F5 VIP | 93.0.177.12 | 交换机配置的 RADIUS 目标地址 |
| 后端真实 RADIUS | 93.224.14.1 | 抓包中实际回包源地址 |
| RADIUS 端口 | 1812/UDP | 认证报文端口 |
抓包统计:
| 类型 | 数量 | 方向 |
|---|---|---|
| Access-Request | 6 | 93.4.19.204 -> 93.0.177.12 |
| Access-Challenge | 3 | 93.224.14.1 -> 93.4.19.204 |
| Access-Accept | 3 | 93.224.14.1 -> 93.4.19.204 |
二层 MAC 方向:
| 方向 | 源 MAC | 目的 MAC |
|---|---|---|
| 交换机发往 F5/VIP | 9c:ce:88:51:45:d4 | c4:d4:38:1d:e9:02 |
| 真实 RADIUS 回交换机 | c4:d4:38:1d:e9:02 | 9c:ce:88:51:45:d4 |
4. 抓包显示的状态
Wireshark 中可见的 RADIUS 交互状态如下:
| No. | 相对时间 | 源地址 | 目的地址 | RADIUS 类型 | Identifier | EAP 内容 |
|---|---|---|---|---|---|---|
| 1 | 0.000000000 | 93.4.19.204 | 93.0.177.12 | Access-Request | 9 | EAP Response Identity |
| 2 | 0.021293689 | 93.224.14.1 | 93.4.19.204 | Access-Challenge | 9 | EAP Request MD5-Challenge |
| 3 | 0.029288125 | 93.4.19.204 | 93.0.177.12 | Access-Request | 10 | EAP Response MD5-Challenge |
| 4 | 0.050559574 | 93.224.14.1 | 93.4.19.204 | Access-Accept | 10 | EAP Success |
| 5 | 33.175688832 | 93.4.19.204 | 93.0.177.12 | Access-Request | 11 | EAP Response Identity |
| 6 | 33.200952565 | 93.224.14.1 | 93.4.19.204 | Access-Challenge | 11 | EAP Request MD5-Challenge |
| 7 | 33.207024145 | 93.4.19.204 | 93.0.177.12 | Access-Request | 12 | EAP Response MD5-Challenge |
| 8 | 33.230293763 | 93.224.14.1 | 93.4.19.204 | Access-Accept | 12 | EAP Success |
| 9 | 203.712265689 | 93.4.19.204 | 93.0.177.12 | Access-Request | 13 | EAP Response Identity |
| 10 | 203.713307090 | 93.224.14.1 | 93.4.19.204 | Access-Challenge | 13 | EAP Request MD5-Challenge |
| 11 | 203.723112124 | 93.4.19.204 | 93.0.177.12 | Access-Request | 14 | EAP Response MD5-Challenge |
| 12 | 203.724104311 | 93.224.14.1 | 93.4.19.204 | Access-Accept | 14 | EAP Success |
可以看到:
- 交换机每次 Access-Request 都发往
93.0.177.12。 - 每次 Access-Challenge / Access-Accept 都从
93.224.14.1返回。 - RADIUS Identifier 是连续配对的,例如
id=9的 Request 对应id=9的 Challenge,id=10的 Request 对应id=10的 Accept。 - EAP-MD5 流程完整,最终出现 Access-Accept / EAP Success,说明终端认证已通过。
5. 抓包分析
5.1 五元组现象
请求方向:
93.4.19.204:1812 -> 93.0.177.12:1812
响应方向:
93.224.14.1:1812 -> 93.4.19.204:1812
如果按严格的 UDP 会话五元组反向匹配,响应源地址应当是 93.0.177.12。实际源地址变成 93.224.14.1,说明外层 IP 五元组不对称。
5.2 为什么仍能认证通过
本次测试配置的 RADIUS group 2 不包含 93.224.14.1,但认证仍然通过,说明锐捷 S5310 在此场景下没有把“响应源 IP 不等于配置 server IP”作为硬失败条件。
更可能的处理逻辑是:
1. 交换机本机 UDP 1812 收到 RADIUS 响应报文。
2. RADIUS 客户端用 Identifier 匹配 pending Access-Request。
3. 使用对应请求的 Request Authenticator 和 shared secret 校验 Response Authenticator。
4. 校验通过后继续 EAP Challenge / Accept 流程。
5. 外层源 IP 93.224.14.1 != 93.0.177.12 没有触发丢弃。
5.3 F5 侧含义
该现象通常意味着以下情况之一:
| 可能原因 | 说明 |
|---|---|
| 后端服务器直回 | 请求经 F5 到后端,后端回交换机时绕过 F5 |
| F5 未对回程做源地址转换 | 回包没有被转换回 VIP |
| 回程路由非对称 | 后端 RADIUS 到交换机网段的路由不经过 F5 |
| 类 DSR/nPath 设计 | 如果是故意设计,必须确认交换机和安全策略都接受这种形态 |
生产上更建议检查 F5 Virtual Server、Pool、SNAT Automap/SNAT Pool、后端服务器默认网关和回程路由,使交换机侧看到的响应源统一为 VIP。
6. RFC 2865 原理依据
RFC 链接:
https://datatracker.ietf.org/doc/html/rfc2865
6.1 Section 3 - Packet Format
链接:
https://datatracker.ietf.org/doc/html/rfc2865#section-3
相关内容:
- RADIUS 报文封装在 UDP Data 字段中,RADIUS 认证端口为 UDP 1812。
- Identifier 字段用于匹配 request 和 reply。
- Authenticator 字段用于认证来自 RADIUS server 的 reply。
- 对 Access-Accept、Access-Reject、Access-Challenge,Response Authenticator 的计算要素为:
Code + Identifier + Length + 原始 Access-Request 的 Request Authenticator + 响应 Attributes + Shared Secret
摘要算法为 MD5。注意这里没有外层 IP 源地址、目的地址、UDP 源端口、UDP 目的端口。
对应 RFC 公式:
ResponseAuth = MD5(Code + ID + Length + RequestAuth + Attributes + Secret)
这说明:RADIUS 协议层的响应认证摘要本身不把外层 IP 源地址纳入计算。
6.2 Section 4.2 - Access-Accept
链接:
https://datatracker.ietf.org/doc/html/rfc2865#section-4.2
相关内容:
- 收到 Access-Accept 后,NAS 使用 Identifier 匹配一个 pending Access-Request。
- Response Authenticator 必须是该 pending Access-Request 的正确响应。
- 无效报文会被静默丢弃。
- Access-Accept 中的 Identifier 是触发它的 Access-Request 的 Identifier 副本。
本次抓包里,id=10 的 Access-Request 对应 id=10 的 Access-Accept,id=12 对应 id=12,id=14 对应 id=14,符合这一匹配逻辑。
6.3 Section 4.4 - Access-Challenge
链接:
https://datatracker.ietf.org/doc/html/rfc2865#section-4.4
相关内容:
- 收到 Access-Challenge 后,Identifier 字段也要匹配 pending Access-Request。
- Response Authenticator 必须是该 pending Access-Request 的正确响应。
- 如果 NAS 支持 challenge/response,收到有效 Access-Challenge 后会发送新的 Access-Request。
本次抓包里,id=9 的 Access-Request 对应 id=9 的 Access-Challenge,随后交换机继续发出 id=10 的 MD5-Challenge Response,说明交换机接受了该 Challenge。
6.4 关于“源 IP 是否必须一致”的边界
RFC 2865 定义的是 RADIUS 协议层的报文格式、Identifier 匹配和 Authenticator 校验逻辑。它没有把外层 IP 源地址写入 Response Authenticator 计算,也没有明确要求 NAS 必须因为响应源 IP 不等于配置 server IP 而丢弃该响应。
但是,这不等于所有厂商设备都会接受这种报文。厂商实现可以额外增加源地址校验、防重放检查、会话五元组检查或安全策略。
因此,本次现象应表述为:
锐捷 S5310 当前版本/当前 dot1x 场景下,实测接受了源 IP 为后端真实地址的 RADIUS 响应;
从 RFC 2865 的 RADIUS 协议层校验逻辑看,这在 Identifier + Response Authenticator + shared secret 校验通过时可以解释;
但从 F5 负载均衡与生产规范角度,仍建议修正为 VIP 源地址回包。
7. 风险与建议
7.1 风险
| 风险 | 说明 |
|---|---|
| 设备兼容性风险 | 换其他型号、其他版本、其他厂商设备后,可能严格校验响应源 IP |
| 安全策略风险 | 防火墙、IPS、会话检测设备可能认为回包源地址异常 |
| 运维排障风险 | 配置目标是 VIP,但日志和抓包显示真实地址,容易误判 |
| 多后端风险 | 如果 F5 后端池有多台 RADIUS,源地址可能随调度变化 |
| 后续功能风险 | Accounting、CoA、审计联动可能对源地址更敏感 |
7.2 建议检查项
F5 侧建议检查:
1. Virtual Server 93.0.177.12:1812 是否启用地址转换。
2. Pool member 是否包含 93.224.14.1。
3. 是否启用 SNAT Automap 或 SNAT Pool。
4. 后端 RADIUS 服务器到 93.4.19.0/24 的回程路由是否经过 F5。
5. 是否存在 DSR/nPath/透明转发类设计。
交换机侧建议保留的验证命令:
show running-config | include radius-server|aaa group server radius|aaa authentication dot1x
建议的规范目标:
交换机请求:
93.4.19.204:1812 -> 93.0.177.12:1812
交换机收到:
93.0.177.12:1812 -> 93.4.19.204:1812
8. 最终表述
可用于报告中的一句话:
本次锐捷 S5310 终端 802.1X 认证可通过,但抓包显示 RADIUS 请求发往 F5 VIP 93.0.177.12 后,响应由后端真实地址 93.224.14.1 直接返回交换机。测试时交换机 RADIUS group 不包含该真实地址,说明该设备在当前版本/场景下未强制校验响应源 IP 与配置 server IP 一致,而是依据 RADIUS Identifier、Response Authenticator 和共享密钥完成协议层校验。该行为可解释认证成功原因,但 F5 回程形态不规范,建议整改为由 VIP 源地址统一回包。