Freeradius配置需求:允许指定WISPr-Location-ID用户并应用属性
Hey,我来帮你搞定这个FreeRADIUS的配置问题!你已经搭好环境并实现了基础的站点拦截,现在就差让Site1用户的速率限制、超时这些属性生效了,咱们一步步来调整:
解决FreeRADIUS针对MikroTik热点的站点专属认证与属性配置问题
第一步:调整认证规则优先级,让Site1的Reply属性精准生效
你之前用了Fall-Through=1,这个参数会让认证请求继续匹配后续规则,很可能导致你配置的速率、超时属性被覆盖或者没触发。咱们要把允许Site1的规则放在最前面,匹配后直接返回所有需要的属性,不再走后续流程;其他站点的请求直接拦截。
1.1 用组统一管理Site1用户的属性(更高效)
如果是批量Site1用户,建议用FreeRADIUS的组功能来统一配置属性,不用给每个用户单独加规则。编辑/etc/freeradius/3.0/users文件:
# 先定义Site1专属组的属性 Site1-Group Framed-Protocol = PPP, # MikroTik速率限制(格式:下行速率/上行速率,单位bps,这里是10M下行5M上行) Mikrotik-Rate-Limit = "10240k/5120k", # 空闲超时(3600秒=1小时) Idle-Timeout = 3600, # 并发用户数限制(1个账号只能同时登1台设备) Simultaneous-Use = 1 # 给Site1的用户绑定这个组 site1-user1 Cleartext-Password := "your_password", MemberOf = "Site1-Group" site1-user2 Cleartext-Password := "another_password", MemberOf = "Site1-Group"
如果习惯用Daloradius操作,也可以在后台的Radius > Groups里创建Site1组,把这些属性添加到组的Reply属性里,再给用户分配组即可。
1.2 调整认证规则的逻辑顺序
编辑FreeRADIUS的/etc/freeradius/3.0/sites-enabled/default文件,找到authorize段,替换成下面的逻辑:
authorize { # 先检查请求是否来自Site1 if (WISPr-Location-ID == "Site1") { # 直接允许认证,并加载Site1组的所有属性 update control:Auth-Type := Accept # 把组里的属性同步到Reply里 update reply += { Mikrotik-Rate-Limit = "%{config:Site1-Group/Mikrotik-Rate-Limit}" Idle-Timeout = "%{config:Site1-Group/Idle-Timeout}" Simultaneous-Use = "%{config:Site1-Group/Simultaneous-Use}" } # 停止后续规则匹配,直接返回结果 return } # 所有非Site1的请求直接拒绝 reject }
第二步:确认MikroTik的RADIUS配置没毛病
路由器这边要确保能正确发送站点标识,并且接受RADIUS返回的属性:
- 进入MikroTik的Hotspot配置,打开
Server Profiles > RADIUS,勾选Send WISPr Location ID,并把Location ID设为Site1(对应站点的路由器设对应值,其他站点设不同的ID) - 然后在Hotspot的
User Profiles里,把Rate Limit和Idle Timeout都设为RADIUS,让路由器优先使用RADIUS返回的属性,而不是本地配置。
第三步:测试配置并排查问题
- 先重启FreeRADIUS让配置生效:
sudo systemctl restart freeradius
- 开启调试模式,实时看请求和返回的细节(方便排查哪里出问题):
sudo freeradius -X
- 分别用Site1用户和其他站点的用户测试登录:
- Site1用户应该能正常登录,并且调试日志里能看到返回的
Mikrotik-Rate-Limit、Idle-Timeout等属性 - 非Site1用户应该直接被拒绝,日志里会显示
Reject的记录
- Site1用户应该能正常登录,并且调试日志里能看到返回的
常见坑点排查
- 如果Reply属性还是不生效:检查FreeRADIUS的字典文件,确保
/etc/freeradius/3.0/dictionary.d/dictionary.mikrotik存在,这个文件包含了MikroTik专属的属性定义 - 并发用户数限制没效果:需要开启FreeRADIUS的
simul_count模块,在authorize段里加上simul_count,并且如果用Daloradius的SQL存储,要确保sql模块配置正确,能记录在线用户信息
内容的提问来源于stack exchange,提问作者Safi
相关产品推荐
相关产品推荐

