[原创]freeradius2.2.6的sqlcounter的用法,实现累计时长或流量控制

一、累计时长控制
1、radiusd.conf配置文件配置
modules{ } 中开放 counter.conf配置文件
modules {
$INCLUDE sql/mysql/counter.conf
...some other entries here...

2、sites-enabled/default文件的修改
authorize{ } 在最后增加计数器选项
authorize {
...some entries here...
...some entries here...
...some entries here...
...some entries here...

noresetcounter
dailycounter
monthlycounter
}

3、基于用户的累计时长控制
在radcheck表插入用户时,需要同时插入以下几个记录
INSERT into radcheck (username,  attribute, op, value) VALUES ('Glenn','Max-All-Session' ,':=','54000');
INSERT into radcheck  (username,  attribute, op, value) VALUES (' Glenn','Max-Daily-Session' ,':=','10800');
INSERT into radcheck  (username,  attribute, op, value) VALUES (' Glenn','Max-Monthly-Session' ,':=','10800');

4、基于组的累计时长控制
在radgroupcheck表中,增加组检查信息
INSERT into  radgroupcheck(groupname,  attribute, op, value) VALUES ('normal','Max-All-Session' ,':=','54000');
INSERT into  radgroupcheck (groupname,  attribute, op, value) VALUES (' normal','Max-Daily-Session' ,':=','10800');
INSERT into  radgroupcheck (groupname,  attribute, op, value) VALUES (' normal','Max-Monthly-Session' ,':=','10800');
在插入用户时,在radusergroup表中管理用户到该组
INSERT INTO radusergroup (username,groupname) VALUES ('Glenn','normal');

二、累计流量控制
1、与时长控制一致,在radiusd.conf中开放 counter.conf
modules{ } 中开放 counter.conf配置文件
modules {
$INCLUDE sql/mysql/counter.conf
...some other entries here...

2、 sqlcounter.conf文件末尾添加下面代码 
sqlcounter dailytrafficcounter {
 counter-name = Daily-Traffic
 check-name = Max-Daily-Traffic
 reply-name = Daily-Traffic-Limit
 sqlmod-inst = sql
 key = User-Name
 reset = daily
 query = "SELECT SUM(acctinputoctets + acctoutputoctets) \
                 FROM radacct WHERE username = '%{%k}' AND \
                 UNIX_TIMESTAMP(acctstarttime) > '%b'"
}
sqlcounter monthlytrafficcounter {
  counter-name = Monthly-Traffic
  check-name = Max-Monthly-Traffic
  reply-name = Monthly-Traffic-Limit
  sqlmod-inst = sql
  key = User-Name
  reset = monthly
  query = "SELECT SUM(acctinputoctets + acctoutputoctets) \
         FROM radacct WHERE UserName='%{%k}' AND  \
         UNIX_TIMESTAMP(AcctStartTime) > '%b'"
}
sqlcounter noresettrafficcounter {
  counter-name = All-Traffic
  check-name = Max-All-Traffic
  reply-name = All-Traffic-Limit
  sqlmod-inst = sql
  key = User-Name
  reset = never
  query = "SELECT SUM(acctinputoctets + acctoutputoctets) FROM radacct WHERE UserName='%{%k}'"
}

3、sites-enabled/default文件的修改
authorize{ } 在最后增加计数器选项
authorize {
...some entries here...
...some entries here...
...some entries here...
...some entries here...

noresettrafficcounter
dailytrafficcounter
monthlytrafficcounter
}

4、添加字典文件
    vim /etc/raddb/dictionary
    在文件末尾添加下面几行
ATTRIBUTE       Max-Daily-Traffic       3003    integer
ATTRIBUTE        Daily-Traffic-Limit   3004    integer
ATTRIBUTE       Max-Monthly-Traffic     3005    integer
ATTRIBUTE       Monthly-Traffic-Limit   3006    integer
ATTRIBUTE       Max-All-Traffic         3007    integer
ATTRIBUTE       All-Traffic-Limit       3008    integer

5、组方式限定用量
INSERT INTO radgroupcheck (GroupName, Attribute, op, Value) values("normal", "Max-Daily-Traffic", ":=", "1048576");
INSERT INTO radgroupcheck (GroupName, Attribute, op, Value) values(" normal", "Max-Monthly-Traffic", ":=", "1073741824");
INSERT INTO radgroupcheck (GroupName, Attribute, op, Value) values(" normal ", "Max-All-Traffic", ":=", "10737418240");

注意:3.0以下版本的freeradius,由于计数器门限变量在代码中是int32,所以限制流量时,最大门限int32的最大值
2147483648 ,即2G字节。
因此,可以考虑只按天或按月限制,不要做太长周期的限制

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值