在HCL环境中使用Server2内置RADIUS服务器进行802.1X EAP-MD5认证时,Web页面配置的用户名、密码、RADIUS客户端地址及共享密钥均正确,但认证始终失败。
抓包显示认证流程能够正常进入EAP-MD5 Challenge阶段,最终由RADIUS服务器返回Access-Reject。进一步通过radiusd -X调试确认,FreeRADIUS未取得用户的Cleartext-Password。
地址规划:
| 设备/接口 | 地址 | 用途 |
|---|---|---|
| S6850 Vlan-interface10 | 192.168.56.2/24 | RADIUS报文源地址/NAS地址 |
| Server2 br-lan | 192.168.56.4/24 | RADIUS服务器 |
| Server2 eth2 | 10.100.0.10/24 | 802.1X客户端 |
认证信息:
802.1X用户名:lixiang
802.1X密码:123456
NAS地址:192.168.56.2
NAS共享密钥:lixiang
Server2同时作为802.1X客户端和RADIUS服务器,但两个功能分别使用eth2和br-lan,通信路径相互独立。
radius scheme winradius
primary authentication 192.168.56.4 1812
key authentication simple lixiang
nas-ip 192.168.56.2
user-name-format without-domain
domain dot1x
authentication lan-access radius-scheme winradius
authorization lan-access radius-scheme winradius
accounting lan-access none
dot1x
dot1x authentication-method eap
interface GigabitEthernet1/0/1
port link-mode bridge
port access vlan 100
dot1x
dot1x mandatory-domain dot1x
interface GigabitEthernet1/0/24
port link-mode bridge
port access vlan 10
interface Vlan-interface10
ip address 192.168.56.2 255.255.255.0
RADIUS用户配置:
用户名:lixiang
密码:123456
RADIUS客户端配置:
名称:S6850
IP地址:192.168.56.2
共享密钥:lixiang
802.1X客户端配置:
用户名:lixiang
密码:123456
接口:eth2
EAP类型:MD5
所有页面均已执行“保存并应用”。
客户端侧EAPOL抓包:
EAPOL Start
EAP Request/Identity
EAP Response/Identity
EAP Request/MD5-Challenge
EAP Response/MD5-Challenge
EAP Failure
RADIUS侧抓包:
Access-Request
Access-Challenge
Access-Request
Access-Reject
说明客户端、交换机和RADIUS服务器之间的双向通信均正常,故障发生在RADIUS服务器校验EAP-MD5响应阶段。
同一轮认证中,Access-Challenge与后续Access-Request携带的State完全一致:
384e7185384c75a62632f4f54f566216
因此可以排除交换机未回送State或RADIUS会话关联失败。
客户端EAP-MD5报文示例:
EAP Identifier:2
Challenge:e72e861106b4b50c349a794703e73adf
客户端响应:d8cd42dd6fd1c087d380d570bf95c6c0
按照EAP-MD5公式:
MD5(
0x02
+ "123456"
+ e72e861106b4b50c349a794703e73adf
)
计算结果为:
d8cd42dd6fd1c087d380d570bf95c6c0
与客户端报文完全一致,证明客户端使用的密码及MD5计算结果正确。
Server2执行:
uci show radius
输出:
radius.@user[0]=user
radius.@user[0].username='lixiang'
radius.@user[0].password='123456'
radius.@client[0]=client
radius.@client[0].name='S6850'
radius.@client[0].ipaddr='192.168.56.2'
radius.@client[0].secret='lixiang'
/etc/config/radius内容:
config user
option username 'lixiang'
option password '123456'
config client
option name 'S6850'
option ipaddr '192.168.56.2'
option secret 'lixiang'
说明Web页面已经正确写入UCI配置。
使用以下命令启动调试:
radiusd -X
首个Access-Request能够正常进入EAP模块,服务器返回MD5 Challenge:
eap: Peer sent packet with method EAP Identity (1)
eap_md5: Issuing MD5 Challenge
eap: Sending EAP Request (code 1) ID 2 length 22
收到客户端MD5响应后,调试日志显示:
files: users: Matched entry DEFAULT at line 167
随后出现明确错误:
eap_md5: ERROR: Cleartext-Password is required for EAP-MD5 authentication
eap: ERROR: Failed continuing EAP MD5 (4) session
eap: Sending EAP Failure
Failed to authenticate the user
FreeRADIUS实际使用的用户文件为:
/etc/freeradius3/mods-config/files/authorize
该文件中没有由Web配置生成的lixiang用户记录。因此FreeRADIUS只匹配到DEFAULT规则,控制列表中不存在Cleartext-Password,无法校验EAP-MD5响应。
HCL Server2的RADIUS Web配置存在配置同步问题:
Web页面
↓
/etc/config/radius 已正确写入用户
↓
FreeRADIUS authorize文件 未生成对应用户记录
↓
radiusd运行配置 无Cleartext-Password
↓
EAP-MD5校验失败
↓
Access-Reject / EAP Failure
RADIUS客户端配置能够正常生效,radiusd -XC可以识别:
client S6850 {
ipaddr = 192.168.56.2
}
问题主要集中在Web用户配置到FreeRADIUS用户文件的同步环节。
在FreeRADIUS实际用户文件中手工增加:
文件:
/etc/freeradius3/mods-config/files/authorize
内容:
lixiang Cleartext-Password := "123456"
注意该行必须从行首开始,不能包含前导空格、Tab或注释符号#。
配置检查:
radiusd -XC
检查通过后重启服务:
/etc/init.d/radiusd restart
并确认UDP 1812恢复监听:
netstat -unlp | grep ':1812'
然后成功解决。
建议重点检查以下环节:
Server2 Web页面“保存并应用”后,是否调用了RADIUS用户配置生成脚本。
/etc/config/radius中的config user是否应转换到:/etc/freeradius3/mods-config/files/authorize。
生成的用户记录是否应使用:
username Cleartext-Password := "password"
用户新增、修改或删除后,是否自动执行配置校验及radiusd重载。
用户文件生成失败时,Web页面是否应显示明确错误。
重启radiusd前是否应先执行radiusd -XC,避免错误配置导致UDP 1812停止监听。
多台Server2共存时,Web管理入口、IP地址和配置实例是否存在相互覆盖问题。
客户端、交换机、RADIUS网络、共享密钥、EAP Identifier、EAP-MD5摘要及State传递均已验证正常。
当前故障已定位到:Server2 Web页面中的RADIUS用户配置未同步到FreeRADIUS实际使用的authorize文件,导致EAP-MD5认证时缺少Cleartext-Password并返回Access-Reject。
当前状态:根因已定位,手工写入authorize文件的规避方案确认可行。
(0)
最佳答案
您好,参考
/etc/config/radius,但没有自动同步生成到 FreeRADIUS 真正加载的 authorize 用户文件。FreeRADIUS 仅匹配 DEFAULT 规则,拿不到Cleartext‑Password,EAP‑MD5 校验直接失败。RADIUS 客户端配置同步正常,仅用户条目同步失效。/etc/freeradius3/mods‑config/files/authorize写入用户lixiang Cleartext‑Password := "123456",执行配置校验、重启 radiusd 服务,认证恢复正常。(0)
针对此问题,我有以下几点补充建议,或许能帮助您从根本上解决或规避该同步缺陷:
检查Web界面(如LuCI或自定义管理页面)中“保存并应用”调用的具体UCI回调或自定义脚本。通常这类软件会在/usr/lib/lua/luci/或/etc/init.d/下放置触发器。
确认是否有一个负责从/etc/config/radius读取config user并生成/etc/freeradius3/mods-config/files/authorize的脚本。如果缺失,建议编写一个简单的Shell脚本,例如:
并在每次Web修改后触发执行。
FreeRADIUS本身支持多种认证后端(如SQL、LDAP)。如果环境允许,可以配置使用SQLite或MySQL存储用户,这样Web直接写入数据库,FreeRADIUS通过mods-available/sql实时查询,彻底规避文件同步问题。这更适合多用户场景。
使用inotifywait监控/etc/config/radius的修改,触发上述生成脚本。或者配置FreeRADIUS的files模块,设置update = yes并定期重读文件(但需要重启或触发HUP信号),但更推荐用脚本+重启服务。
文档提到“多台Server2共存”,请确保Web管理入口绑定的IP地址或端口唯一,且FreeRADIUS只监听对应接口的UDP 1812,避免配置实例相互覆盖。
在radiusd -X调试时,可增加-d指定配置目录,确保加载的是预期的mods-config/files/authorize。另外,可在mods-config/files/authorize文件开头增加DEFAULT规则前的Auth-Type := Accept等测试条目,辅助判断文件是否被正确加载。
您已通过Wireshark确认State回传正确,这点很重要,说明交换机行为正常。后续如遇到类似问题,可优先检查FreeRADIUS内部用户的Cleartext-Password属性,无需重复排查网络。
(0)
暂无评论
# HCL‑Server2 FreeRADIUS Web‑UCI 不自动生成 authorize 用户记录故障复盘
## 现象高度浓缩
1. Web 界面配置 RADIUS 用户,**UCI 配置`/etc/config/radius`完全写成功**;客户端(NAS)密钥可以正常同步生效;
2. **但是用户条目不会自动渲染输出到 `/etc/freeradius3/mods‑config/files/authorize`**;
3. radiusd‑X 日志报错:`eap_md5: ERROR: Cleartext‑Password is required for EAP‑MD5 authentication`,只匹配 DEFAULT 规则,返回 Access‑Reject;
4. 手工往 authorize 写入`lixiang Cleartext‑Password := "123456"`,重启 radiusd,802.1X EAP‑MD5 认证完全正常。
>
> 通信层、交换机 dot1x 配置、EAP‑MD5 报文摘要、State 状态全部没问题,**问题局限在 HCL Server2 OpenWrt 侧 UCI→freeradius 用户文件的模板渲染脚本没有执行 / 执行失败**。
## 为什么客户端配置正常,用户配置不生成
- RADIUS 客户端(client 段):脚本会解析`/etc/config/radius`的 client 节点,生成`clients.conf`片段,**这个逻辑 HCL Server2 实现是 OK 的**,`radiusd -XC`可以识别 NAS 客户端。
- RADIUS 用户(user 段):依赖 uci‑template 脚本,读取`radius.@user[]`列表,渲染输出到`authorize`文件;**HCL 版本存在 BUG:保存应用后该渲染脚本没有触发执行**,UCI 数据库更新了,但没有生成 FreeRADIUS 可识别的用户文本。
>
> Web 点【保存并应用】只完成 UCI 写入,**没有调用生成 authorize 的转换脚本**,也没有重载 radiusd。
## 定位脚本(HCL Server2)
```
# 查找radius相关uci‑template / hotplug脚本
find /etc -name "*radius*"
```
预期应有类似:
`/etc/radius/render_users.sh` 或者 uci‑template 模板,负责把`/etc/config/radius` user 表生成 authorize。
>
> HCL 内置 Server2 镜像,**该渲染脚本在 “保存并应用” 动作不会自动触发**,是模拟器镜像固有缺陷,不是配置错误。
### 两种临时修复方案
#### 方案 A:手工写入 authorize(你已经验证可行)
```
vi /etc/freeradius3/mods‑config/files/authorize
#文件行首添加(不能有前置空格)
lixiang Cleartext‑Password := "123456"
```
校验 + 重载:
```
radiusd -XC
/etc/init.d/radiusd restart
netstat -unlp | grep 1812
```
>
> 缺点:Web 页面修改 / 新增 RADIUS 用户,**手工写的内容会丢失**,每次 Web 保存后需要重新补。
#### 方案 B:手动调用渲染脚本(如果镜像自带脚本)
```
# 如果存在渲染脚本,手动执行,强制由UCI生成authorize
/etc/radius/render_users.sh
/etc/init.d/radiusd reload
```
>
> HCL 很多版本 Server2 镜像:**该脚本存在,但 Web 保存动作不调用,只能手动执行**。
## 关键注意点(EAP‑MD5 硬性要求)
EAP‑MD5 **强制要求后端提供`Cleartext‑Password`明文密码**,不能用 MD5‑Password 哈希;
所以 freeradius files 后端 authorize 必须明文存储密码,不能存哈希,这也是你日志报错的根源。
>
> PAP 可以用哈希密码;EAP‑MD5 必须明文密码,这是协议限制。
## 避坑清单(HCL Server2 RADIUS 实验)
1. Web 保存应用 ≠ FreeRADIUS 运行配置生效;**客户端配置会生效,用户配置不会自动同步,这是模拟器 BUG**。
2. 修改 Web RADIUS 用户后,务必检查:
```
cat /etc/freeradius3/mods‑config/files/authorize
```
确认你的用户名条目已经生成;没有生成就用方案 A/B 处理。
3. 修改完用户文件,**必须执行 radiusd‑XC 语法检查**,否则配置语法错误会导致 radiusd 直接不监听 1812 端口。
4. 不要混淆:`/etc/config/radius`是 OpenWrt UCI 数据库;`authorize`是 FreeRADIUS 真正加载的用户数据库,二者 HCL‑Server2 不会自动同步。
5. 抓包看到 Access‑Request → Access‑Challenge → Access‑Request → Access‑Reject,**几乎就指向用户库拿不到 Cleartext‑Password**。
## 交换机侧配置补充校验(你的配置大体没问题)
```
display dot1x
display radius scheme winradius
display radius statistics
```
重点确认:`nas‑ip 192.168.56.2`配置,NAS‑IP 必须和 FreeRADIUS 客户端列表里允许的 IP 一致;你的配置是匹配的。
## 替代实验建议(绕开 HCL‑Server2 这个 BUG)
1. 用真实 FreeRADIUS 虚拟机替代 HCL 内置 Server2 做 RADIUS 服务器;
2. 或者 HCL Server2 不使用 Web RADIUS 用户页面,直接手工维护`authorize`文件。
>
> 总结:**不是你的配置错误,属于 HCL 模拟器 Server2 组件 BUG:Web 保存仅写入 UCI 存储层,缺少触发脚本将 user 列表渲染到 freeradius authorize 用户文件。**
(0)
暂无评论
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
暂无评论