风一样的回忆

新浪微薄腾讯微薄

最新碎语:从未遇见一位没亏过钱的富人,却遇见许多从未亏掉一毛钱的穷人

您的位置:风一样的回忆 >linux> [原创]PPTP+Freeradius+MySQL配置详解

[原创]PPTP+Freeradius+MySQL配置详解

FreeRADIUS 是实现 RADIUS 协议的开源软件,而 RADIUS 主要用来实现认证(Authentication)、授权(Authorization)以及计费

(Accounting)功能。
首先请确认你已经搭建好pptpd,并可以正常使用。需要一键脚本的可以联系我。

一、FreeRADIUS 服务端安装
编译、安装
1.1、下载、wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.1.12.tar.gz
tar zxvf freeradius-server-2.1.12.tar.gz
cd freeradius-server-2.1.12
./configure --prefix=/usr/local/radius
make && make install
echo "/usr/local/radius/lib" >> /etc/ld.so.conf
ldconfig

1.2、基本文件的本地测试(选做)
测试是否安装成功,如果不需要与mysql集成,那么就已安装完成。
查找 steve Cleartext (76-84行), 取消注释
vim /usr/local/radius/etc/raddb/users

# 大写X,意思是以debug模式运行。
/usr/local/radius/sbin/radiusd -X 

#新开一个窗口执行,看到 "Access-Accept packet" 表示成功了,"Access-Reject" 表示失败了。
/usr/local/radius/bin/radtest steve testing localhost 0 testing123

二、FreeRadius MySQL 模块配置

2.1、启用MySQL模块支持
# 查找"sql.conf”(700行),去掉#号
vim /usr/local/radius/etc/raddb/radiusd.conf

2.2、创建 radius 数据库及表
# 123456是你mysql的root密码
/usr/local/mysql/bin/mysqladmin -uroot -p123456 create radius; 

#设置radius帐号的密码
cd /usr/local/radius/etc/raddb/sql/mysql
sed -i 's/radpass/123456/g' admin.sql
sed -i 's/radpass/123456/g' /usr/local/radius/etc/raddb/sql.conf

mysql -uroot -p123456 < admin.sql
mysql -uroot -p123456 radius < cui.sql
mysql -uroot -p123456 radius < ippool.sql
mysql -uroot -p123456 radius < nas.sql
mysql -uroot -p123456 radius < schema.sql
mysql -uroot -p123456 radius < wimax.sql

mysql> GRANT SELECT ON radius.* TO 'radius'@'localhost' IDENTIFIED BY '123456';
mysql> GRANT ALL on radius.radacct TO 'radius'@'localhost';
mysql> GRANT ALL on radius.radpostauth TO 'radius'@'localhost';
flush privileges;

====先安装MYSQL5.5来自于lnmp1.2-full--这一步可以跳过
进入freeradius安装目录 
cd src/modules/rlm_sql/drivers/rlm_sql_mysql/ 
./configure --with-mysql-dir=/var/lib/mysql --with-mysql-lib-dir=/usr/lib/mysql 
//--with-mysql-dir 指定mysql的家目录。如果是用rpm或yum的方式安装mysql,这个目录为/var/lib/mysql 
//--with-mysql-lib-dir 指定mysql库文件目录。如果是用rpm或yum的方式安装mysql,这个目录为/usr/lib/mysql 
make 
make install 

echo "/usr/local/mysql/lib" >> /etc/ld.so.conf
ldconfig

2.3、打开从数据库查询nas支持
默认从 "/usr/local/etc/raddb/clients.conf" 文件读取,开启后可从数据库nas表读取。

sed -i 's/\#readclients/readclients/g' /usr/local/radius/etc/raddb/sql.conf

2.4、打开在线人数查询支持

# 查找simul_count_query将279-282行注释去掉
vim /usr/local/radius/etc/raddb/sql/mysql/dialup.conf

2.5、修改sites-enabled目录配置文件
vim /usr/local/radius/etc/raddb/sites-enabled/default

找到authorize {}模块,注释掉files(170行),去掉sql前的#号(177行)
找到accounting {}模块,注释掉radutmp(396行),注释掉去掉sql前面的#号(406行)。
找到session {}模块,注释掉radutmp(450行),去掉sql前面的#号(454行)。
找到post-auth {}模块,去掉sql前的#号(475行),去掉sql前的#号(563行)。

