同一FreeRADIUS实例能否使用两个不同数据库?Ubuntu 22.04环境
在Ubuntu 22.04的FreeRADIUS 3.0实例中连接两个MySQL 8.0数据库的可行方案
完全可行,核心思路是通过配置多个独立的SQL模块实例,每个实例对应一个MySQL数据库,然后在FreeRADIUS的处理流程中按需调用这些模块。以下是具体实现步骤:
1. 复制并配置第二个SQL模块
FreeRADIUS默认的SQL模块配置文件位于/etc/freeradius/3.0/mods-available/sql。为第二个数据库复制一份配置文件:
cp /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-available/sql_db2
编辑新生成的sql_db2文件,修改以下关键参数以匹配第二个MySQL数据库:
# 保持MySQL驱动不变 driver = "rlm_sql_mysql" # 第二个数据库的地址(IP或主机名) server = "db2.example.com" # 第二个数据库的登录凭据 login = "radius_user_db2" password = "your_db2_password" # 第二个数据库的名称 radius_db = "radius_db2" # 设置唯一的模块标识符,避免冲突 instance = sql_db2
2. 启用两个SQL模块
将两个SQL模块配置文件软链接到mods-enabled目录,让FreeRADIUS加载它们:
ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/ ln -s /etc/freeradius/3.0/mods-available/sql_db2 /etc/freeradius/3.0/mods-enabled/
3. 配置模块调用逻辑
根据业务需求,在/etc/freeradius/3.0/radiusd.conf的对应处理块中调用两个模块。例如:
- 优先从第一个数据库认证,失败则尝试第二个:
authorize { sql # 先调用默认SQL模块(第一个数据库) sql_db2 # 第一个认证失败时,调用第二个模块 }
- 同时查询两个数据库的属性并合并:
可以结合update指令将两个数据库返回的属性合并,比如:
authorize { sql update request { &Reply-Item += &sql_db2.Reply-Item } }
4. 验证配置并重启服务
先检查配置文件语法是否正确:
freeradius -XC
如果输出无错误,重启FreeRADIUS服务使配置生效:
systemctl restart freeradius
关键注意事项
- 确保两个MySQL数据库的用户拥有足够权限(如查询用户表、插入计费记录等)
- 网络层面需允许FreeRADIUS服务器访问两个MySQL实例的3306端口
- 模块调用顺序会影响处理逻辑,需根据实际需求调整
内容的提问来源于stack exchange,提问作者Bora Karaosmanoğlu
相关产品推荐
相关产品推荐

