centos5.4环境下openvpn+mysql+freeradius+daloradius+bigfish 的配置
山西 :左脑
2010年元月奉献,我女儿出生快两个月了,在她的哭啼声中,完成了以下工作。做此工作主要是用来解决我校内网的资源通过VPN可以让外网用户访问。
freeradius研究了一段时间,很好的东西,计划做完这个,用它来做数据整合的研究。
以下是我的总结:(大部分不是原创,只是在前辈的基础上加以总结和修改,阿涛的文章我引用了很多,希望不要介意)
一、软件准备:(centos5.4系统的安装按照以下步骤做,其他软件在这里只是做一个介绍,不用下载,下面的安装里会介绍)
centos5.4:(网络安装,采用net-install光盘)(安装时只安装必要的软件,我只选择了BASE)
1、将光盘放入光驱,引导系统)出现安装界面后输入,linux text
2、安装方式采用HTTP
3、配置你的网卡地址
4、地址:mirrors.sohu.com
5、文件位置centos/5.4/os/i386
6、开始安装(由于是网络安装,期间视网络速度,需要等待时间)
7、接下来就是安装一般方式安装(大家应该都会,不会就别玩LINUX了)
openvpn : openvpn-2.0.9.tar.gz
mysql:系统自带的通过yum 安装(不要着急,后面我们还要升级成最新版)
freeradius:freeradius-1.1.7.tar.gz
daloradius:daloradius-0.9-8.tar.gz(一个非常优秀的radius WEB管理程序)
LZO:lzo-2.02.tar.gz(支持openvpn的压缩功能)
RadiusPlugin:radiusplugin_v2.0b_beta2.tar.gz (freeradius插件)
二、
1、更新系统内核到最新.
yum -y update
系统更新后,如果yum安装时提示错误信息,请执行以下命令修复.
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY*
2、安装必要的编译环境
(安装GCC编译环境) yum install gcc
(安装GCC++编译环境)yum install gcc-c++
3、 安装Apahce, PHP, Mysql, 以及php连接mysql库组件
yum -y install httpd php mysql mysql-server php-mysql httpd-manual mod_ssl mod_perl mod_auth_mysql php-mcrypt php-gd
php-xml php-mbstring php-ldap php-pear php-xmlrpc mysql-connector-odbc mysql-devel libdbi-dbd-mysql
4、mysqladmin -u root password ‘新密码’ [引号内填密码]
5、这里参考《阿涛的博客》安装freeradius
(1)、编译安装freeradius
下载文件包:
wget
解压文件包:
tar zxvf freeradius-1.1.7.tar.gz
cd freeradius-1.1.7
编译文件包:
./configure
cp libltdl/ltdl.h src/include/
make
make install
注释:如果没有cp libltdl/ltdl.h src/include/ 在make的时候会有2个错误,应该是路径的问题
(2)、
vi /etc/ld.so.conf
加入以下:
/usr/local/lib
ldconfig
(3)、构建radius数据库(建立相关用户和密码)
mysql –uroot –p
创建radius数据库:
mysql>create database radius;
mysql>GRANT ALL PRIVILEGES ON radius.* TO radius@localhost IDENTIFIED BY 'radius的密码';
mysql>\q
cd /usr/local/src/freeradius-1.1.7
导入数据库:
/usr/local/mysql/bin/mysql -uroot -pXXXX radius < ./doc/examples/mysql.sql
(4)、配置radiusd.conf以及sql.conf
vi /usr/local/etc/raddb/radiusd.conf
proxy_requests = no
authorize {
preprocess
chap
mschap
suffix
eap
sql
# pap
# files
}
注释:使用sql,authorize中的file必须被注释掉。
preacct {
preprocess
acct_unique
suffix
# files
}
accounting {
detail
unix
radutmp
sql
}
(5)sql.conf配置
vi /usr/local/etc/raddb/sql.conf
driver = "rlm_sql_mysql"
server = "localhost"
login = "radius"
password = "radius密码"
radius_db = "radius"
配置NAS信息:
vi /usr/local/etc/raddb/clients.conf
#本地帐号,用于测试
client 127.0.0.1 {
secret = testing123
shortname = localhost
nastype = other
}
注释:
secret 这里是针对client 127.0.0.1通讯密匙
#mysql -u root -p
mysql> use radius;
建立组信息:
mysql> insert into radgroupreply (groupname,attribute,op,value) values ('user','Auth-Type',':=','Local');
mysql> insert into radgroupreply (groupname,attribute,op,value) values ('user','Service-Type',':=','Framed-User');
mysql> insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-
Address',':=','255.255.255.255');
mysql> insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-
Netmask',':=','255.255.255.0');
建立用户信息:
mysql> insert into radcheck (username,attribute,op,value) values ('test','User-Password',':=','test');
mysql> insert into radcheck (username,attribute,op,value) values ('sense','User-Password',':=','123456');
将用户加入组中:
mysql> insert into usergroup (username,groupname) values ('test','user');
(6)、测试radius
radiusd –x &
这个时候控制台会被占用
另开一个控制台进行测试
ln -s /usr/local/bin/radtest /sbin/radtest
/sbin/radtest test test localhost 0 testing123
如显示以下内容说明freeradius-mysql工作正常:
Sending Access-Request of id 204 to 127.0.0.1 port 1812
User-Name = "test"
User-Password = "test"
NAS-IP-Address = 255.255.255.255
NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=204, length=38
Service-Type = Framed-User
Framed-IP-Address = 255.255.255.255
Framed-IP-Netmask = 255.255.255.0
如显示以下内容说明freeradius-mysql工作正常:
/sbin/radtest sense 123456 localhost 0 testing123
Sending Access-Request of id 212 to 127.0.0.1 port 1812
User-Name = "sense"
User-Password = "123456"
NAS-IP-Address = 255.255.255.255
NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=212, length=20
由于test加入了组所以信息量多一点
以上测试说明freeradius-mysql工作正常!
说明(freeradius\rlm_sql_mysql.so\mysql\)正常!
6、安装openvpn及lzo
(1)、lzo
wget
tar zxvf lzo-2.02.tar.gz
cd lzo-2.02
./configure
make
make install
这一部分是支持openvpn的压缩功能
(2)、openvpn
查看是否安装必要的软件,如没有请通过YUM 安装
rpm -aq|grep openssl
openssl-devel-0.9.8b-8.3.el5
openssl-0.9.8b-8.3.el5
cd /usr/local/src
下载软件包
wget
解压软件包
tar zxvf openvpn-2.0.9.tar.gz
cd openvpn-2.0.9
编译软件包:
./configure --prefix=/usr/local/openvpn --with-lzo-headers=/usr/local/include/lzo \
--with-lzo-lib=/usr/local/lib --with-ssl-headers=/usr/include/openssl \
--with-ssl-lib=/usr/lib
make
make install
(3)、生成密匙
cd /usr/local/src/openvpn-2.0.9
cp -rf ./easy-rsa/ /usr/local/openvpn/
cd /usr/local/openvpn/easy-rsa/2.0
source ./vars
./clean-all
./build-ca
./build-key-server server
./build-dh
./build-key cl1
cd keys
/usr/local/openvpn/sbin/openvpn --genkey --secret ta.key
cd /usr/local/openvpn
mkdir ssl
cp -a ./easy-rsa/2.0/keys/ca.crt ./ssl/
cp -a ./easy-rsa/2.0/keys/dh1024.pem ./ssl/
cp -a ./easy-rsa/2.0/keys/ta.key ./ssl/
cp -a ./easy-rsa/2.0/keys/server.crt ./ssl/
cp -a ./easy-rsa/2.0/keys/server.key ./ssl/
7、安装RadiusPlugin
(1)、安装
cd /usr/local/src/
wget wget
tar zxvf radiusplugin_v2.0b_beta2.tar.gz
cd radiusplugin_v2.0b_beta2
make
cp /usr/local/src/radiusplugin_v2.0b_beta2/radiusplugin.so /usr/local/openvpn/
cp /usr/local/src/radiusplugin_v2.0b_beta2/radiusplugin.cnf /usr/local/openvpn/
vi /usr/local/openvpn/radiusplugin.cnf
(2)、配置radiusplusin插件的配置文件radiusplugin.cnf
# The NAS identifier which is sent to the RADIUS server
NAS-Identifier=OpenVpn
# The service type which is sent to the RADIUS server
Service-Type=5
# The framed protocol which is sent to the RADIUS server
Framed-Protocol=1
# The NAS port type which is sent to the RADIUS server
NAS-Port-Type=5
# The NAS IP address which is sent to the RADIUS server
NAS-IP-Address=127.0.0.1
# Path to the OpenVPN configfile. The plugin searches there for
# client-config-dir PATH (searches for the path)
# status FILE (searches for the file, version must be 1)
# client-cert-not-required (if the option is used or not)
# username-as-common-name (if the option is used or not)
OpenVPNConfig=/usr/local/openvpn/server.conf (OPENVPN的安装位置)
# Support for topology option in OpenVPN 2.1
# If you don't specify anything, option "net30" (default in OpenVPN) is used.
# You can only use one of the options at the same time.
# If you use topology option "subnet", fill in the right netmask, e.g. from OpenVPN option "--server NETWORK
NETMASK"
#subnet=255.255.255.0
# If you use topology option "p2p", fill in the right network, e.g. from OpenVPN option "--server NETWORK NETMASK"
#p2p=10.10.0.1
####################### Ich benutze die Default Option
# Allows the plugin to overwrite the client config in client config file directory,
# default is true
overwriteccfiles=true
# Path to a script for vendor specific attributes.
# Leave it out if you don't use an own script.
# vsascript=/root/workspace/radiusplugin_v2.0.5_beta/vsascript.pl
# Path to the pipe for communication with the vsascript.
# Leave it out if you don't use an own script.
# vsanamedpipe=/tmp/vsapipe
# A radius server definition, there could be more than one.
# The priority of the server depends on the order in this file. The first one has the highest priority.
server
{
# The UDP port for radius accounting.
acctport=1813
# The UDP port for radius authentication.
authport=1812
# The name or ip address of the radius server.
name=127.0.0.1
# How many times should the plugin send the if there is no response?
retry=1
# How long should the plugin wait for a response?
wait=1
# The shared secret.
sharedsecret= testing123
}
注释:这里的sharedsecret= testing123跟radiusd的设置相关,注意/usr/local/etc/raddb/clients.conf中的client 127.0.0.1
的设置,(这个clients.conf是调用radius的客户端配置)
client 127.0.0.1 {
secret = testing123
shortname = localhost
nastype = other
}
同时重要的是要在正式应用的时候 同时修改这2个地方的testing123,这个就是radius的密匙
(3)、配置openvpn的服务器设置文件server.conf
cp /usr/local/src/openvpn-2.0.9/sample-config-files/server.conf /usr/local/openvpn/server.conf
vi /usr/local/openvpn/server.conf
注释:注意这里的server.conf要与/usr/local/openvpn/radiusplugin.cnf中OpenVPNConfig的设置一致
这里的openvpn服务器端可以有多个配置文件,每一个配置等于开启了一个单独的vpn服务,但是要单独设置每个服务器端配置文
件./build-key-server ser*** 同时不同的客户端./build-key cl1*** 对应于相应 ser****的unit name,同时客户端要拷贝不同的
ser***.crt
注意这里的通讯协议和OPENVPN-GUI得通讯协议要一致(proto udp)
port 1194
proto udp
# Which device
dev tun
user nobody
group nogroup
persist-tun
persist-key
server 100.100.0.0 255.255.0.0
float
username-as-common-name
client-cert-not-required
client-to-client
ping-timer-rem
keepalive 10 120
comp-lzo
tls-server
tls-auth ssl/ta.key 0
dh ssl/dh1024.pem
ca ssl/ca.crt
cert ssl/server.crt
key ssl/server.key
max-clients 200
plugin /usr/local/openvpn/radiusplugin.so /usr/local/openvpn/radiusplugin.cnf
verb 3
mute 10
status /var/log/openvpn/status.log 1
log /var/log/openvpn/openvpn.log
(4)、建两个文件
mkdir /usr/local/openvpn/ccd
mkdir /var/log/openvpn
(5)、创建用户组
groupadd nogroup
(6)、创建用户
useradd nobody(是阿涛文章中没有提到的,所以大部分人在启动OPENVPN时要报错)
(7)、建立openvpn的shell执行脚本
cp /usr/local/src/openvpn-2.0.9/sample-scripts/openvpn.init /etc/init.d/
ln -s /usr/local/openvpn/sbin/openvpn /usr/sbin/openvpn
vi /etc/init.d/openvpn.init
修改:work=/usr/local/openvpn
(8)、启动openvpn
/etc/init.d/openvpn.init start
这个时候要看一下 ifconfig 有没有 tun0设备,如果有就基本ok了!
8、windows下client.opvn客户端配置文件:(这里需要做个补充,您需要把ca.key、ca.crt、ta.key下载到客户端OPENVPN安装目录下的CONFIG下)
注意这里的通讯协议和SERVER端的通讯协议要一致(proto udp)
client
;dev tap
dev tun
proto udp
remote 192.168.0.100 1194
;remote my-server-2 1194
remote-random
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
auth-user-pass
ns-cert-type server
tls-auth ta.key 1
route 0.0.0.0 0.0.0.0 //(这里根据自己的实际情况设置,意思就是你要让什么网段的数据包通过VPN)
comp-lzo
verb 3
mute 10
9、用SETUP 设置开机启动服务 httpd、mysqld
10、在/etc/rc.d/rc.local
添加(让radius和OPENVPN开机启动):
/usr/local/sbin/radiusd -x &
/usr/sbin/openvpn
11、升级MYSQL、php(这步是为后面安装Daloradius 做准备,应为Daloradius 需要的插件比较多,通过YUM升级方便一些)
rpm --import
# /etc/yum.repos.d/utterramblings.repo
把以下内容添加进去,保存退出就OK了
[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=
enabled=1
gpgcheck=1
gpgkey=
yum update php*
yum update mysql*
yum install php-pear-DB
yum install php-mcrypt
yum install php-mbstring
12、重新启动计算机
13、安裝 Daloradius
wget
#tar zxvf daloradius-0.9-8.tar.gz
#cp -R daloradius-0.9-8 /var/www
设定 Daloradius
#chown -R apache:apache /var/www/daloradius-0.9-8
#chmod 644 /var/www/daloradius-0.9-8/library/daloradius.conf.php
在radius数据库中加入daloradius的表.
#mysql -u root -p radius < /var/www/daloradius-0.9-8/contrib/db/mysql-daloradius.sql
设定 daloradius.conf.php
#vi /var/www/daloradius-0.9-8/library/daloradius.conf
$configValues['FREERADIUS_VERSION'] = '1';
$configValues['CONFIG_DB_ENGINE'] = 'mysql';
$configValues['CONFIG_DB_HOST'] = '127.0.0.1';
$configValues['CONFIG_DB_USER'] = 'radius'; --> radius用户名
$configValues['CONFIG_DB_PASS'] = 'radpass'; --> radius密码
$configValues['CONFIG_DB_NAME'] = 'radius'; --> radius数据库
在apache2 加虚拟目录( Alias )
#vi /etc/apache2/apache2.conf
在apache2.conf 中加入以下.
==================================================================
Alias /myradius "/var/www/daloradius-0.9-8/"
Options None
order deny,allow
allow from all
重新启动HTTPD:service httpd restart
用戶: administrator
密碼: radius
14、关于IPTABLES的配置网上有很多教程,大家可以参考,在这里不再阐述
总结:说实话我按照网上的教程搞了3天,总是不行,最后只能自己分析原理来配置,如阿涛一文中的OPENVPN的启动,就是因为没有nogroup组而启动失败,在安装Daloradius时老提示没有DB.PHP,其实是没有安装php-pear-DB这个包。
本文觉大部分是总结或者是摘录了前辈们的东西,只是自己整理了一下,供各位像我一样的菜鸟参考。
如有疑问可以Q我:19935284 注明:OPENVPN
接下来的工作:
1、计划重新编译定制OPENVPN客户端(等出来了我把工程文件共享出来)
2、目前正在进行的工作是:汉化Daloradius(等完工一定给大家共享)
做个补充:
关于IPTABLES的管理与设置可以用基于WEB的开源IPTABLES WEB管理软件bigfish
里面有安装文档,大家可以自己看,很简单
阅读(5791) | 评论(0) | 转发(0) |