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..tar.gz
cd freeradius-client-1.1.
./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./radius.so
radius-config-file /usr/local/etc/radiusclient/radiusclient.conf

基本文本数据的本地测试(选做)

测试是否安装成功,如果不需要与mysql集成,那么就已安装完成。

vim /etc/freeradius/users
查找 steve Cleartext-Password := "testing" (-84行), 取消该段内容的注释。

#大写X,意思是以debug模式运行。freeradiux -X 启动测试服务器,这时会占住一个终端,ctrl+c关闭。

freeradius -X 

#新开一个窗口执行,看到"Access-Accept packet"就成功了。

radtest steve testing localhost  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
#
# $Id: dictionary.microsoft,v 1.8 // :: aland Exp $
# VENDOR Microsoft ATTRIBUTE MS-CHAP-Response string Microsoft
ATTRIBUTE MS-CHAP-Error string Microsoft
ATTRIBUTE MS-CHAP-CPW- string Microsoft
ATTRIBUTE MS-CHAP-CPW- string Microsoft
ATTRIBUTE MS-CHAP-LM-Enc-PW string Microsoft
ATTRIBUTE MS-CHAP-NT-Enc-PW string Microsoft
ATTRIBUTE MS-MPPE-Encryption-Policy 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 string Microsoft
ATTRIBUTE MS-MPPE-Encryption-Types string Microsoft
ATTRIBUTE MS-RAS-Vendor integer Microsoft
ATTRIBUTE MS-CHAP-Domain string Microsoft
ATTRIBUTE MS-CHAP-Challenge string Microsoft
ATTRIBUTE MS-CHAP-MPPE-Keys string Microsoft
ATTRIBUTE MS-BAP-Usage integer Microsoft
ATTRIBUTE MS-Link-Utilization-Threshold integer Microsoft
ATTRIBUTE MS-Link-Drop-Time-Limit integer Microsoft
ATTRIBUTE MS-MPPE-Send-Key string Microsoft
ATTRIBUTE MS-MPPE-Recv-Key string Microsoft
ATTRIBUTE MS-RAS-Version string Microsoft
ATTRIBUTE MS-Old-ARAP-Password string Microsoft
ATTRIBUTE MS-New-ARAP-Password string Microsoft
ATTRIBUTE MS-ARAP-PW-Change-Reason integer Microsoft ATTRIBUTE MS-Filter string Microsoft
ATTRIBUTE MS-Acct-Auth-Type integer Microsoft
ATTRIBUTE MS-Acct-EAP-Type integer Microsoft ATTRIBUTE MS-CHAP2-Response string Microsoft
ATTRIBUTE MS-CHAP2-Success string Microsoft
ATTRIBUTE MS-CHAP2-CPW string Microsoft ATTRIBUTE MS-Primary-DNS-Server ipaddr Microsoft
ATTRIBUTE MS-Secondary-DNS-Server ipaddr Microsoft
ATTRIBUTE MS-Primary-NBNS-Server ipaddr Microsoft
ATTRIBUTE MS-Secondary-NBNS-Server ipaddr Microsoft #ATTRIBUTE MS-ARAP-Challenge octets #
# Integer Translations
# # MS-BAP-Usage Values VALUE MS-BAP-Usage Not-Allowed
VALUE MS-BAP-Usage Allowed
VALUE MS-BAP-Usage Required # MS-ARAP-Password-Change-Reason Values VALUE MS-ARAP-PW-Change-Reason Just-Change-Password
VALUE MS-ARAP-PW-Change-Reason Expired-Password
VALUE MS-ARAP-PW-Change-Reason Admin-Requires-Password-Change
VALUE MS-ARAP-PW-Change-Reason Password-Too-Short # MS-Acct-Auth-Type Values VALUE MS-Acct-Auth-Type PAP
VALUE MS-Acct-Auth-Type CHAP
VALUE MS-Acct-Auth-Type MS-CHAP-
VALUE MS-Acct-Auth-Type MS-CHAP-
VALUE MS-Acct-Auth-Type EAP # MS-Acct-EAP-Type Values VALUE MS-Acct-EAP-Type MD5
VALUE MS-Acct-EAP-Type OTP
VALUE MS-Acct-EAP-Type Generic-Token-Card
VALUE MS-Acct-EAP-Type TLS

dictionary.microsoft

这个网站上有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',':=','');

# 测试是否生效 

freeradiusd -X
# 注意查看这里出现的IP地址有没有你的公网IP,以及记住其所使用的端口1812
# radtest USERNAME PASSWORD SERVER_IP PORT radtest和freeradius的通信密钥(默认是testing123)
radtest demo demo 公网IP 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

