现在我用 freeradius2-mysql 管理 PPTP/L2TP/OpenVPN
因为VPS有流量限制,所以就想到用freeradius实现流量控制
我是在 freeradius2-mysql 下配置的,利用的是 这个模块
以限制每个帐号每月流量1Gbyte为例,具体操作如下:
//假设 freeradius2-mysql 已经配置好
- 启用 Rlm sqlcounter
- 首先在 /etc/raddb/radiusd.conf ,去掉下面这一行的注释
$INCLUDE sql/mysql/conter.conf
- 首先在 /etc/raddb/radiusd.conf ,去掉下面这一行的注释
- 添加流量统计器
- vim /etc/raddb/sql/mysql/counter.conf
在末尾添加如下代码
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'"
}
- vim /etc/raddb/sql/mysql/counter.conf
- 添加字典
- vim /etc/raddb/dictionary
添加下面两行
ATTRIBUTE Max-Monthly-Traffic 3003 integer
ATTRIBUTE Monthly-Traffic-Limit 3004 integer
- vim /etc/raddb/dictionary
- 启用Traffic Counter
- vim /etc/raddb/sites-enabled/default
在authorize里添加monthlytrafficcounter(上面添加的流量统计器),像下面这样
authorize {
...
monthlytrafficcounter
}
- vim /etc/raddb/sites-enabled/default
- 添加CHECK ATTRIBUTE
- 在数据库的radcheck(用户规则)里添加如下规则
Max-Monthly-Traffic := 1073741824
// 1073741824 bytes=1 Gbyte, 填写时以byte为单位这一步建议使用Web管理界面做,也方便以后管理
个人推荐用ARA (ASN RADIUS admin),也可以用daloRADIUS
- 在数据库的radcheck(用户规则)里添加如下规则
- 重启一下radiusd,万事大吉~
另外还要补充的一点是:
rlm sqlcounter的统计数据是在每次登陆时检查
因此使用过程中超流量不会强制下线,而是在下一次登陆时被拒绝
Links: