Chinaunix首页 | 论坛 | 认证专区 | 博客 登录 | 注册

志在千裏-ChinaUnixbird.blog.chinaunix.net

记录我的思想轨迹、工作学习、生活和关注的领域.

  • 博客访问: 4422506
  • 博文数量: 190
  • 博客积分: 3600
  • 博客等级: 中校
  • 技术积分: 10392
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-19 11:23
个人简介

专注系统运维、网络架构,研究技术解决方案,记录我的思想轨迹、工作学习、生活和关注的领域

文章分类
文章存档

2014年(2)

2013年(21)

2012年(37)

2011年(130)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

分类: 网络与安全


操作系统:Red Hat Enterprise Linux Server release 6.1

编译安装pptp
PPTP VPN 服务器安装
安装 PPTP 需要 MPPE 和较高版本的 ppp ( > 2.4.3 ) 支持,不过RHEL 6 的 2.6.32内核已经集成了 MPPE 和高版本的 ppp 。因此可以跳过安装配置 MPPE 和 ppp 的过程直接安装 PPTP。

如果需要检查 MPPE 是否存在可以使用以下命令:
# modprobe ppp-compress-18 && echo 'ok!
安装编译环境
# yum install -y wget gcc gcc-c++ make

1、安装 pptpd
下载最新的 pptpd 源代码 ( 1.3.4 @ 2007-05-23 ):
# wget http://sysdown.example.com/tarbag/pptpd-1.3.4.tar.gz
将下载到的 pptpd 移动到 /usr/local/src/tarbag 目录下。
加压缩源代码包:
# mkdir /usr/local/src/tarbag
# cd /usr/local/src/tarbag
# tar xzvf pptpd-1.3.4.tar.gz  -C ../software
# cd ../software/pptpd-1.3.4
编译安装:
注意:可能需要 libcap、libcap-devel RPM 包支持,如果没有请安装 libcap、libcap-devel RPM 包!
# ./configure --prefix=/usr/local/pptpd --enable-bcrelay --with-libwrap
# make
# make install
2、配置 PPTP
编译安装完成后,首先需要手工建立一些目录以及复制原始的 pptpd 配置文件:
# mkdir /usr/local/pptpd/etc
# cp /usr/local/src/tarbag/pptpd-1.3.4/samples/options.pptpd /etc/ppp/options.pptpd
# cp /usr/local/src/tarbag/pptpd-1.3.4/samples/pptpd.conf /usr/local/pptpd/etc/

说明:
pptpd.conf 是 pptpd 的基本配置文件
options.pptpd 是 pptpd 的扩展功能属性配置文件

设置pptpd.conf:
# vim /usr/local/pptpd/etc/pptpd.conf
ppp /usr/local/pptpd/sbin/pptpd
option /etc/ppp/options.pptpd
debug
stimeout 30
logwtmp
localip 192.168.1.1
remoteip 192.168.1.234-238

说明:
option  /etc/ppp/options.pptpd
指定 pptpd 扩展属性配置文件 options.pptpd 的位置。
debug
开启调试模式,有关 pptpd 的信息和错误都会记录在 /var/logs/message 中,方便排错和调试。
stimeout 30
设置客户端连接 pptpd server 时的最长连接等待时间(连接超时时间),30 秒。
localip 10.0.0.254
pptpd server 所在服务器的 IP 地址,可以设置为服务器上绑定的任意一个 IP 地址。
remoteip 10.0.0.200-210
设置客户端连接到 pptpd server 后可供分配的 IP 地址范围( 10.0.0.200 - 10.0.0.210 ),可以这样设置:
10.0.0.200-208,10.0.0.209,10.0.0.210

配置 options.pptpd
# vim /etc/ppp/options.pptpd
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 202.106.0.20
ms-dns 211.99.25.1
proxyarp
lock
nobsdcomp 
novj
novjccomp
nologfd
logfile /var/log/pptpd.log

