linux限制pptp连接数_PPTP-***第三章——用户流量与并发数限制

在前面两篇文章中详细介绍了pptp ***的安装与使用,以及如何配置用户认证存入mysql数据库。本文将在前面两篇文章的基础上介绍如何对用户的流量做限制,同时限制相同账号的用户,同一时刻的在线数为1。

前文传送门地址:

一、向mysql库表中插入基础数据mysql> use radius

mysql> INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Auth-Type',':=','Local');

mysql> INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Service-Type',':=','Framed-User');

mysql> INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Framed-IP-Address',':=','255.255.255.255');

mysql> INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Framed-IP-Netmask',':=','255.255.255.0');

mysql> INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Acct-Interim-Interval',':=','600');

mysql> INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Max-Monthly-Traffic',':=','20480');

mysql> INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('user','Simultaneous-Use',':=','1');

acct-interim-interval是计算流量的间隔(600秒),意味着每隔10分钟记录当前流量;

Max-Monthly-Traffic是每月最大流量,这里是20G(单位是M);

radgroupcheck表的Simultaneous-Use表示单个用户的同时连接数目;

这里要格外注意的是,许多网络上的文章介绍Max-Monthly-Traffic单位为字节,数值为5368709102,换算一下大概5G左右,而如果我们也精确到字节,数值设为20G,也就是21474836480,则用户拨入进行身份验证的时候将会报错。因而此次我们将流量限制的精度单位修改为M。详细可参考如下链接介绍:

二、修改配置文件

1、修改/etc/raddb/sites-enabled/default文件,添加流量限制的reject条件# vi  /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) div 1048576 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

}

2、由于使用了非内置的attribute Max-Monthly-Traffic,所以需要在/etc/raddb/dictionary里面定义# tail -1 /etc/raddb/dictionary

ATTRIBUTE       Max-Monthly-Traffic     3003    integer

3、修改/etc/raddb/sql/mysql/dialup.conf文件,开启在线用户数检查# vi  /etc/raddb/sql/mysql/dialup.conf

sql_user_name = "%{%{Stripped-User-Name}:-%{%{User-Name}:-DEFAULT}}"

#sql_user_name = "%{User-Name}"  #注释掉这行

# Uncomment simul_count_query to enable simultaneous use checking

simul_count_query = "SELECT COUNT(*) \

FROM ${acct_table1} \

WHERE username = '%{SQL-User-Name}' \

AND acctstoptime IS NULL"

simul_verify_query  = "SELECT radacctid, acctsessionid, username, \

nasipaddress, nasportid, framedipaddress, \

callingstationid, framedprotocol \

FROM ${acct_table1} \

WHERE username = '%{SQL-User-Name}' \

AND acctstoptime IS NULL"

三、重启服务

# /etc/init.d/radiusdstop

# /etc/init.d/pptpd restart

四、测试

1、将rediusd服务运行在debug模式下,进行拨号测试,主要测试流量控制!

#radiusd-X

通过上面可以看到当前的用户流量消耗为2M,限制流量的值为20480M。

因而在/etc/raddb/sites-enabled/default文件,判断流量限制的reject条件的结果为false,用户可以通过验证,完成拨号!下面是详细的拨号日志:rad_recv: Access-Request packet from host 127.0.0.1 port 49226, id=94, length=150

Service-Type = Framed-User

Framed-Protocol = PP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值