在 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 服务即可。