搭建基于l2tp的VPN服务器(windows、linux客户端)


如题,centos上搭建基于l2tp/IPSec的VPN服务器

拆分一下,l2tp就用xl2tpd软件了,官网是:http://www.xelerance.com/services/software/xl2tpd/


IPSec部分就是用openswan了,官网是:http://www.openswan.org/code/ ,据网上资料介绍, Linux上的VPN支持主要有三种: IPSec 's VPN 其主要代表有 FreeS/WAN、KAME

IPSec在Linux上支持主要有两个主要的分类,一为FreeS/WAN,现在已经停止开发,其分裂为两个项目,Openswan和Strongswan。我们要用的就是openswan了, 因为FreeS/WAN已经在2004年三月停止开发,所以我们使用她的后继项目Openswan来做我们的IPSec实验。其相比FreeS/WAN有个好处,如果使用 26sec 的时候,Openswan不用打补丁,就可以用nat。

安装就很简单了yum install openswan(apt-get install openswan)

如果你想从源码安装,到http://www.openswan.org/code 下载软件包,然后按照包中的说明安装。由于我们使用26sec,所以只要make programs;make install就可以搞定。值得注意的是,现在的Openswan已经内建些个好用的补丁,比如x.509和NAT Traversal的支持,使用起来非常的方便。


配置openswan还没怎么研究,先解决基于l2tp的VPN服务器搭建吧,先能把VPN跑起来才是王道。



  1. 安装,xl2tpd源码下载http://www.xelerance.com/wp-content/uploads/software/xl2tpd/xl2tpd-1.2.8.tar.gz
  2. 解压安装之前还有一部,安装依赖软件,
    写道
    Centos:yum install libpcap-devel ppp;
    ubuntu:apt-get install libpcap0.8-dev libpcap0.8 libcap-dev
     
  3. 然后解压xl2tpd,安装三部曲,安装了依赖软件就不会出错的


写道
tar -zxvf xl2tpd-1.2.7.tar.gz;

cd xl2tpd-1.2.8;

make;

make install。

 

4、修改 /etc/xl2tpd/xl2tpd.conf ,内容如下:


先将默认示例配置文件拷到相应目录下:

写道
mkdir /etc/xl2tpd

mkdir /var/run/xl2tpd

cp examples/xl2tpd.conf /etc/xl2tpd/



修改xl2tpd.conf文件,没注释掉的部分如下

写道
[global]

auth file=/etc/ppp/chap-secrets

;port=1701 #这个在文件是被注释掉的意思,如果要改端口号,改成1723是不行的,l2tp客户端好像不能改端口

[lns default]

ip range = 172.16.0.100-172.16.0.199

local ip = 172.16.0.1 #(这个是网关地址了,很多文章说这个应该是服务器的IP,无所谓了,都一样的,一个虚的, #一个实的,跑起来都是一样一样的,改成这个虚的,tracert的时候个人认为效果更直观)

require chap = yes #这里没有ms-chap v2,我不记得怎么写了,加上require应该就不用改客户端安全配置

refuse pap = yes

require authentication = yes

name = Linuxxl2tpdVPNserver

ppp debug = yes

pppoptfile = /etc/ppp/options.xl2tpd

length bit = yes

 


修改完成,保存退出

5、修改 /etc/ppp/options.xl2tpd ,内容如下:


写道
cp examples/ppp-options.xl2tpd /etc/ppp/options.xl2tpd

vim /etc/ppp/options.xl2tpd
 

 没注释掉的部分如下


写道
ipcp-accept-local

ipcp-accept-remote

ms-dns 8.8.8.8

ms-dns 218.108.248.200

# 给拔号用户分配 dns 服务器地址

noccp

auth

crtscts

idle 1800

mtu 1500

mru 1500

nodefaultroute

debug

lock

logfile /var/log/l2tpd.log

# 日志文件路径

proxyarp

connect-delay 5000

#kdebug 2

#record /var/log/l2tpdcontent.log

receive-all

ktune
 



6、修改用户认证文件 /etc/ppp/chap-secrets ,内容如下



写道
# Secrets for authentication using CHAP

# client server secret IP addresses

vpn * "123456" *
 

明摆着,创建一个用户名是:vpn,密码是:123456 的vpn账号

