freeradius+xl2tp+mysql整合
freeradius+xl2tp+mysql整合
搭了5个小时,可以说是入门到精通了。
首先请确认你已经搭建好L2TP,并可以正常使用。 如何在Ubuntu下配置L2TP VPN
L2TP使用radiusclient连接freeradius进行认证,freeradius有两种认证方式,一种基于文本,一种基于mysql数据库。这里使用mysql数据库进行数据查询连接。
freeradius在mysql中查询到用户数据,认证成功后即可确认连接。
一、首先安装软件
apt-get install mysql freeradius freeradius-mysql freeradius-utils
下载freeradius-client-1.1.6并安装
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-client-1.1.6.tar.gz tar -zxf freeradius-client-1.1.6.tar.gz cd freeradius-client-1.1.6 ./configure make && make install
freeradius-client安装之后的配置文件目录为/usr/local/etc/radiusclient/
freeradius安装之后的配置文件目录为/etc/freeradius
二、l2tp启用radius认证功能
vim /etc/ppp/options.xl2tpd 新增最后两行启用radius认证功能,反之注释掉即可不启用 plugin /usr/lib/pppd/2.4.5/radius.so radius-config-file /usr/local/etc/radiusclient/radiusclient.conf
基本文本数据的本地测试(选做)
测试是否安装成功,如果不需要与mysql集成,那么就已安装完成。
vim /etc/freeradius/users 查找 steve Cleartext-Password := "testing" (76-84行), 取消该段内容的注释。
#大写X,意思是以debug模式运行。freeradiux -X 启动测试服务器,这时会占住一个终端,ctrl+c关闭。
freeradius -X
#新开一个窗口执行,看到"Access-Accept packet"就成功了。
radtest steve testing localhost 18120 testing123
#steve是用户名,testing是用户password,localhost是freeradius服务器地址,18120是localhost地址freeradius的默认端口号,testing123是radiusclient和freeradius的通信密钥
看到Access-Accept packet这一步很重要,只有看到了才能正常使用。注意查看freeradius -X提示的地址和端口号。
有可能遇到以下问题:
1) 服务器测试窗口出现:Listen to the unknown client xxx.xxx.xx.xxx(本机外网IP)....
这时需要对/etc/freeradius/client.conf文件进行相关配置,修改客户端信息,将freeRadius服务器IP写入
vim /etc/freeradius/client.conf client crayon-vpn { ipaddr = xxx.xxx.xx.xxx secret = testing123 }
并在 /etc/hosts文件中配置 IP和主机名:(据说127.0.0.1 最后那个server也要加,不知有没有用)
2) freeradius -X时出现以下错误
Failed binding to authentication address *port 1812:Address already in use
用命令lsof -i:1812查看占用进程,一般就是freeradius本身,kill -9 PID强制终止该进程,或者/etc/init.d/freeradius stop,然后重新运行命令freeradius -X便可以运行服务程序了
freeradius
启动、重启、停止freeradius服务的命令:
/etc/init.d/freeradius stop /etc/init.d/freeradius start /etc/init.d/freeradius restart
freeradius是一个Server端的软件,用于做认证服务,包含基础Client端,但这里使用radiusclient(以下);
freeradius可以和mysql整合,加快用户数据读取,以及后续的用户数据更新等操作。
三、freeradius和mysql集成
3.1、创建radius数据库
mysqladmin -uroot -p123456 CREATE radius; #123456是你mysql的root密码。
3.2、导入到radius数据库
注意:admin.sql包含了帐号和密码,切记要修改。
cd /etc/freeradius/sql/mysql mysql -uroot -p123456 < admin.SQL mysql -uroot -p123456 radius < ippool.SQL mysql -uroot -p123456 radius < schema.SQL mysql -uroot -p123456 radius < wimax.SQL mysql -uroot -p123456 radius < cui.SQL mysql -uroot -p123456 radius < nas.SQL
3.3、设定数据库帐号和密码
默认的帐号是radius,密码是radpass
vim /usr/local/etc/freeradius/sql.conf
3.4、启用nas表查询
省略了clients.conf,可以从数据库的nas表读取client。
sed -i 's/\#readclients/readclients/g' /usr/local/etc/freeradius/sql.conf
3.5、打开sql数据库支持
3.5.1 修改主配置文件radiusd.conf
vim /etc/freeradius/radiusd.conf #查找"sql.conf”(683行),去掉#号
3.5.2 修改sites-enabled目录配置文件
vim /etc/freeradius/sites-enabled/default 找到authorize {}模块,注释掉files(152行),去掉sql前的#号(159行)。 找到preacct {}模块,注释掉files(354行)。 找到accounting {}模块,注释掉radutmp(378行),去掉sql前面的#号(388行)。 找到session {}模块,注释掉radutmp(432行),去掉sql前面的#号(436行)。 找到post-auth {}模块,去掉sql前的#号(457行),去掉sql前的#号(545行)。 vim /usr/local/etc/freeradius/sites-enabled/inner-tunnel 找到authorize {}模块,注释掉files(124行),去掉sql前的#号(131行)。 找到session {}模块,注释掉radutmp(251行),去掉sql前面的#号(255行)。 找到post-auth {}模块,去掉sql前的#号(277行),去掉sql前的#号(301行)。
3.5.3 打开在线人数查询支持
查找simul_count_query将279-282行注释去掉
vim /usr/local/etc/freeradius/sql/mysql/dialup.conf
四、radiusclient
radiusclient是一个Client端的软件,连接VPN时就是连接到radiusclient然后再连接freeradius服务器。
1、执行以下命令,不然在连接时会报错,亲测在/var/log/syslog日志中排查确认确实如此
sed -i 's/radius_deadtime/\#radius_deadtime/g' /usr/local/etc/radiusclient/radiusclient.conf sed -i 's/bindaddr/\#bindaddr/g' /usr/local/etc/radiusclient/radiusclient.conf
2、增加一些字典文件,不然Windows客户端连接出错
cat >>/usr/local/etc/radiusclient/dictionary<<EOF INCLUDE /usr/local/etc/radiusclient/dictionary.sip INCLUDE /usr/local/etc/radiusclient/dictionary.ascend INCLUDE /usr/local/etc/radiusclient/dictionary.merit INCLUDE /usr/local/etc/radiusclient/dictionary.compat INCLUDE /usr/local/etc/radiusclient/dictionary.microsoft EOF
3、文件dictionary.microsoft好像不存在,可以自己新建一个,源码如下
vim /usr/local/etc/radiusclient/dictionary.microsoft

