在达到带宽时断开用户连接

时间:2016-08-27 14:31:18

标签: freeradius mikrotik

我在Centos 6.x上配置FreeRadius服务器,并且在mysql数据库上的身份验证工作正常。 但我无法使用sqlcounter来检查preiodicaly sum bandwith是否使用了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插入“site-available default”authorize {},如下所示:

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”时自动断开用户。

请告诉我解决这个问题。 谢谢

1 个答案:

答案 0 :(得分:3)

首先,您已定义

  

poyrazwifi_Limit

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

  

sqlcounter wifi_Limit {

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

  

reply-name = Session-Timeout

你不需要这个,而这是一个错误的配置。这将发送留给用户的任何字节数据作为Session-Timeout进行浏览。

例如,您已为用户配置了“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请求,并且应该在FreeRadius clients.conf文件中将NAS配置为COA服务器