产品服务AMH 免费服务器主机面板SSL证书 免费SSL证书申请 担保单 免费安全、零费率交易平台编程助手免费智能写代码、翻译AMYSQL 免费MySQL管理工具

AMH 社区首页

 AMH社区 - 开放自由有价值的社区

[求助帖] [Amh4.2]CentOS 5下给PP_TP v_pn添加流量控制功能

:wq
银牌会员
1340.69 价值分

:wq 发表于 2014-12-02 21:19:56
本帖最后由 :wq 于 2014-12-2 21:43 编辑

引用:
首先感谢论坛里的一些好心人提醒和帮助,最后成功结合amh面板实现pp_tp的流量控制功能,其实还是比较简单的!

教程开始:

通过PP_TP一键安装包安装pp_tp
代码如下

wget http://dl.zrblog.net/pp_tpd.sh;sh pp_tpd.sh;


安装LNMP
本人使用的是AMH4.2,也是一键安装包
代码如下

wget http://amysql.com/file/AMH/4.2/amh.sh; chmod 775 amh.sh; ./amh.sh 2>&1 | tee amh.log;


安装PEAR
AMH安装好后不带PEAR,而DaloRADIUS需要PEAR的DB插件
代码如下

wget http://pear.php.net/go-pear.phar;php go-pear.phar;


一路回车即可
代码如下

/usr/local/php/bin/pear install DB


安装好DB插件
添加虚拟主机
登录AMH后台,安装自带的AMChroot模块,然后新建虚拟主机,进AMChroot把刚刚新建的主机设为兼容模式。因为自带的权限管理很严,导致无法调用pear插件,折腾了好几晚上……
安装DaloRADIUS(下面这个链接被dz论坛阉割了,查看链接地址请点击右键-复制)
代码如下

wget http://downloads.sourceforge.net ... us-0.9-9.tar.gz;tar xvzf daloradius-0.9-9.tar.gz;mv daloradius-0.9-9/* /home/wwwroot/换成刚刚建立虚拟主机的域名/web

配置DaloRADIUS
用phpmyadmin新建一个数据库,然后导入./contrib/db/fr2-mysql-daloradius-and-freeradius.sql
编辑./library/daloradius.conf.php
代码如下

$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_PORT'] = '3306';
$configValues['CONFIG_DB_USER'] = '数据库用户名';
$configValues['CONFIG_DB_PASS'] = '数据库密码';
$configValues['CONFIG_DB_NAME'] = '数据库名称';
$configValues['CONFIG_PATH_DALO_VARIABLE_DATA'] = '/home/wwwroot/换成刚刚建立虚拟主机的域名/web/var';



安装FreeRADIUS(SERVER)
代码如下

yum install freeradius2 freeradius2-mysql freeradius2-utils


安装CLIENT
代码如下

wget ftp://ftp.samba.org/pub/ppp/ppp-2.4.5.tar.gz;tar zxvf ppp-2.4.5.tar.gz;cp -R /root/ppp-2.4.5/pppd/plugins/radius/etc/ /usr/local/etc/radiusclient


配置FreeRADIUS
编辑usr/local/etc/radiusclient/servers,尾部添加
代码如下

127.0.0.1 XXV_PN


编辑/usr/local/etc/radiusclient/dictionary,删除最后一行,然后添加
代码如下

INCLUDE /usr/local/etc/radiusclient/dictionary.microsoft
INCLUDE /usr/local/etc/radiusclient/dictionary.merit



编辑/etc/raddb/clients.conf,把client localhost段下的secret改成XXV_PN
编辑/etc/raddb/radiusd.conf,找到$INCLUDE sql.conf,去掉前面的#;找到$INCLUDE sql/mysql/counter.conf,去掉前面的#
编辑/etc/raddb/sql.conf,配置login(用户名),password(密码),radius_db(数据库名)等字段
编辑/etc/raddb/sites-enabled/default
代码如下

authorize段,关掉files、unix,打开sql
preacct段,关掉files
accounting段,打开sql,关掉unix
session段,打开sql
post-auth段,打开sql
pre-proxy段,关掉files



配置PP_TP
编辑/etc/ppp/options.pp_tpd,尾部添加
代码如下

plugin radius.so
plugin radattr.so
radius-config-file /usr/local/etc/radiusclient/radiusclient.conf



