0

我在 Centos 6.x 上配置了 FreeRadius 服务器,并且身份验证在 mysql 数据库上工作正常。但是我不能使用 sqlcounter 来检查 preiodically 总和带宽是否使用了 mysql 数据库中的用户。

我做了一个这样的sqlcount:

sqlcounter  wifi_Limit{
count-attribute = Acct-Input-Octets
counter-name = Mikrotik-Total-Limit
check-name = Mikrotik-Total-Limit
reply-name = Session-Timeout
sqlmod-inst = sql
key = User-Name
reset = never
query = "SELECT ((SUM(AcctInputOctets)+SUM(AcctOutputOctets))) FROM radacct WHERE UserName='%{%k}'"

}

并在“站点可用默认”授权{}中插入 wifi_limite,如下所示:

poyrazwifi_Limit{
    reject = 1
}
if(reject){
    reject
}

我在 radcheck 中插入“Mikrotik-Total-Limit”属性,如下所示:

insert into radcheck(username,attribute,op,value) values('test','Mikrotik-Total-Limit',':=','999999')

现在,当用户使用总带宽和“999999”断开pppoe连接manoaly后,此配置工作正常,此后该用户无法再次登录。

但我喜欢在使用总带宽“999999”时自动断开用户连接。

请建议我解决这个问题。谢谢你

4

1 回答 1

3

首先,您已经定义

poyrazwifi_Limit

在授权部分,这与您配置的 sqlcounter 名称不同:-

sqlcounter wifi_Limit{

其次,您已经配置了 sqlcounter 并给出了

回复名称 = 会话超时

你不需要这个,而是这是一个错误的配置。这将发送任何剩余的数据字节供用户浏览作为会话超时。

例如,您为用户配置了“Mikrotik-Total-Limit”为 999999,如果用户浏览了 999990 字节。

因此,如果用户验证了 Session-Timeout=9 的回复属性,则会回复。因此,在 9 秒后,无论用户是否浏览了剩余的 9 个字节,用户都将被取消身份验证,我认为这不是你想要的。

因此,您可以简单地将计数器配置为:-

sqlcounter  wifi_Limit{
count-attribute = Acct-Input-Octets
counter-name = Mikrotik-Total-Limit
check-name = Mikrotik-Total-Limit
sqlmod-inst = sql
key = User-Name
reset = never
query = "SELECT ((SUM(AcctInputOctets)+SUM(AcctOutputOctets))) FROM radacct WHERE UserName='%{%k}'"

并将部分授权为:-

authorize {
......
wifi_Limit
......
}

第三,现在关于如何在达到数据限制时自动断开用户。您可以使用 unlang 来实现这一点,因此您必须检查每个计费数据包并使用以下代码断开用户连接:-

accounting {
......
if ( "%{sql: SELECT ((SUM(AcctInputOctets)+SUM(AcctOutputOctets))) FROM radacct WHERE UserName='%{User-Name}'}" > "%{sql: SELECT value from radcheck where username='%{User-Name}' and attribute='Mikrotik-Total-Limit'}" ) {
     update disconnect {
            User-Name = "%{User-Name}"
            Calling-Station-Id = "%{Calling-Station-Id}"
     }
}
......
}

注意:为此,您的 NAS 应侦听 Radius 的 COA 或 POD 请求,并且 NAS 应在 FreeRadius clients.conf 文件中配置为 COA 服务器

于 2016-10-19T15:20:13.650 回答