You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:验证配置有效性

  1. 重启FreeRADIUS服务:
sudo systemctl restart freeradius
  1. 分别测试已有账户和无账户的MAC请求:
    • 已有用户应正常使用原有IP池和限速配置
    • 无账户的MAC请求会被分配DHCP-Default池的IP,并应用5M/5M限速

原理说明

  • SQL模块查询不到用户时,会设置sql:result = "notfound"属性
  • 条件!control:Auth-Type确保仅在未被其他认证方法(如本地用户、LDAP)处理的请求中生效
  • 通过这种方式,默认配置只会作用于无有效账户的请求,不会干扰已有用户的正常认证流程

内容的提问来源于stack exchange,提问作者Karl Keim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:13:20