LINUX下PPPoe+Freeradius+Mysql配置
Written by Openking on 2013-4-22
一:配置环境及准备
1、系统
(1)本教程采用CENTOS 5.6系统(下载链接:ed2k://|file|%5B%E3%80%8ACentOS.5.6%E3%80%8B.x86.%E5%85%89%E7%9B%98%E9%95%9C%E5%83%8F%5D.CentOS-5.6-i386-bin-DVD.iso|4262373376|26d1d42c0bd87d1fa5b78bd53ca1fb3a|h=ebeswxillu5bs4yz5g6v63w3mgkiwd2o|/),其他linux系统亦可,配置稍有区别。
(2) 系统安装完毕应将一些必要软件安装完成,例如gcc编译器(在线安装命令:yuminstall gcc ;离线安装方法自己百度,较麻烦,不推荐)和vim编辑器(在线安装命令:yum-y install vim;离线同样很麻烦。)并测试一些基本命令是否可用,例如ifconfig,如有问题请找度娘。
2、软件
(1) pppoe:客户端为windows操作系统自带,服务器端centos5.6自带且已安装好,如使用其他Linux系统,可能需自己下载安装(下载链接:http://www.roaringpenguin.com/products/pppoe)。
(2)Freeradius:服务器端采用freeradius-server-2.1.12(下载链接:ftp://ftp.freeradius.org/pub/freeradius),同系列各种版本区别不大,1.X.X和2.X.X可能有一些较大区别,后面具体配置会提到;
客户端采用ppp协议压缩包ppp-2.4.4.tar.gz自带的radius客户端(下载链接:ftp://ftp.samba.org/pub/ppp/),亦可自己下载freeradius-client(下载链接同freeradius-server)。
(3)Mysql :本例程采用MySQL-server-5.5.30-1.rhel5.i386.rpm以及MySQL-client-5.5.30-1.rhel5.i386.rpm
(下载链接:http://dev.mysql.com/downloads/mysql/#downloads)。
(4)Openssl:freeradius运行需要(下载链接:http://www.openssl.org/);
MySQL-devel:freeradius-server与Mysql连接需要
(下载链接:http://dev.mysql.com/downloads/mysql/#downloads)。
备注:
I、上述软件均可从百度网盘下载,链接:http://pan.baidu.com/share/link?shareid=448605&uk=3457442646;
II、软件存放地址均为桌面/home/openking/Desktop,后面安装教程命令也以此为基础。
III、linux下所有的rpm包下载地址:http://rpmfind.net/linux/RPM/index.html。
二:具体配置步骤
1、安装软件
(1)、以root登录系统或以用户名登陆后打开终端切换到root权限(不是root权限可能会导致软件安装不成功,而且会没有权限修改一些敏感文件):
附:修改root用户密码命令:
#sudo passwd root
(2)、安装pppoe
首先检查系统上的rp-pppoe以及ppp软件是否安装,命令:
#rpm -q rp-pppoe ppp
如果使用的是centos 5.6,那么结果应该是:
如果你的系统该命令显示为空,需要自行安装pppoe,命令:
# cd /home/openking/Desktop
# tar xvzfrp-pppoe-3.11.tar.gz
# cdrp-pppoe-3.11
# ./configure
# make&& make install
(3)、安装freeradius
首先安装openssl,命令:
#cd /home/openking/Desktop
#tar xvzfopenssl-1.0.0a.tar.gz
#cd openssl-1.0.0a
#make && make install
再装server,命令:
# cd/home/openking/Desktop
# tar xvzffreeradius-server-2.1.12.tar.gz
# cdfreeradius-server-2.1.12
# ./configure
# make &&make install
最后装client,由于使用的是ppp包自带的radius客户端,故我们只用将ppp协议包里的radius客户端拷出来即可,命令:
# cd /etc/ppp
# mkdir radiuds
# cd/home/openking/Desktop
# tar xvzfppp-2.4.4.tar.gz
# cd ppp-2.4.4/pppd/plugins/radius/etc/
#cp * /etc/ppp/radiuds/
(4)、安装Mysql
首先安装Mysql-devel,命令:
#yum install mysql-devel.i386 //
装完理应是:
再安装Mysql-server和Mysql-client,命令:
#cd /home/openking/Desktop
#rpm -ivh MySQL-server-5.5.30-1.rhel5.i386.rpm--nodeps --force
#rpm -ivh MySQL-client-5.5.30-1.rhel5.i386.rpm--nodeps --force
全部装完应该是:
至此,软件安装全部完成!
2、配置PPPOE服务器
(1)修改相关文件参数,命令:
# cd /etc/ppp
# vim options
将文件修改为,其余部分注释(#):(vim修改文件及相关命令操作请找度娘)
lock
crtscts
nobsdcomp //使用bsd压缩
nodeflate
nopcomp
# vim pppoe-server-options
将该文件修改为,其余部分注释(#)(具体参数含义可使用命令查看: #man pppd):
# PPP options for the PPPoE server
# LIC: GPL
Auth //远程用户要验证自己
require-chap //使用chap验证协议,如果使用pap验证协议,则此行为 require-pap
default-mru
default-asyncmap
lcp-echo-interval 10 //系统每隔10秒发出echo request以确认连线是否正常
lcp-echo-failure 2 //如果2次echo request 失败,表示连线已断开
ms-dns 202.112.14.151 //分配给客户端的DNS
ms-dns 202.112.14.161
noipdefault
noipx
#hide-password //日志里不显示密码
nodefaultroute //不改变默认路由
proxyarp //提供porxyarp服务,不提供就是noproxyarp
noktune //不改变内核参数
logfile /var/log/pppd.log //写日志文件
#vim chap-secrets
该文件用于保存客户名及密码,添加一个用户,将文件修改为:
# Secrets for authentication using CHAP
# client server secret IP addresses
test * test *
(2)测试运行pppoe服务器,命令:
#pppoe-server-I eth0 -L 192.168.2.111 -R 192.168.2.112 -N 10
各参数含义:
-I eth0 指定pppoe服务器在那个网卡接口监听连接请求
-L 192.168.2.111 指定pppoe服务器的ip地址。(注意:此IP地址不是网卡的IP地址,而是PPPOE服务器的虚拟IP)(此地址可以任意,若不提供,10.0.0.1将被使用)
-R 192.168.2.112 pppoe服务器分配给客户端的IP地址,从192.168.2.112开始,递增(若不提供,10.67.15.1将被使用)
-N 10 指定最多可以连接pppoe服务器的客户端数量(默认是64 最大是65534)
-C: 用于指定您的PPPoE服务器主机名(此参数可以不要)
-S: 该选项用于标记特定的服务器,以帮助客户端系统对pppoe服务器进行自我标定。-S选项经常用来保证一些特定客户始终连接到特定服务器,特别是当你的网络上有多个pppoe服务器时。 PPPoE协议的客户端软件可被配置为只登陆有"特殊服务名称"的pppoe服务器。如果客户端指定的服务器名称与-S选项服务名称中宣称的名字相符,就会连接到该服务器。
-T: 超时时间(设置为60秒)
-k :使用内核模式PPPoE
-u :调用pppd时使用单独的参数
-r :随机分配会话数
然后在主系统端或另外一台机器上使用pppoe客户端登陆
成功登陆代表你的pppoe服务器基本配置好了,不出意外的话,应该连不上外网,接下来:
I、关闭linux系统防火墙,命令:
# serviceiptables stop
Centso5.6也可直接在系统 / 管理 / 安全级别和防火墙里面禁用防火墙
II、更改转发规则,命令:
# iptables -AINPUT -i etho -s 192.168.2.0/24 -j DROP
# iptables -t nat-A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 192.168.1.108
部分参数含义:
-t nat表示进行NAT转化
由pppoe-server 命令中参数可以看出分配给客户机的ip地址池为192.168.2.0/24;
source 192.168.1.108是本机eth0 的IP地址,使用ifconfig命令可以看到。
III、打开ip转发功能,命令:
#vim/etc/sysctl.conf
将net.ipv4.ip_forward = 0修改为net.ipv4.ip_forward =1;然后输入命令让配置立刻生效:
# sysctl -p
如此,应该就可以连上外网了。
此外,关闭pppoe-server服务器的命令是:
# killallpppoe-server
至此,单一的pppoe服务器配置基本结束,后面的配置过程还会修改部分文件,但以后 启动pppoe-server的命令均为以下三行:(参数根据自己需要更改)
#pppoe-server -Ieth0 -L 192.168.2.111 -R 192.168.2.112-N 10
# iptables -AINPUT -i etho -s 192.168.2.0/24 -j DROP
# iptables -t nat-A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 192.168.1.108
3、配置单一Radius服务器
(1)、相关配置文件修改,命令如下:
#cd /usr/local/etc/raddb
#vim clients.conf
将文件修改为:(供pppoe服务器连入认证使用)
client 127.0.0.1 {
secret = localhost
shortname = localhost
nastype = other
}
# vim users
在其顶行加上一句(前面不能有空格):
test Cleartext-Password := “test”
(2)、测试单一radius服务器,在终端里输入以命令:
出现下图即表示radius服务器启动成功:
附注:关闭radius服务器只要在此界面使用:ctrl + c即可。
另开一个终端2 (切记先切换到root),命令如下:
# radtest test testlocalhost 0 localhost
如果出现下图即表示单一radius服务器配置成功:
至此,单一的radius服务器配置完毕。
4、配置PPPoe--Radius服务器
(1)、相关文件修改,命令:
#cd /etc/ppp/radiuds
#vim servers
在文件后添加一行
localhost localhost
明显这和在配置radius服务器修改的clients.conf相匹配,表示这个文件是pppoe服务器向radius服务器提供的申请认证的账号和密码
#vim dictionary
将该文件最后一行修改为:
INCLUDE /etc/ppp/radiuds/dictionary.microsoft
然后修改文件将pppoe服务器与radius连起来,命令:
# cd /etc/ppp
#vim pppoe-server-options
将文件修改为:
# PPP options for the PPPoE server
# LIC: GPL
auth
require-chap
default-mru
default-asyncmap
lcp-e cho-interval 60
lcp-echo-failure 5
ms-dns 202.112.14.151
ms-dns 202.112.14.161
noipdefault
noipx
nodefaultroute
proxyarp
noktune
plugin /usr/lib/pppd/2.4.4/radius.so //使用radius来认证授权和记帐
radius-config-file /etc/ppp/radiuds/radiusclient.conf
logfile /var/log/pppd.log
接下来修改另一个文件
#cd /etc/ppp/radiuds
#vim radiusclient.conf
将文件修改为:
auth_order radius
login_tries 4
login_timeout 60
nologin /etc/nologin
issue /etc/ppp/radiuds/issue
authserver localhost:1812
acctserver localhost:1813
servers /etc/ppp/radiuds/servers
dictionary /etc/ppp/radiuds/dictionary
login_radius /usr/local/sbin/login.radius
seqfile /var/run/radius.seq
mapfile /etc/ppp/radiuds/port-id-map
default_realm
radius_timeout 10
radius_retries 3
login_local /bin/login
(2)、测试运行PPPoe-Radius服务器,终端1命令:(启动radius服务器)
# /usr/sbin/radiusd -X
终端2命令:(启动pppoe服务器)
# pppoe-server -I eth0 -L 192.168.2.111 -R 192.168.2.112 -N 10
# iptables -A INPUT -i etho -s 192.168.2.0/24-j DROP
# iptables -t nat -A POSTROUTING -s192.168.2.0/24 -j SNAT --to-source 192.168.1.108
再使用windows系统连接看看,如果windows能连上并且能够正常上网,那么代表你配置成功了。
至此,PPPoe-Radius服务器配置完毕。
5、配置MySQL
(1)、相关参数及文件修改,命令如下:
# echo /usr/lib >> /etc/ld.so.conf
# ldconfig
# cd/home/openking/Desktop/freeradius-server-2.1.12
# cd src/modules/rlm_sql/drivers/rlm_sql_mysql
# ./configure--with-mysql-dir=/usr/share/mysql/ --with-mysql-lib-dir=/usr/lib/mysql/
# make && make install
# service mysql start
#mysql -u root -p
>create database radius;
>exit;
# cd /usr/local/etc/raddb/sql/mysql
# mysql -u root -p radius <schema.sql //导入的数据库与radius版本有关,1.1.7版本之前的数据库文件是mysql.sql
# mysql -u root -p
>use radius;
>show tables;
建立组信息:
>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 ('user','Framed-IP-Address',':=','255.255.255.255');
>insert into radgroupreply (groupname,attribute,op,value)
values('user','Framed-IP-Netmask',':=','255.255.255.0');
建立用户信息:
>insert into radcheck (username,attribute,op,value)
values ('test','User-Password',':=','test');
将用户添加进组:
>insert into radusergroup (username,groupname) values ('test','user');
>exit;
至此,数据库配置基本完成,下面来配置radius使其通过数据库验证用户信息,命令如下:
# cd /usr/local/etc/raddb/site_enabled
# vim default
把authorize{} 、accounting {}中的sql前面的#去掉,并把authorize{}中的files前加#;如下示:
authorize {
chap
mschap
suffix
eap
#files
sql
pap
}
accounting {
detail
unix
#radutmp //本例程中使用了Simultaneous-Use:=1(同一用户一次只能登陆
sql 一台机器),有它在radiusd进程意外结束会有问题,所以禁用
}
session {
#radutmp
sql
}
然后修改与mysql数据库连接的配置文件,命令如下:
# vim /usr/local/etc/raddb/sql.conf
修改password = “radpass” 为 password = “”
# cd ../
# vim radius.conf
去掉第700行# $INCLUDE sql.conf的注释
(2)、测试运行完整的PPPOE--Radius--MySQL,终端1命令如下:
# /usr/sbin/radiusd -X
终端2命令:
# pppoe-server -I eth0 -L 192.168.2.111 -R 192.168.2.112 -N 10
# iptables -A INPUT -i etho -s 192.168.2.0/24-j DROP
# iptables -t nat -A POSTROUTING -s192.168.2.0/24 -j SNAT --to-source 192.168.1.108
如果windows客户机(用户名:test, 密码:test)能连上并且能够正常上网,那么你的本地PPPOE--Radius--MySQL已配置成功。
6、配置远程PPPoe--Radius服务器
(1)、PPPoe服务器放置在系统1上,Radius放置在系统2上,两个系统都要是linux系统;
(2)、系统1按照上述过程要配置完整的pppoe和radius-client(在本例程中即是从ppp拷贝出的radius客户端文件);
(3)、系统2不用配置pppoe和radius-client,但是要配置完整的radius-server和mysql。分别配置完成后对部分文件稍作修改:(系统1地址:192.168.1.6,系统2地址:192.168.1.5)
系统1 命令:
# ifconfig
# cd/etc/ppp/radiuds
# vimradiusclient.conf
将文件中两行:
authserver localhost:1812
acctserver localhost:1813
修改为
authserver 192.168.1.5:1812 //系统2的IP地址
acctserver 192.168.1.5:1813
# vim servers
修改文件,将localhost localhost
改为 192.168.1.5 farhost //系统2的IP地址和密码
系统2命令:
# ifconfig
# cd/usr/local/etc/raddb
# vim clients.conf
在文件尾添加以下内容:
client 192.168.1.6 {
secret = farhost
}
(4)、服务器功能测试与运行
系统2启动radius服务器,命令:
# /usr/local/sbin/radiusd -X
系统1启动pppoe服务器,命令:
# pppoe-server -I eth0 -L 192.168.2.111 -R 192.168.2.112 -N 10
# iptables -A INPUT -i etho -s 192.168.2.0/24-j DROP
# iptables -t nat -A POSTROUTING -s192.168.2.0/24 -j SNAT --to-source 192.168.1.6
在windows平台上登录(用户名:test, 密码:test),观察是否能连上及上网,如果可以,表示远程PPPoe--Radius服务器配置成功。
至此LINUX下PPPoe+Freeradius+Mysql配置全部完成!!!
附录:
1、如果按照上述步骤如果做不出应有的结果,请仔细检查文件修改的正不正确,一个字母符号都不能错,还不行就去检查系统日志文件(路径:/var/log/messages)查找相关信息排除故障;
2、文中配置命令中的openking为你的系统用户名,请根据自己的系统自行更改;
3、关于虚拟机软件,推荐使用Oracle的virtubox,至少本例程是使用该软件实现的,没有任何问题,至于vmware还是碰到了一些问题。另外,虚拟系统联网方式一定要选桥接模式,不能使用NAT;
4、以命令行方式安装rpm包,在终端中我们可以使用rpm -i [选项] [rpm 包文件名]来进行安装,常用选项如下:
-h 使用符号#显示安装进度
-v 报告每一步操作的情况
--replacepkge 无论软件包是否已被安装,都强行安装软件包
--test 安装测试,并不实际安装
--nodeps 忽略软件包的依赖关系强行安装(一般不能正常运行,因为缺少依赖文件)
--force 忽略软件包及文件的冲突
5、新装linux系统基本命令不识别,例如:
# ifconfig
提示命令不存在
但使用 # /sbin/ifconfig 即可
原因: 系统默认的环境变量设置不对
在 普通用户和root用户下分别执行echo $PATH,PATH里少了四个地址:/sbin:/usr/sbin:/usr/local/sbin:/usr/kerberos/sbin
而,ifconfig恰恰就在/sbin里面。
或者
cat/etc/profile, 可以发现没有关于/sbin的环境变量。
# su root
# vim /etc/profile
在文件末加入以下语句:
PATH=$PATH:/sbin#在PATH变量后追加/sbin目录
export PATH=$PATH:/sbin
vim home/openking/.bash_profile,在PATH后面添加/sbin:/usr/sbin:/usr/local/sbin:/usr/kerberos/sbin这几个路径。
改完之后,执行命令:. .bash_profile,也可以注销下或者重启才能使刚刚修改的内容生效。
再来sudoifconfig , 就OK了。
6、如果启动radius服务器出现下列情况:
则输下列命令:
# lsof -i
寻找名为radiuds的进程,记录下其PID
#kill PID号
#/usr/lcoal/sbin/radiusd -X