7、xl2tpd的启动脚本,在他的源代码目录下的debian目录中有个文件:xl2tpd.init是它的重启脚本,但看到网上有个挺好的脚本,功能一样,直接贴出来了,要的直接复制粘贴就可以了
写道
#!/bin/sh

#

# xl2tpd This shell script takes care of starting and stopping l2tpd.

#

# chkconfig: - 80 30

# de script ion: Layer 2 Tunnelling Protocol Daemon (RFC 2661)

#

# processname: xl2tpd

# config: /etc/xl2tpd/xl2tpd.conf

# pidfile: /var/run/xl2tpd.pid

#Servicename

SERVICE=xl2tpd

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

if [ ${NETWORKING} = "no" ]

then

exit 0

fi

[ -x /usr/local/sbin/$SERVICE ] || exit 0

RETVAL=0

start() {

echo -n "Starting $SERVICE: "

if [ ! -d /var/run/xl2tpd ]

then

mkdir /var/run/xl2tpd

fi

daemon /usr/local/sbin/$SERVICE

RETVAL=$?

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SERVICE

echo ""

return $RETVAL

}

stop() {

echo -n "Stopping $SERVICE: "

killproc $SERVICE

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$SERVICE

return $RETVAL

}

restart() {

stop

start

}

# See how we were called.

case "$1" in

start)

start

;;

stop)

stop

;;

status)

status $SERVICE

RETVAL=$?

;;

restart|reload)

restart

;;

condrestart)

[ -f /var/lock/subsys/$SERVICE ] && restart || :

;;

*)

echo "Usage: $SERVICE {start|stop|status|restart|reload|condrestart}"

exit 1

esac
 

把它弄好了直接复制到/etc/init.d/目录下,别忘了加上x权限


8、打开转发,加上nat


写道
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -A POSTROUTING -t nat -s 172.16.0.0/24 -j MASQUERADE
 

9、 服务器端先把xl2tpd启动起来吧:service xl2tpd start

10、客户端修改配置,这个还是比较麻烦的,改完了还要重启,这个最让人无语了

缺省的 Windows XP L2TP 传输策略不允许 L2TP 传输不使用 IPSec 加密。可以通过修改 XP 注册表来禁用缺省的行为:

手工修改:

1) 进入 Windows XP 的“开始” “运行”里面输入“regedit ,打开“注册表编辑器”,

进入“ HKEY_Local_Machine\System\CurrentControlSet\Services\RasMan\Parameters

2)直接在该目录下,新建一个DWORD类型的值,名字为: ProhibitIpSec,把值设置为1

3) 保存所做的修改,重新启动电脑以使改动生效。

提示:必须添加“ ProhibitIpSec ”注册表键值到每个要使用 L2TP 的运行 Windows XP 操作系统的电脑

11、新建一个VPN连接

配置 L2TP 拨号连接:

1) 进入 Windows XP 的“开始” “设置” “控制面板”,选择“切换到分类视图”。

2) 选择“网络和 Internet 连接”。

3) 选择“建立一个您的工作位置的网络连接”。(直接网上邻居新建连接就可以了)

4) 选择“虚拟专用网络连接”,单击“下一步”

5) 为连接输入一个名字为“ l2tp ”,单击“下一步”。

6) 选择“不拨此初始连接”,单击“下一步”。

7) 输入准备连接的 L2TP 服务器的 IP 地址“x.x.x.x”,单击“下一步”。

8) 单击“完成”。

9) 双击“ l2tp ”连接,在 l2tp 连接窗口,单击“属性”。

10) 选择“安全”属性页,选择“高级(自定义设置)”,单击“设置”。

11) 在“数据加密”中选择“可选加密(没有加密也可以连接)”。

12) 在“允许这些协议”选中“不加密的密码( PAP )”、“质询握手身份验证协议( CHAP )”、“ Microsoft CHAP MS-CHAP )”,单击“确定”。

13) 选择“网络”属性页面,在“ VPN 类型”选择“ L2TP IPSec VPN ”。

然后确定,输入用户名密码就可以了,配置没有错的话,就不会有问题了,而且连接上VPN之后能够正常上网的。


如果VPN错误连接的代码是789的话,那就是注册表那块没有弄好了,检查一下,改完注册表是一定要重启的。



下面是IPSec方面的(openswan)的配置了,先去洗个澡,晚点再来整理

