首页 > 代码库 > 未成功,待续。。。

未成功,待续。。。

现有环境说明:

[root@localhost ~]# uname -r

2.6.32-358.el6.i686

[root@localhost ~]# cat /etc/redhat-release

CentOS release 6.4 (Final)


freeradius-mysql-2.1.12-4.el6_3.i686

freeradius-2.1.12-4.el6_3.i686



安装MySQL及数据库及freeradius

yum install mysql mysql-server freeradius freeradius-mysql

/etc/raddb/radiusd.conf



为 freeradius 创建数据库并创建用户:


方法一:

[root@localhost ~]# mysql -uroot -p

mysql> CREATE DATABASE radius;

mysql> GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY "radpass";

mysql> exit


方法二:

[root@localhost ~]# mysql -uroot -p

mysql> CREATE DATABASE radius;

mysql> source /etc/raddb/sql/mysql/admin.sql;

mysql> exit




接下来为radius数据库导入相应的表结构:

[root@localhost ~]# cd  /etc/raddb/sql/mysql

[root@localhost mysql]# mysql radius < schema.sql


为 freeradius 启用 MySQL 支持及启用 Rlm sqlcounter 模块:

[root@localhost ~]# vi /etc/raddb/radiusd.conf

# 取消注释700行, $$INCLUDE sql.conf

# 取消注释712行, $INCLUDE sql/mysql/counter.conf


[root@localhost ~]# vi /etc/raddb/sites-enabled/default

# 找到 authorize {}模块,注释掉170行的 files,然后去掉 sql 前的 #号(177 行)


# 找到 accounting {}模块,注释掉396行的 radutmp, 注释掉去掉406行的 sql 前面的 #号



可在 /etc/raddb/sql.conf 修改 sql 连接设置,由于之前我们的用户名密码已经按此设置过


了,所以暂时不用修改。



然后需要允许认证客户端连接。默认 freeradius 只允许本地客户端发起认证,这里假设有一


台提供 VPN 服务的服务器名字是 red,ip 为 1.2.3.4,设置的共享密码为 asdf1234,其中 


IP 必须为客户端 IP,shortname 是可以随意设置的,客户端连接的时候会被要求提供 


secret:



[root@localhost ~]# vi /etc/raddb/clients.conf

在最后一行加上:

client 172.17.88.88 {secret = METENenglish

        shortname = MetenVPN

}

"/etc/raddb/clients.conf" 238L, 6778C written


配置流量统计功能

[root@localhost ~]# vi /etc/raddb/sql/mysql/counter.conf

在文件最后添加以下代码(按月进行统计,从数据库的radacct表中,根据用户名(%k)将所有


入站和出站流量累加,时间可自定义months、weeks、days、hours,也可以指定具体值,如三


天重置一次 "reset = 3 d"):


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‘"

}


启用Traffic Counter流量计数器

[root@localhost ~]# vi /etc/raddb/sites-enabled/default

# 找到 authorize {}模块,在此模块当中的最后一行添加monthlytrafficcounter


添加字典

[root@localhost ~]# vi /etc/raddb/dictionary

在文件最后添加两行:

ATTRIBUTE       Max-Monthly-Traffic     3003    integer

ATTRIBUTE       Monthly-Traffic-Limit   3004    integer


五、数据库插入流量限制值

1)这里插入到radgroupcheck表,是限制某个用户组的流量。也可以插入到radcheck表,以限


制某个用户的流量。

2)流量值以 byte 为单位,1G = 1073741824 bytes

3)VIPgroup是用户组


mysql -uroot -p;

use radius;


# 每月最大流量(1G)

INSERT INTO radgroupcheck (groupname,attribute,op,value) VALUES (‘VIPgroup‘,‘Max-


Monthly-Traffic‘,‘:=‘,‘1073741824‘);


# 流量统计时间的间隔(60秒)

INSERT INTO radgroupcheck (groupname,attribute,op,value) VALUES 


(‘VIPgroup‘,‘Acct-Interim-Interval‘,‘:=‘,‘60‘);


# 在数据库中限制用户组的最大流量为1M(本例中的用户组名为user)

mysql> INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES 


(‘VIPgroup‘,‘Max-Monthly-Traffic‘,‘:=‘,‘1048576‘);


# 流量统计时间的间隔(60秒)

mysql> INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES 


(‘VIPgroup‘,‘Acct-Interim-Interval‘,‘:=‘,‘60‘);


# 加入一个新的VPN用户(用户名Youki,密码qwe456)

mysql> INSERT INTO radcheck (UserName, Attribute, Value) VALUES (‘Youki‘, 


‘Password‘, ‘qwe456‘);


# 将用户Youki加到组里

mysql> insert into radusergroup(username,groupname) VALUES (‘Youki‘,‘VIPgroup‘);


# 限制同时登陆人数,注意是在 radgroupcheck 表

INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES 


(‘VIPgroup‘,‘Simultaneous-Use‘,‘:=‘,‘3‘);



# 退出Mysql

mysql> exit


# 重启radius让其生效

/etc/init.d/radiusd restart



参考资料:

1. http://wiki.freeradius.org/Rlm_sqlcounter

2. http://freeradius.org/rfc/attributes.html


在PPTP配置文件中增加radius支持:

[root@localhost ~]# vi /etc/ppp/options.pptpd

末尾处添加

plugin /usr/lib/pppd/2.4.5/radius.so

plugin /usr/lib/pppd/2.4.5/radattr.so

radius-config-file /etc/radiusclient-ng/radiusclient.conf


本文出自 “生命不止,战斗不息!” 博客,谢绝转载!