说明:
name Nanu-VPN
pptpd server 的名称。
refuse-pap
拒绝 pap 身份验证模式。
refuse-chap
拒绝 chap 身份验证模式。
refuse-mschap
拒绝 mschap 身份验证模式。
require-mschap-v2
在端点进行连接握手时需要使用微软的 mschap-v2 进行自身验证。
require-mppe-128
MPPE 模块使用 128 位加密。
ms-dns 202.106.0.20
ms-dns 211.99.25.1
ppp 为 Windows 客户端提供 DNS 服务器 IP 地址,第一个 ms-dns 为 DNS Master,第二个为 DNS Slave。
proxyarp
建立 ARP 代理键值。
debug
开启调试模式,相关信息同样记录在 /var/logs/message 中。
lock
锁定客户端 PTY 设备文件。
nobsdcomp
禁用 BSD 压缩模式。
novj
novjccomp
禁用 Van Jacobson 压缩模式。
nologfd
禁止将错误信息记录到标准错误输出设备(stderr)。

配置完成之后开始添加 pptpd server 连接帐户,pptpd server 连接帐户控制文件位于:/etc/ppp/chap-secrets,chap-secrets 文件是有格式的,文件中每一行为一个客户端帐户,而一行又分为 4 段(用空格或者 TAB 分开),这 4 段从左到邮分别为:用户名、服务器名称*、密码、客户端分配到的 IP 地址。
注意:
1、服务器名称必须和 pptpd.conf 中 name 处设置的名称一致,否则登录验证无法通过
2、密码以明文填写,不需进行加密

# vim  /etc/ppp/chap-secrets
 
#Secrets for authentication using CHAP
#client        server  secret                  IP addresses
#######system-config-network will overwrite this part!!! (begin) ##########
wall           pptpd   123             *

3、启动 pptpd server
#/usr/local/pptpd/sbin/pptpd --conf /usr/local/pptpd/etc/pptpd.conf --option /etc/ppp/options.pptpd
检查 pptpd server 是否启动成功:
# netstat -ntlp

如果看到有进程 tcp 1723 端口监听就说明 pptpd server 已经启动成功了!
注意:
1、服务器防火墙必须对外开放允许 TCP 1723 端口的连接请求!
2、如果 pptpd server 位于网关或者其他前置设备之后,则必须在相应设备上开启 PPTP 穿越!

4、测试连接
在 Windows 2000/XP/2003/Vista 中新建一个 VPN 连接,填写相应的 pptpd server IP 地址、用户名、密码进行连接测试。

二、安装mysql
忽略

三、下载安装freeradius
# cd /usr/local/src/tarbag
# wget http://sysdown.example.com/tarbag/freeradius-server-2.1.12.tar.gz
# tar zxvf freeradius-server-2.1.12.tar.gz
# cd freeradius-server-2.1.12
# ./configure --prefix=/usr/local/freeradius
# make
# make install
# vim /etc/profile
# 在最后添加
export PATH=$PATH:/usr/local/freeradius/sbin:/usr/local/freeradius/bin
# source /etc/profile
# echo "/usr/local/freeradius/lib" >> /etc/ld.so.conf
# ldconfig -v
# cd /usr/local/freeradius
# vim  etc/raddb/users
#在76行取消以下注释
steve  Cleartext-Password := "testing"
       Service-Type = Framed-User,
       Framed-Protocol = PPP,
       Framed-IP-Address = 10.8.0.1,
       Framed-IP-Netmask = 255.255.255.0,
       Framed-Routing = Broadcast-Listen,
       Framed-Filter-Id = "std.ppp",
       Framed-MTU = 1500,
       Framed-Compression = Van-Jacobsen-TCP-IP 
# radiusd -Xs
radtest steve testing localhost 1812 testing123

出现Access-Accept字样说明成功。
测试成功后把/etc/raddb/users改回去。

四、freeradius和mysql的集成
# mysqladmin -u root -p create radius
# mysql -u root -p radius < etc/raddb/sql/mysql/schema.sql
# mysql -u root -p radius < etc/raddb/sql/mysql/nas.sql
# mysql -u root -p radius < etc/raddb/sql/mysql/ippool.sql
# mysql -u root -p radius < etc/raddb/sql/mysql/wimax.sql
# mysql -u root -p
mysql> GRANT SELECT ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'radpass';
mysql> GRANT ALL on radius.radacct TO 'radius'@'localhost';
mysql> GRANT ALL on radius.radpostauth TO 'radius'@'localhost';
mysql> use radius;
 
