Freeradius默认用户配置:仅匹配无账户请求及代码语法排查
解决FreeRADIUS默认用户干扰已有用户配置的问题
问题根源
你遇到的核心问题是DEFAULT用户规则会全局匹配所有请求,导致已有用户的配置被覆盖;而ChatGPT生成的代码不符合FreeRADIUS 3.x的配置语法,因此出现解析错误。
错误代码的问题解析
ChatGPT给出的代码存在语法错误:
- FreeRADIUS的配置文件(如
authorize或users)采用属性匹配+动作的语法,不支持authorize User { }这种函数声明式结构 DEFAULT User { }的写法无效,DEFAULT本身是匹配所有请求的规则,不能附加User后缀
正确解决方案
我们需要通过条件判断,仅对未找到有效账户的请求应用默认配置,避免干扰已有用户。
步骤1:调整SQL模块配置
注释掉/etc/freeradius/3.0/mods-config/sql/main/mysql/queries.conf中的default_user_profile = "DEFAULT",避免自动给所有请求绑定DEFAULT用户。
步骤2:添加条件化默认规则
在/etc/freeradius/3.0/mods-config/files/authorize文件末尾添加以下配置:
# 仅当SQL模块未找到用户时,应用默认隔离配置 if (!control:Auth-Type && &sql:result = "notfound") { # 直接通过本地配置设置默认属性,无需依赖radusergroup映射 update control { Auth-Type := Accept } update reply { Mikrotik_Rate-Limit := "5M/5M" Fall-Through := Yes Framed-Pool := "DHCP-Default" } # 如需通过组管理属性,可设置Group-Name关联radusergroup中的组 # update request { # Group-Name := "Default - Unauthenticated Users" # } }
步骤3:验证配置有效性
- 重启FreeRADIUS服务:
sudo systemctl restart freeradius
- 分别测试已有账户和无账户的MAC请求:
- 已有用户应正常使用原有IP池和限速配置
- 无账户的MAC请求会被分配
DHCP-Default池的IP,并应用5M/5M限速
原理说明
- SQL模块查询不到用户时,会设置
sql:result = "notfound"属性 - 条件
!control:Auth-Type确保仅在未被其他认证方法(如本地用户、LDAP)处理的请求中生效 - 通过这种方式,默认配置只会作用于无有效账户的请求,不会干扰已有用户的正常认证流程
内容的提问来源于stack exchange,提问作者Karl Keim
相关产品推荐
相关产品推荐