流量控制
编辑/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'"
}



上面代码意思是按月进行统计,从数据库的radacct表中,根据用户名(%k)将所有入站和出站流量累加。
时间也是可以自定义的(months、weeks、days、hours),也可以指定具体值,如三天重置一次 "reset = 3 d"
编辑/etc/raddb/sites-enabled/default,在authorize区块的末尾添加“monthlytrafficcounter”
编辑/etc/raddb/dictionary,尾部添加
代码如下

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



进入phpmyadmin,执行SQL
代码如下

INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Mikrotik-Rate-Limi',':=','512k/1M');
INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Acct-Interim-Interval',':=','300');
INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('user','Simultaneous-Use',':=','1');
INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('user','Max-Monthly-Traffic',':=','1073741824');



用户断线检测脚本
代码如下

#!/bin/bash
MYSQL_PASS=XXXXXXXXXX
/usr/local/mysql/bin/mysql -uroot -p$MYSQL_PASS -e "UPDATE 数据库名称.radacct SET acctstoptime = acctstarttime + acctsessiontime WHERE ((UNIX_TIMESTAMP(acctstarttime) + acctsessiontime + 240 - UNIX_TIMESTAMP())<0) AND acctstoptime IS NULL;"



多线路限制
修改/etc/raddb/sites-enabled/defalut,在authorize区块中添加
代码如下

update [size=15px]request {
Group-Name := "%{sql:SELECT groupname FROM radusergroup WHERE username='%{User-Name}' ORDER BY priority}"
}
if (Group-Name && "%{sql:SELECT count(value) FROM radgroupcheck WHERE groupname='%{Group-Name}' AND attribute='NAS-IP-Address'}") {
if ("%{sql:SELECT count(value) FROM radgroupcheck WHERE groupname='%{Group-Name}' AND value='%{NAS-IP-Address}'}" < 1) {
reject
}
} [/size]



教程结束,流量控制搞定!


2014-12-02 21:19:56 1

dawnvi
铁牌会员
90.00 价值分

顶 我需要一键包 等待官方开发。。
  支持 (0分)  反对 (0分)
回复  2014-12-03 19:11:59 2

yuanxin
铁牌会员
146.00 价值分

怎么导入数据库?那个文件呢?
  支持 (0分)  反对 (0分)
回复  2015-03-02 16:56:06 3

icebin
铁牌会员
92.00 价值分

可以搞限速吗 。。流量无所谓
  支持 (0分)  反对 (0分)
回复  2015-03-07 11:19:06 4

godservant
铁牌会员
23.00 价值分

不管用不用,这位兄弟的行为太伟大了,说干就干,干了还共享方法,顶一下 支持
  支持 (0分)  反对 (0分)
回复  2015-03-22 14:29:25 5

林逸
银牌会员
1177.76 价值分

可以搞个一键的吗。。。 支持
  支持 (0分)  反对 (0分)
回复  2015-03-22 18:58:32 6

godservant
铁牌会员
23.00 价值分

本帖最后由 godservant 于 2015-3-22 22:33 编辑

编辑./library/daloradius.conf.php 为什么有2个文件,都需要改吗?


yum install freeradius2 freeradius2-mysql freeradius2-utils

No package freeradius2 available.
No package freeradius2-mysql available.
No package freeradius2-utils available.


wget ftp://ftp.samba.org/pub/ppp/ppp-2.4.5.tar.gz;

也登不上啊
  支持 (0分)  反对 (0分)
回复  2015-03-22 22:00:32 7

hykb
铜牌会员
747.61 价值分

期待官方开发一键包,最好是pp_tp V_PN里面加强上流量控制的功能
  支持 (0分)  反对 (0分)
回复  2015-04-02 17:22:49 8

wincn
铁牌会员
73.00 价值分

期待官方开发一键包,最好是pp_tp V_PN里面加强上流量控制的功能
  支持 (0分)  反对 (0分)
回复  2015-04-09 18:38:05 9

hykb
铜牌会员
747.61 价值分

等不到官方一键包,今天按这个方法装上了,不错
  支持 (0分)  反对 (0分)
回复  2015-04-09 22:26:08 10
 1  (总1页)
AMH社区列表
用户服务中心