昨天分享了自己在Ubuntu下搭建L2TP VPN服务器的历程,并贴出了自己测试运行的效果图片,这个比较适合个人购买服务器搭建VPN。但是搭建VPN后,无法实现AAA功能,管理账号也是利用文件。为此,选择搭建freeRADIUS同时与MySQL整合,同样选择Ubuntu平台。闲话少说 ,就是干.......
1)部署freeradius服务器
@1主要文件作用:
radiusd.conf 和sql.conf 作用为radius与mysql 接连,client.conf 是NAS 和freeradius 服务连接用的
@2 安装
a)初始化机器环境,安装必备的服务器软件
#sudo -i //获得root权限 #apt-get install mysql freeradius freeradius-mysql freeradius-utils
由于我使用的是apt安装的freeRadius,所以radiusd不能使用,应该用以下方法解决:
sudo ln -s freeradius radiusd
随后便可以使用radiusd -X.
b)安装完freeradius后,对其进行测试
打开其users文件,并添加用户
# vi /etc/freeradius/users
图 1: 配置users
将users文件中的steve项反注释掉,同时,将添加另外一项测试账号(自定义):
User:Dhfijk Password:XXXXXX
@3 测试服务器 radiusd -X
当测试radiusd -X,使用radtest steve testing localhost 1812 testing123进行测试时,出现Failed to find IP address for zhantengfei-vpn,这时需要将主机名加入文件 /etc/hosts,添加:127.0.0.1 dhfijk-vpn
这时,有可能遇到以下问题:
a)客户端测试出现:client no response ......
b)服务器测试窗口出现:Listen to the unknown client 172.16.0.61(本机外网IP)....
这时需要对client.conf文件进行相关配置,修改客户端信息,将freeRadius服务器IP写入
图 2: 配置client.conf
并在 /etc/hosts文件中配置 IP和主机名:
图 3: 配置hosts
使用radiusd -X进入调试模式测试,启动 radiusd 时可能会出现如下错误
Failed binding to authentication address *port 1812:Address already in use
用命令lsof -i:1812查看占用进程,一般就是freeradius本身,kill -9 PID强制终止该进程,或者sudo service freeradius stop,然后重新运行命令radiusd -X(或者freeradius -X)便可以运行服务程序了
图4 : radiusd -X
另外开一个终端窗口,作为客户端使用,进行测试,输入以下语句
radtest 账号 密码 localhost 0 testing123(对应填写在users文件中自定义的userName和passWord)
其中,localhost是客户端的IP,0是客户端向服务端发送数据包的端口号,testing123是通信密码secret
图5:Access-Accept服务器响应
在客户端添加连接radius服务器的地址和密码
/usr/local/radius-client/etc/radiusclient/servers
加入:freeradius server IP testing123
添加字典,让其支持Windows客户端,在dictionary文件最后添加以下字典:
# vim /etc/radiusclient/dictionary
INCLUDE /etc/radiusclient/dictionary.microsoft
INCLUDE /etc/radiusclient/dictionary.ascend
INCLUDE /etc/radiusclient/dictionary.merit
INCLUDE /etc/radiusclient/dictionary.compat
INCLUDE /etc/radiusclient/dictionary.sip
2)集成Mysql
@1 安装MySQL服务端和客户端
apt-get install mysql-server mysql-client
安装过程中根据提示,设置root用户以及对应的登录密码,并以设定的用户名和密码登录 MySQL -u root -p ,为了使freeRadius连接到MySQL数据库,将用户信息记录在数据库,必须在相应的配置文件中进行相关配置,具体配置流程如下。
1 首先配置freeRadius核心配置文件radiusd.conf
vim /etc/freeradius/radiusd.conf
将$INCLUDE sql.conf进行反注释,去掉#
2 修改配置文件sql.conf
vim /etc/freeradius/sql.conf
此配置文件包含了访问的数据库的用户名和密码,也包含了数据库服务器的IP地址,以及各种默认的表的信息。操作总可以使用默认值,若想自己定义,便修改相应的项,但必须保持一致。
图 6 sql.conf配置文件
默认的数据库名为MySQL,服务器为localhost,及数据库服务器地址,同时指定了默认的登录“radius”和登录密码“radpass”在此文件中反注释掉以下信息。
取消readclients = yes 和 nas_table = "nas"行表示freeRadius可以在radius数据库中的nas表中加载client,可以不在client.conf中读取NAS信息。
在以上操作中集成MySQL时,可能遇到这个问题,如果将sql.conf文件中的server改成MySQL服务器对应的ip地址,将报告一下错误
couldn‘t connect socket to MySQL server [email protected]:radius
应该维持原来的localhost,因为MySQL Server 与freeRadius Server在同一机器上,即指代本机地址即可。
3 修改default文件,开启AAA功能
vim /etc/freeradius/sites-available/default
authorize { ...... Sql 取消掉sql行的#注释,反注释之 ...... } accounting { ..... sql ...... } session { ...... } post-auth { ....... }
4 用户信息管理
:~# mysql -u root -p mysql>create database radius; mysql> use radius;
将存储用户必要的表到收入radius数据库:
mysql> source /etc/freeradius/sql/mysql/admin.sql
(建立radius对应的用户名和密码,并赋予所有权限,以下导入的sql文件作用类似)
mysql> source /etc/freeradius/sql/mysql/ippool.sql mysql> source /etc/freeradius/sql/mysql/cui.sql mysql> source /etc/freeradius/sql/mysql/nas.sql mysql> source /etc/freeradius/sql/mysql/wimax.sql mysql> source /etc/freeradius/sql/mysql/schema.sql
导入后可以查看以下radius数据库中的表项mysql>show tables;
图 7 存储用户信息的radius数据库表项
5 添加用户信息
在radius数据库的表现中加入用户组以及隶属于用户组的用户名和登录密码,以及用户的各项相关信息。
@1在radgroupreply表中建立名为user的用户组,并制定该组的相关属性信息
insert into radgroupreply (groupname,attribute,op,value) values (‘user‘,‘Auth-Type‘,‘:=‘,‘Local‘); 加入Auth-Type属性 insert into radgroupreply (groupname,attribute,op,value) values (‘user‘,‘Service-Type‘,‘:=‘,‘Framed-User‘); 加入‘Service-Type‘属性 insert into radgroupreply (groupname,attribute,op,value) values (‘user‘,‘Framed-IP-Address‘,‘:=‘,‘255.255.255.255‘); 加入Framed-IP-Address属性 insert into radgroupreply (groupname,attribute,op,value) values (‘user‘,‘Framed-IP-Netmask‘,‘:=‘,‘255.255.255.0‘); 加入Framed-IP-Netmask属性,PPP通信的掩码不限
@2 在radcheck表中加入用户dhfijk
insert into radcheck (username,attribute,op,value) values (‘dhfijk‘,‘Cleartext-Password‘,‘:=‘,‘xxxxxx‘);xxxxxx
@3 将用户与所属组进行关联
insert into radusergroup (username,groupname) values (‘dhfijk‘,‘user‘);
将dhfijk用户加入到所属的user组
6 进行远程测试
当用户在client.conf中时,进行测试
:~# radtest steve testing 172.25.11.224 1812 testing123
图 8 远程测试RADIUS验证功能(1)
远程测试回应请求为Access-Accept,表明从172.25.11.223发给172.25.11.224的数据包通过了172.25.11.224主机上的freeRadius服务器的验证。
当用户在MySQL数据库中时,进行测试
:~# radtest dhfijk xxxxxx 172.25.11.224 1812 testing123
图 8 远程测试RADIUS验证功能(2)
远程测试回应请求为Access-Accept,表明从172.25.11.223发给172.25.11.224的数据包通过了172.25.11.224主机上的freeRadius服务器的验证。
以上验证结果会在radius数据库中的radpostauth表中
图 9 远程测试RADIUS验证记录
以上测试结果证明,L2TP VPN服务器所在主机上的radiusClient与freeRadiusServer的通信是正常的,并且freeRadius与MySQL集成是成功的。
3)集成L2TP服务器
1 修改options.xl2tp配置文件
vim /etc/ppp/options.xl2tp
在L2TP配置文件中加入
plugin /usr/lib/pppd/2.4.5/radius.so plugin /usr/lib/pppd/2.4.5/radattr.so radius-config-file /etc/radiusclient/radiusclient.conf
这几行配置代码作用便是在客户端向VPN服务器发起连接时,将转向认证服务器,通过认证后才连接。
2 修改servers配置文件
vim /etc/radiusclient/servers
图 10 radiusClient的radiusServer配置
以上servers配置文件中172.25.11.224为freeRadius服务器IP地址,testing123为默认的radiusClient与radiusServer的通信秘钥。
3 修改相关配置文件,添加字典,支持Windows客户端
cd /usr/share/freeradius/ cp * /etc/radiusclient/将该目录下的dictinary文件复制到radiusClient目录下。
同时将该目录下的dictionary文件末尾添加INCLUDE信息
vim /etc/radiusclient/dictionary
添加:
INCLUDE /etc/radiusclient/dictionary. INCLUDE /etc/radiusclient/ INCLUDE /etc/radiusclient/dictionary. INCLUDE /etc/radiusclient/dictionary. INCLUDE /etc/radiusclient/dictionary.sip(省略此句不异影响)
4 配置radiusClient.conf
在radiusclient.conf文件中配置radiusServer相关信息。
图 11 配置radiusClient端的radius服务器信息
指定freeRadius服务器的IP和端口:
authserver 172.25.11.224:1812 acctserver 172.25.11.224:1813
指定服务器配置文件位置:
servers /etc/radiusclient/servers
同时需注意dictionary的路径。
到这里,操作基本就完成了,可以尝试对系统进行测试,以上内容是在上一篇内容成功的基础上进行操作,如果你想搭建VPN系统,请先阅读上篇内容并实验。