freeradius流量控制
分类:运维技术日期:2012-03-25 - 21:07:35作者:老谢
之前的CentOS PPTP配置FreeRADIUS+DaloRADIUS实现高级用户控制+流量控制的流量控制似乎没写清楚,在这里单独写一遍。
建立流量控制表格
INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Auth-Type',':=','Local'); INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Service-Type',':=','Framed-User'); INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Framed-IP-Address',':=','255.255.255.255'); INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Framed-IP-Netmask',':=','255.255.255.0'); INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Acct-Interim-Interval',':=','600'); INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Max-Monthly-Traffic',':=','5368709120'); INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('user','Simultaneous-Use',':=','1'); |
acct-interim-interval是计算流量的间隔(600秒),意味着每隔10分钟记录当前流量。倒数第二行是每月最大流量,这里是5G(单位是字节)。最后一行是允许同时连接数目。
创建完表格,编辑/usr/local/etc/raddb/dictionary,到最后一行,添加ATTRIBUTE Max-Monthly-Traffic 3003 integer。
进入radius -X调试模式,看看是否正常,如果正常,继续看下面操作:
编辑/usr/local/etc/raddb/sites-enabled/default,找到authorize字节,添加下面内容:
update request { Group-Name := "%{sql:SELECT groupname FROM radusergroup WHERE username='%{User-Name}' ORDER BY priority}" } if ("%{sql: SELECT SUM(acctinputoctets+acctoutputoctets) FROM radacct WHERE username='%{User-Name}' AND date_format(acctstarttime, '%Y-%m-%d') >= date_format(now(),'%Y-%m-01') AND date_format(acctstoptime, '%Y-%m-%d') <= last_day(now());}" >= "%{sql: SELECT value FROM radgroupreply WHERE groupname='%{Group-Name}' AND attribute='Max-Monthly-Traffic';}") { reject } |
至此,完事,如果流量超限了,用户登录则无法通过验证,会提示691的错误。
灿灿当初遇到的是什么问题哦。
@davelv 用户认证出了问题,连接sql认证总是失败
貌似曾经折腾过,各种出错,我放弃了。。。老谢你玩转了?
@罗伊 玩转谈不上,只能基本能用了
老师你的QQ多少啊可以交流下么,我的QQ1163896977愿意和你做个朋友
没玩过 怎么玩的
很好学习了
强贴,留名,关注。
完全看不懂,看来不是同一领域的
后台没有操作好吧
这个没折腾过..
主可以可以配置VPN?如何可以随机显示密码?
准备折腾中。腾空了手中的一个VPS折腾这玩意了。。。
阿福有没有遇到过搭建好PPTP后,出现链接619 809错误?以排除mppe模块问题…
如果在用户登录使用过程中超了流量怎们办?
博主,如果流量在连接后超限,会不会去断开PPTP的链接?还是只会禁止下一次的连接认证?另外acct表中的连接记录数据是每月自动更新么?问题有点多,见谅下。
@Iris 只会在下一次验证中登录失败,因为检查是添加在验证字段中的,记录数据是每月更新的
如果用户组没有设置 Max-Monthly-Traffic,会被当做零处理。然后这个组的成员就登不上来了,需要加上此判断:
update request {
Group-Name := “%{sql:SELECT groupname FROM radusergroup WHERE username=’%{User-Name}’ ORDER BY priority}”
}
if (“%{sql: SELECT count(*) FROM radgroupreply WHERE groupname=’%{Group-Name}’ AND attribute=’Max-Monthly-Traffic’;}” > 0) {
if (“%{sql: SELECT SUM(acctinputoctets+acctoutputoctets) FROM radacct WHERE username=’%{User-Name}’ AND date_format(acctstarttime, ‘%Y-%m-%d’) >= date_format(now(),’%Y-%m-01′) AND date_format(acctstoptime, ‘%Y-%m-%d’) = “%{sql: SELECT value FROM radgroupreply WHERE groupname=’%{Group-Name}’ AND attribute=’Max-Monthly-Traffic’;}”) {
reject
}
}
优质评论!
如果Max-Monthly-Traffic 设置的过大,可能存在数值越界的问题。实际应用中可能不会限制到byte,可以将 SUM(acctinputoctets+acctoutputoctets) 和 Max-Monthly-Traffic value 都除以 1024或1024 * 1024来以K或M作为计量单位,就可以降低数量级,从而保证计算正确。
最近出现这种问题了。设定20G流量,使用才几G就出现无法登录的情况,检查发现居然SQL计算的出来的结果是几G大于设定的20G为TRUE了,真奇怪了。回去试试
Hi 你好, “可以将 SUM(acctinputoctets+acctoutputoctets) 和 Max-Monthly-Traffic value 都除以 1024或1024 * 1024来以K或M作为计量单位” 这个是如何修改呢? 请不要发怒阿, 我真不会这个, 就是照着这个粘贴修改而已. 不清楚这个如何修改?
query = “select sum(acctinputoctets + acctoutputoctets) div 1048576 from radacct where username=’%{%k}’ and unix_timestamp(acctstarttime) > ‘%b'”
好像是这样子
多谢你.
发现一个问题,除以1024以后,会提示“Left field is not a number at:XXX”这样的,怎么能把左边的转化为数字呢?谢谢
流量超50G后被reject,那下个月如何自动开通!谢谢了!
ios上一直鉴定用户失败 在vps上radtest是成功的