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

lsn0LSN 2011-05-15

如题,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;

cdxl2tpd-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]

authfile=/etc/ppp/chap-secrets

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

[lnsdefault]

iprange=172.16.0.100-172.16.0.199

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

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

refusepap=yes

requireauthentication=yes

name=Linuxxl2tpdVPNserver

pppdebug=yes

pppoptfile=/etc/ppp/options.xl2tpd

lengthbit=yes

 

修改完成,保存退出

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

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

 没注释掉的部分如下

写道
ipcp-accept-local

ipcp-accept-remote

ms-dns8.8.8.8

ms-dns218.108.248.200

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

noccp

auth

crtscts

idle1800

mtu1500

mru1500

nodefaultroute

debug

lock

logfile/var/log/l2tpd.log

#日志文件路径

proxyarp

connect-delay5000

#kdebug2

#record/var/log/l2tpdcontent.log

receive-all

ktune
 

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

写道
# Secrets for authentication using CHAP

#clientserversecretIPaddresses

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

#

#xl2tpdThisshellscripttakescareofstartingandstoppingl2tpd.

#

#chkconfig:-8030

#description:Layer2TunnellingProtocolDaemon(RFC2661)

#

#processname:xl2tpd

#config:/etc/xl2tpd/xl2tpd.conf

#pidfile:/var/run/xl2tpd.pid

#Servicename

SERVICE=xl2tpd

#Sourcefunctionlibrary.

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

#Sourcenetworkingconfiguration.

./etc/sysconfig/network

if[${NETWORKING}="no"]

then

exit0

fi

[-x/usr/local/sbin/$SERVICE]||exit0

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-eq0]&&touch/var/lock/subsys/$SERVICE

echo""

return$RETVAL

}

stop(){

echo-n"Stopping$SERVICE:"

killproc$SERVICE

RETVAL=$?

echo

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

return$RETVAL

}

restart(){

stop

start

}

#Seehowwewerecalled.

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}"

exit1

esac
 

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

8、打开转发,加上nat

写道
echo 1 > /proc/sys/net/ipv4/ip_forwardiptables -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 的运行WindowsXP 操作系统的电脑
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标签下的博文

相关推荐