BLOG
Enjoy when you can, and endure when you must.
MAR 10, 2016/平台与系统运维
pptpd + freeradius 实现流量控制

在 Linux 上用软件实现 PPTP VPN 是比较容易的事情,不过有时可能需要利用到流量控制以免引起不必要的麻烦。因此有必要总结一下利用 radius 实现流量控制所需的步骤。也算是针对之前几篇关于 PPTP VPN 服务器搭建的补充。

这里首先架设 radius 的安装路径为 /etc/raddb/。

 

添加流量 counter

编辑/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'" 
}

根据 reset 设定为 monthly 可以看出,这是“月统计”。

 

修改 radius 相关配置

打开 /etc/raddb/radiusd.conf,搜索内容“sql/mysql/counter.conf”:

$INCLUDE sql/mysql/counter.conf

如该行有注释,将其取消。

打开 /etc/raddb/sites-enabled/default,在authorize区块的末尾添加“monthlytrafficcounter”:

authorize {

…

monthlytrafficcounter

}

打开 /etc/raddb/dictionary,在其中添加:

ATTRIBUTE Max-Monthly-Traffic 3003 integer 
ATTRIBUTE Monthly-Traffic-Limit 3004 integer 

然后进入 radius 数据库,增加流量限制的相关行:

INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Acct-Interim-Interval',':=','300'); 
INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('VIP1','Max-Monthly-Traffic',':=','10737418240');

这里对 VIP1 组限制每月 10G 流量。

最后,重启 radius 服务即可。

COMMENTS
LEAVE COMMNT