freeradius+xl2tp+mysql整合的更多相关文章

  1. 大数据工具篇之Hive与MySQL整合完整教程

    大数据工具篇之Hive与MySQL整合完整教程 一.引言 Hive元数据存储可以放到RDBMS数据库中,本文以Hive与MySQL数据库的整合为目标,详细说明Hive与MySQL的整合方法. 二.安装 ...

  2. Hive+Sqoop+Mysql整合

    Hive+Sqoop+Mysql整合 在本文中,LZ随意想到了一个场景: 车,道路,监控,摄像头 即当一辆车在道路上面行驶的时候,道路上面的监控点里面的摄像头就会对车进行数据采集. 我们对采集的数据进 ...

  3. spring+mybatis+oracle/mysql整合开发需要的jar包详解

    导入spring,mybatis,c3p0,oracle和mybatis提供的与spring整合的插件包   mysql的jar:         mysql-connector-java-5.1.7 ...

  4. solr + tomcat + mysql整合

    上一次分享了solr+tomcat的整合 学习就是要一步一步的进行才有趣 所以这次给大家分享solr+tomcat+mysql 一.准备工作 1.一张带数据的数据库表(我用的是这张叫merchant的 ...

  5. freeradius连接mysql数据库慢

    [环境说明] 服务器版本         redHat5.3 mysql版本         MySQL5.6.22 freeradius版本   2.1.12 [问题描述] 配置好freeradiu ...

  6. Vs2017 NetCode Mvc EF Mysql 整合2

    1 NetCode EF整合 代码 3  源代码 https://github.com/chxl800/EFMysqlDemo 1.1 项目文件结构 1.2 NuGet  MySql.Data.Ent ...

  7. LAMP_03_Win下Apache+PHP+MySQL整合

    文件: Apache :  首先修改Apache的配置文件,让Apache支持解析PHP文件.Apache配置文件在Apache安装目录的conf目录下的httpd.conf.1. 让Apache可以 ...

  8. spring与mysql整合数据源的配置

    需要解决两点,数据源的配置交给spring完成,事务管理交个spring来管理. <context:property-placeholder location="classpath:c ...

  9. SpringMVC+Spring+Hibernate+Maven+mysql整合

    一.准备工作 1.工具:jdk1.7.0_80(64)+tomcat7.0.68+myeclipse10.6+mysql-5.5.48-win322. 开发环境安装配置.Maven项目创建(参考:ht ...

随机推荐

  1. php读取大文件如日志文件

    需求如下: 现有一个1G左右的日志文件,大约有500多万行, 用php返回最后几行的内容. 1. 直接采用file函数来操作 or file_get_content() 肯定报内存溢出注: 由于 fi ...

  2. awk 截取某段时间的日志

    好久没有截取nginx/haproxy 中 的日志了,竟有点不熟悉了. 记录一下,以免以后忘记. NGINX 日志格式: 192.168.1.26 - - [14/Sep/2017:16:48:42 ...

  3. [BZOJ 4573][ZJOI 2016]大森林

    [LOJ 2092][BZOJ 4573][UOJ 195][ZJOI 2016]大森林 题意 给定一个树序列, 初始时所有树都只有一个点, 要求支持三种操作: 区间种树(在某个特定点上长出一个子结点 ...

  4. Mysql中的char与varchar length()与char_length()

    在mysql中,char和varchar都表示字符串类型.但他们存储和检索数据的方式并不相同. 在表结构定义中声明char和varchar类型时,必须指定字符串的长度.也就是该列所能存储多少个字符(不 ...

  5. myeclipse解决JSP文件里script背景颜色的调整

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/UP19910522/article/details/27971401 1导入MyEclipse的主题 ...

  6. 【Java虚拟机结构(第1部分)数据类型】摘要

    <Java虚拟机规范(Java SE 7版)>作者:Tim Lindholm.Frank Yellin.Gilad Bracha.Alex Buckley 摘要:第二章 Java虚拟机结构 ...

  7. 【[HNOI2015]亚瑟王】

    神仙题,抄题解 用\(tp_i\)表示\(i\)这个技能在\(r\)轮中被使用过的概率 于是最后的答案就是\(\sum_{i=1}^nd_i*tp_i\) 首先\(tp_1=1-(1-p_1)^r\) ...

  8. [19/04/20-星期六] Java的动态性_字节码操作(Javassist类库(jar包),assist:帮助、援助)

    一.概念 [基本] /** * */ package cn.sxt.jvm; import javassist.ClassPool; import javassist.CtClass; import ...

  9. 在 S5PV210 的 开发板上 使用 串口 收发信息

    参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用  xshell 工具 连接 开发板  ,winscp 工具 连接 开发板  ,  准 ...

  10. cocos2d-x 3.x 物理碰撞机制

    近期又弄了物理引擎.写一下吧,以下有在其它博客学习到的知识.加上自己的理解,总结下. cocos2d-x 3.X 中全新的封装的物理引擎给了开发人员最大的便捷,你不用再繁琐与各种物理引擎的细节,全然的 ...