Freeradius 允许来自特定站点的用户 (WISPr-Location-ID)

Freeradius Allow user from a specific site (WISPr-Location-ID)

我已经根据以下站点提供的帮助安装了 Freeradius 和 Daloradius。 https://computingforgeeks.com/how-to-install-freeradius-and-daloradius-on-ubuntu/

我需要一些帮助。我的情况很特殊。

我有多个安装了 mikrotik 路由器的站点。我在一个位置安装了 RADIUS,并使其成为用户热点用户(在 Mikrotik 上)身份验证的单点。

我实现的是:当用户要登录时,他被分配了XYZ XYZ 空闲时间和 XYZ 同时用户的速度限制。

我做了什么:为了测试目的,我做了

Reply Attributes:
Fall-Through: value 1 , Op =

Check Attribues:
Auth Type: Value Reject, Op :=
WISPr-Location-ID: Value Site1, Op !=

上面所做的是,它检查如果用户试图从 WISPr-Location-ID 现在是 Site1 的站点登录,它会拒绝用户。如果 WISPr-Location-ID 是 Site1,它允许用户登录。这很好用。

What my Goal is (what I want to do and have not able to achieve is): 当用户实际在Site1(他被允许的地方)时,如果我应用Speed limit的Reply属性,idle -超时和(检查属性)同时用户;他们没有得到应用。

总之我要:

如果用户在站点 1,则允许该用户并应用此速度限制、空闲超时和并发用户限制否则,拒绝并不允许在网络上。

任何人都可以在这方面帮助我吗?

由于没有人回答,我为此另辟蹊径。

在 Radius 数据库的用户 table 中,有一列 "address"

我添加了我想要的 SITE 名称作为地址,然后在

中编写了以下代码

/etc/freeradius/3.0/sites-enabled/default 文件正在授权中。

if ("%{sql: select address from userinfo where username = '%{User-Name}'}" != "%{WISPr-Location-ID}" && "%{sql: select address from userinfo where username = '%{User-Name}'}" != "all"  ) {
update reply {
Reply-Message = 'Error: You are not allowed to connect form this Site !'
}
update control {
Auth-Type := "Reject"
}
}

上面所做的是,它会查找路由器发送的WISPr-Location-ID,如果回复与用户地址中写入的内容匹配,则允许用户连接到网络并且如果用户在地址字段中写入 "all",它将允许用户访问网络,而不管路由器的回复如何。

如果用户在地址字段中没有 "all" 并且有一些其他条目与从路由器收到的回复不匹配,它将向用户发送 msg

"Error: You are not allowed to connect form this Site !"

我希望这对其他人有帮助。