openswan不弄了


linux客户端连接xl2tpd服务器

Linux客户端连接xl2tp服务器

由于linux设备作为xl2tpd的客户端,所使用的客户端软件也是xl2tpd,所以linux客户端首先要安装xl2tpd

安装xl2tpd

  1. 安装依赖软件:centos:
    yum install libpcap-devel ppp(ubuntu:apt-get install libpcap-devel ppp)
    
    
  2. 源码编译安装xl2tpd:
    wget http://www.xelerance.com/wp-content/uploads/software/xl2tpd/xl2tpd-1.2.8.tar.gz
    
    
  3. 解压后,直接make;make install即可完成安装;
  4. 创建配置文件目录:
    mkdir /etc/xl2tpd
    
    
  5. 在安装目录下,
    cp examples/xl2tpd.conf /etc/xl2tpd
    
    
  6. 修改xl2tpd.conf文件,直接复制粘贴过去
    ;
    ; This is a minimal sample xl2tpd configuration file for use
    ; with L2TP over IPsec.
    ;
    ; The idea is to provide an L2TP daemon to which remote Windows L2TP/IPsec
    ; clients connect. In this example, the internal (protected) network
    ; is 192.168.1.0/24.  A special IP range within this network is reserved
    ; for the remote clients: 192.168.1.128/25
    ; (i.e. 192.168.1.128 ... 192.168.1.254)
    ;
    ; The listen-addr parameter can be used if you want to bind the L2TP daemon
    ; to a specific IP address instead of to all interfaces. For instance,
    ; you could bind it to the interface of the internal LAN (e.g. 192.168.1.98
    ; in the example below). Yet another IP address (local ip, e.g. 192.168.1.99)
    ; will be used by xl2tpd as its address on pppX interfaces.
    
    [global]>
    ; listen-addr = 192.168.1.98
    ;
    ; requires openswan-2.5.18 or higher - Also does not yet work in combination
    ; with kernel mode l2tp as present in linux 2.6.23+
    ; ipsec saref = yes
    ; forceuserspace = yes
    ;
    ;port=1701
    ; debug tunnel = yes
    auth file=/etc/ppp/chap-secrets
    
    [lac test]
    lns = 192.168.4.2
    redial = yes
    redial timeout = 15
    require chap = yes
    refuse pap = yes
    require authentication = yes
    name = vpn
    ppp debug = yes
    pppoptfile = /etc/ppp/options.test_l2tp
    
    
    
  7. 创建客户端连接配置文件,vim /etc/ppp/options.test_l2tp;直接复制粘贴过去
    asyncmap 0
    noauth
    crtscts
    lock
    hide-password
    modem
    netmask 255.255.255.0
    proxyarp
    lcp-echo-interval 30
    lcp-echo-failure 4
    ipcp-accept-local
    ipcp-accept-remote
    
    
    
  8. 修改/etc/ppp/chap-secrets文件,若没有,直接创建并复制粘贴过去
    # Secrets for authentication using CHAP
    # client        server  secret                  IP addresses
    vpn           *       "123456"              *
    
    
    
  9. 手动创建放置连接文件的目录:
    mkdir /var/run/xl2tpd
    
    
  10. 启动xl2tpd:
    xl2tpd
    
    
    或者启动debug模式:
    xl2tpd -D
    
    
  11. 启动连接,若xl2tpd使用debug模式开的,请重新打开一个终端,执行:
    echo "c test">/var/run/xl2tpd/l2tp-control
    
    
  12. 这样即可完成连接,ifconfig可以查看到ppp0的连接,连接完毕后添加到服务器的路由:
    route add -host x.x.x.x dev ppp0
    
    
  13. 要关闭连接,直接kill掉xl2tpd的进程

xl2tpd与radius对接的配置

xl2tpd跟radius对接,包括软件安装、配置跟pptp都是完全一模一样的,无非就是在xl2tpd的options文件里添加类似

写道
plugin /usr/local/lib/pppd/2.4.4/radius.so
plugin /usr/local/lib/pppd/2.4.4/radattr.so
radius-config-file /usr/local/etc/radiusclient/radiusclient.conf
 

具体配置可以参考我博客radius标签下的博文

http://laibulai.iteye.com/category/162177


猜你喜欢

转载自laibulai.iteye.com/blog/1044842