# 加入组信息,本例中的组名为user
mysql> insert into radgroupcheck (groupName,Attribute,op,Value) values ('user','User-Password',':=','MS-CHAP');
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-Netmask','=','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, Value) VALUES ('wall@example.com', 'Password', '123456');
 
# 用户加到组里
mysql> insert into radusergroup(username,groupname) values('wall@example.com','user');
 
# 限制账户同时登陆次数
mysql> INSERT INTO radgroupcheck (GroupName, Attribute, op, Value) values("user", "Simultaneous-Use", ":=", "1");


1、编辑/etc/raddb/radiusd.conf
$INCLUDE sql.conf
否则会出现错误:
Failed to load module “sql”.
同时还会影响freeradius其他模块的安装,出现错误:
E: Sub-process /usr/bin/dpkg returned an error code (1)
再编辑/usr/local/freeradius/etc/raddb/sql.conf
mysql用户名,密码根据自己的情况填写
第100行取消readclients = yes 前的注释

2、编辑/usr/local/freeradius/etc/raddb/sites-enabled/default
第170 行files前加注释
第177 行取消sql前的注释
第406 行files 前加注释
第342 行取消sql前的注释
第454 行取消sql前的注释
第372 行取消sql前的注释

3、编辑/usr/local/freeradius/etc/raddb/sites-enabled/inner-tunnel
第124 行files前加注释
第131行取消sql前的注释
第255行取消sql前的注释
第277行取消sql前的注释

###总之就是去掉files模块,开启sql模块###

4、编辑/usr/local/freeradius/etc/raddb/eap.conf
第30行default_eap_type = md5改为default_eap_type = peap

5、测试
# radtest wall@example.com example localhost 1812 testing123

出现Access-Accept字样说明成功。
到目前为止:整合了freeradius+mysql, pptpd还是单独运行

五、pptpd+mysql+freeradius整合
# 安装ppp
# yum install -y ppp

# rpm -Uvh  http://apt.sw.be/redhat/el6/en/x86_64/dag/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
# yum install -y radiusclient-ng radiusclient-ng-devel
# vim /etc/radiusclient-ng/radiusclient.conf

auth_order      radius
login_tries     4
login_timeout   60
nologin /sbin/nologin
issue   /etc/radiusclient-ng/issue
authserver      localhost:1812
acctserver      localhost:1813
servers         /etc/radiusclient-ng/servers
dictionary      /etc/radiusclient-ng/dictionary
seqfile         /var/run/radius.seq
mapfile         /etc/radiusclient-ng/port-id-map
default_realm
radius_timeout  10
radius_retries  3
login_local     /bin/login
# vim /etc/ppp/options.pptpd
在最后添加:
#put plugins here
#(putting them higher up may cause them to sent messages to the pty)
plugin  /usr/lib64/pppd/2.4.5/radius.so
plugin  /usr/lib64/pppd/2.4.5/radattr.so
radius-config-file /etc/radiusclient-ng/radiusclient.conf
###注意,我的是64位系统,所以模块在/usr/lib64/pppd/2.4.5 下面。32位的在 /usr/lib/pppd/2.4.5
# vim  /etc/radiusclient-ng/servers
localhost                                       testing123
# vim /etc/radiusclient-ng/dictionary
# 追加
INCLUDE /usr/share/radiusclient-ng/dictionary.microsoft
INCLUDE /usr/share/radiusclient-ng/dictionary.ascend
INCLUDE /usr/share/radiusclient-ng/dictionary.merit
INCLUDE /usr/share/radiusclient-ng/dictionary.compat

否则拨号时后台日志会报错,无法拨入,客户端报691错误:
  Connect: ppp0  /dev/pts/5
  rc_avpair_new: unknown attribute 11  rc_avpair_new: unknown attribute 25
  Peer test failed CHAP authentication
  Connection terminated.   
重启freeradius与pptpd ,连接就可以通过了。

如果是无法访问其他的机器,请注意防火墙的设置。
最后测试:
# /usr/local/freeradius/bin/radtest wall@example.com example localhost 1812 testing123    
Sending Access-Request of id 63 to 127.0.0.1 port 1812
        User-Name = "wall@example.com"
        User-Password = "123456"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 1812
        Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=63, length=20
显示如上说明成功。


阅读(7052) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册