vim /usr/local/radius/etc/raddb/sites-enabled/inner-tunnel

找到authorize {}模块,注释掉files(124行),去掉sql前的#号(131行)。
找到session {}模块,注释掉radutmp(251行),去掉sql前面的#号(255行)。
找到post-auth {}模块,去掉sql前的#号(277行),去掉sql前的#号(301行)。

三、FreeRADIUS 客户端安装与配置
3.1、编译与安装
wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-client-1.1.6.tar.gz
tar -zxvf freeradius-client-1.1.6.tar.gz
cd freeradius-client-1.1.6
./configure --prefix=/usr/local/radius
make && make install

3.2、设置通信密码

cat >>/usr/local/radius/etc/radiusclient/servers<<EOF 
103.243.27.237 modexc2as23e
EOF
其中localhost可以写成服务器IP地址,testing123是认证服务器的连接密码。
testing123 是共享密码在clients.conf中修改第101行
注:如果使用的是IP地址,记得同时修改下面设置。
sed -i 's/103.243.27.237/localhost/g' /usr/local/radius/etc/radiusclient/radiusclient.conf

3.3、增加字典
这一步很重要!否则windows客户端无法连接服务器。
wget -c http://small-script.googlecode.com/files/dictionary.microsoft
mv ./dictionary.microsoft /usr/local/radius/etc/radiusclient/
cat >>/usr/local/radius/etc/radiusclient/dictionary<<EOF
INCLUDE /usr/local/radius/etc/radiusclient/dictionary.sip
INCLUDE /usr/local/radius/etc/radiusclient/dictionary.ascend
INCLUDE /usr/local/radius/etc/radiusclient/dictionary.merit
INCLUDE /usr/local/radius/etc/radiusclient/dictionary.compat
INCLUDE /usr/local/radius/etc/radiusclient/dictionary.microsoft
EOF

3.4、PPTP启用freeradius插件

这一步网上一些教程没提,但很重要,否则会报错!
#sed -i 's/logwtmp/\#logwtmp/g' /etc/pptpd.conf
sed -i 's/radius_deadtime/\#radius_deadtime/g' /usr/local/radius/etc/radiusclient/radiusclient.conf
sed -i 's/bindaddr/\#bindaddr/g' /usr/local/radius/etc/radiusclient/radiusclient.conf

注:64位系统插件路径是 "/usr/lib64/pppd/2.4.5/radius.so"
cat >>/etc/ppp/options.pptpd<<EOF
plugin /usr/lib/pppd/2.4.5/radius.so
radius-config-file /usr/local/radius/etc/radiusclient/radiusclient.conf
EOF  
修改/etc/ppp/options.pptpd最后添加
plugin  /usr/lib/pppd/2.4.5/radius.so
radius-config-file /usr/local/radius/etc/radiusclient/radiusclient.conf

==============================================================
cd /etc/raddb
vim clients.conf
client localhost{
          ipaddr=127.0.0.1
         secret=nick(与/etc/radiusclient/servers里的一样)
}

3.5、L2TP启用freeradius插件

L2TP 的道理也一样,你首先安装配置好L2TP/IPSec,并保证能正常使用。
《Debian/Ubuntu L2TP/IPSec VPN 安装笔记》 
http://blog.wangyan.org/debian-l2tp-ipsec-vpn.html

注:64位系统插件路径是 "/usr/lib64/pppd/2.4.5/radius.so"

cat >>/etc/ppp/options.xl2tpd <<EOF plugin /usr/lib/pppd/2.4.5/radius.so radius-config-file="" local="" radius="" etc="" 

radiusclient="" radiusclient.conf="" eof="" <="" pre="">

四、用户权限管理
#连接 MySQL 数据库
mysql -uroot -p123456;

# 使用 radius 数据库
USE radius; 

# 添加用户test,密码test,注意是在radchec表
INSERT INTO radcheck (username,attribute,op,VALUE) VALUES ('test','Cleartext-Password',':=','test1');

# 将用户test加入VIP1用户组
INSERT INTO radusergroup (username,groupname) VALUES ('test','VIP1');

# 限制同时登陆人数,注意是在radgroupcheck表
INSERT INTO radgroupcheck (groupname,attribute,op,value) VALUES ('VIP1','Simultaneous-Use',':=','3');

# 添加NAS
INSERT INTO radius.nas VALUES ('1','192.168.8.2','Toky', 'other', NULL ,'linodecn.net',NULL ,NULL ,'RADIUS Client');