# -*- text -*- # # Microsoft's VSA's, from RFC 2548 # # $Id: dictionary.microsoft,v 1.8 2005/08/08 22:23:37 aland Exp $ # VENDOR Microsoft 311 ATTRIBUTE MS-CHAP-Response 1 string Microsoft ATTRIBUTE MS-CHAP-Error 2 string Microsoft ATTRIBUTE MS-CHAP-CPW-1 3 string Microsoft ATTRIBUTE MS-CHAP-CPW-2 4 string Microsoft ATTRIBUTE MS-CHAP-LM-Enc-PW 5 string Microsoft ATTRIBUTE MS-CHAP-NT-Enc-PW 6 string Microsoft ATTRIBUTE MS-MPPE-Encryption-Policy 7 string Microsoft # This is referred to as both singular and plural in the RFC. # Plural seems to make more sense. ATTRIBUTE MS-MPPE-Encryption-Type 8 string Microsoft ATTRIBUTE MS-MPPE-Encryption-Types 8 string Microsoft ATTRIBUTE MS-RAS-Vendor 9 integer Microsoft ATTRIBUTE MS-CHAP-Domain 10 string Microsoft ATTRIBUTE MS-CHAP-Challenge 11 string Microsoft ATTRIBUTE MS-CHAP-MPPE-Keys 12 string Microsoft ATTRIBUTE MS-BAP-Usage 13 integer Microsoft ATTRIBUTE MS-Link-Utilization-Threshold 14 integer Microsoft ATTRIBUTE MS-Link-Drop-Time-Limit 15 integer Microsoft ATTRIBUTE MS-MPPE-Send-Key 16 string Microsoft ATTRIBUTE MS-MPPE-Recv-Key 17 string Microsoft ATTRIBUTE MS-RAS-Version 18 string Microsoft ATTRIBUTE MS-Old-ARAP-Password 19 string Microsoft ATTRIBUTE MS-New-ARAP-Password 20 string Microsoft ATTRIBUTE MS-ARAP-PW-Change-Reason 21 integer Microsoft ATTRIBUTE MS-Filter 22 string Microsoft ATTRIBUTE MS-Acct-Auth-Type 23 integer Microsoft ATTRIBUTE MS-Acct-EAP-Type 24 integer Microsoft ATTRIBUTE MS-CHAP2-Response 25 string Microsoft ATTRIBUTE MS-CHAP2-Success 26 string Microsoft ATTRIBUTE MS-CHAP2-CPW 27 string Microsoft ATTRIBUTE MS-Primary-DNS-Server 28 ipaddr Microsoft ATTRIBUTE MS-Secondary-DNS-Server 29 ipaddr Microsoft ATTRIBUTE MS-Primary-NBNS-Server 30 ipaddr Microsoft ATTRIBUTE MS-Secondary-NBNS-Server 31 ipaddr Microsoft #ATTRIBUTE MS-ARAP-Challenge 33 octets # # Integer Translations # # MS-BAP-Usage Values VALUE MS-BAP-Usage Not-Allowed 0 VALUE MS-BAP-Usage Allowed 1 VALUE MS-BAP-Usage Required 2 # MS-ARAP-Password-Change-Reason Values VALUE MS-ARAP-PW-Change-Reason Just-Change-Password 1 VALUE MS-ARAP-PW-Change-Reason Expired-Password 2 VALUE MS-ARAP-PW-Change-Reason Admin-Requires-Password-Change 3 VALUE MS-ARAP-PW-Change-Reason Password-Too-Short 4 # MS-Acct-Auth-Type Values VALUE MS-Acct-Auth-Type PAP 1 VALUE MS-Acct-Auth-Type CHAP 2 VALUE MS-Acct-Auth-Type MS-CHAP-1 3 VALUE MS-Acct-Auth-Type MS-CHAP-2 4 VALUE MS-Acct-Auth-Type EAP 5 # MS-Acct-EAP-Type Values VALUE MS-Acct-EAP-Type MD5 4 VALUE MS-Acct-EAP-Type OTP 5 VALUE MS-Acct-EAP-Type Generic-Token-Card 6 VALUE MS-Acct-EAP-Type TLS 13
这个网站上有https://github.com/ates/radius/blob/master/priv/dictionary.microsoft
4、注释掉dictionary文件里ipv6相关的行
sed -i '/ipv6/s/^/#/' /usr/local/etc/radiusclient/dictionary
5、修改servers文件
vim /usr/local/etc/radiusclient/servers
在最后新增一行
SERVER_IP testing123
其中SERVER_IP 是你的服务器IP
testing123是radiusclient和freeradius通信密钥
6、在radiusclient.conf文件中配置freeradius相关信息
vim /usr/local/etc/radiusclient/radiusclient.conf
指定freeRadius服务器的IP,将SERVER_IP改为你的服务器IP地址:
authserver SERVER_IP
acctserver SERVER_IP
指定连接到服务器的配置文件目录:
servers /usr/local/etc/radiusclient/servers
五、用户权限管理
# 连接mysql使用radius数据库
mysql -uroot -p123456
mysql> USE radius;
# 添加用户demo,密码为demo并且加入"user"用户组,注意是在radcheck、radusergroup表。
mysql> INSERT INTO radcheck (username,attribute,op,VALUE) VALUES ('demo','Password',':=','demo'); mysql> INSERT INTO radusergroup (username,groupname) VALUES ('demo','user');
# 限制同时登陆次数,注意是在radgroupcheck表
mysql> INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('normal','Simultaneous-Use',':=','1');
# 测试是否生效
freeradiusd -X # 注意查看这里出现的IP地址有没有你的公网IP,以及记住其所使用的端口1812 # radtest USERNAME PASSWORD SERVER_IP PORT radtest和freeradius的通信密钥(默认是testing123) radtest demo demo 公网IP 1812 testing123
如果出现ACCESS字样就是说两者通信成功了
重启下freeradius服务后就可以连接了
/etc/init.d/freeradius restart
六、查看日志以及排错
排错是很关键的一步,因为很可能不能一步到位完美登录。
日志:
/var/log/syslog 这个日志记录登录时的请求,以及出错的原因,很多时候都是配置文件的问题
/var/log/auth.log 这个日志应该有所帮助
/var/log/freeradius/radius.log 这个文件是freeradius的日志
参考博文:
1、VPN流量控制技术:PPTP/L2TP + FreeRADIUS + MySQL 安装与配置 作者:骑着老虎闯天涯
2、Linux平台下搭建freeRADIUS集成MySQL并整合*** 作者:Dhfijk
posted on 2018-06-17 19:59 FA-learning 阅读(3436) 评论(0) 编辑 收藏 举报