# 其他(选做)
INSERT INTO radgroupreply (groupname,attribute,op,value) VALUES ('VIP1','Auth-Type',':=','Local');
INSERT INTO radgroupreply (groupname,attribute,op,value) VALUES ('VIP1','Service-Type',':=','Framed-User');
INSERT INTO radgroupreply (groupname,attribute,op,value) VALUES ('VIP1','Framed-Protocol',':=','PPP');
INSERT INTO radgroupreply (groupname,attribute,op,value) VALUES ('VIP1','Framed-MTU',':=','1500');
INSERT INTO radgroupreply (groupname,attribute,op,value) VALUES ('VIP1','Framed-Compression',':=','Van-Jacobson-TCP-IP');

insert into radgroupreply (groupname,attribute,op,value) values('user','Auth-Type',':=','Local');
insert into radgroupreply (groupname,attribute,op,value) values('user','Service-Type',':=','Framed-User');
insert into radgroupreply (groupname,attribute,op,value) values('VIP1','Framed-IP-Address',':=','255.255.255.254');
insert into radgroupreply (groupname,attribute,op,value) values('VIP1','Framed-IP-Netmask',':=','255.255.255.0');
insert into radgroupcheck (groupname,attribute,op,value) values('VIP1','Simultaneous-Use',':=','1');(限制一个帐号只能拨一次

,可选)

五、自动启动

#cp /usr/local/radius/sbin/rc.radiusd /etc/init.d/radiusd
#/usr/local/radius/sbin/radiusd -X
wget http://hello-linux.googlecode.com/files/radiusd(VPN架设包里有)
mv radiusd /etc/init.d/
vi /etc/init.d/radiusd
# 找到prefix=/usr/local/radius(第25行),将其改为prefix=/usr/local

chmod 755 /etc/init.d/radiusd
chkconfig radiusd on
/etc/init.d/radiusd start
参考资料:

1. http://wiki.freeradius.org/SQL%20HOWTO
2. https://tomem.info/blog/2011/04/562
3. https://tomem.info/blog/2011/04/577
4. http://www.xtgly.com/2011/01/05/pptpdfreeradiusmysql%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE.htm
5. http://ichinihachi.blogspot.com/2011/02/ubuntufreeradius.html

更新历史:

2011.08.23 ..
2012.02.11 更改安装路径便于卸载、部分错误修正。    


===========================================通过FreeRADIUS实现VPN流量控制功能

一、启用 Rlm sqlcounter 模块
查找"counter.conf”(712行),去掉#号
vim /usr/local/radius/etc/raddb/radiusd.conf

二、添加 Traffic Counter流量计数器
网上一些教程有拼写错误,折腾了大半天才在官方文档上找到原因。
vim /usr/local/radius/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"

三、启用Traffic Counter流量计数器

vim /usr/local/radius/etc/raddb/sites-enabled/default

在authorize区块的末尾(205行)添加
monthlytrafficcounter

四、添加字典文件
vim /usr/local/radius/etc/raddb/dictionary

在文件末尾添加下面两行
ATTRIBUTE Max-Monthly-Traffic 3003 integer
ATTRIBUTE Monthly-Traffic-Limit 3004 integer

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

注意事项:

1)这里插入到radgroupcheck表,是限制某个用户组的流量。也可以插入到radcheck表,以限制某个用户的流量。
2)流量值以 byte 为单位,1G = 1073741824 bytes
3)VIP1是用户组,123456是数据库root密码

连接到MySQL数据库

mysql -uroot -p123456;

 每月最大流量(1G)
INSERT INTO radgroupcheck (groupname,attribute,op,value) VALUES ('VIP1','Max-Monthly-Traffic',':=','10737418240');

# 流量统计时间的间隔(60秒)
INSERT INTO radgroupcheck (groupname,attribute,op,value) VALUES ('VIP1','Acct-Interim-Interval',':=','60');

参考资料:

1. http://wiki.freeradius.org/Rlm_sqlcounter
2. http://freeradius.org/rfc/attributes.html
3. https://blog.easisee.com/2010/09/freeradius-traffic-limit/


注明:文章中提到的软件包我已全部收录,需要的可以留邮箱。

---

转载请注明本文标题和链接:《[原创]PPTP+Freeradius+MySQL配置详解

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交