基于L2tp/IPSec的VPN环境搭建

2011-03-28  lgroom

服务器端:linux 内核要求:推荐2.6.32以及以上

详细参考openswan文件夹中的README文件

需要的软件:Openswan:用于IPSec的配置http://www.openswan.org/code/

一般内核高的直接makemake install就可以安装成功

Xl2tpd,用于l2tp的配置:http://www.xelerance.com/services/software/xl2tpd/

 

L2tp环境的搭建:成功完成此部分搭建后应该可以利用客户端使用L2tp直接连接服务器,但是不加密。WindowsL2tp是和IPSec绑定的。如果要仅用L2tp连接需要再配置,详细见客户端配置部分。

成功连接后可以抓包,格式如下:

 

安装xl2tpd:以下的操作最好是以根用户身份操作,不然中间会有很多小麻烦,需要用根命令sudo执行

安装的时候最好看下安装包中的Makefile文件,我安装的版本可以直接make编译,make install安装,但是并不保证以后的版本都是这样,还有就是根据操作系统内核的不同安装方式不一样,注意。安装后如果没出现error字样的提示则表示安装成功了。下面开始配置。

1.     编辑 /ect/xl2tpd/xl2tpd.conf

可以清空里面的内容,然后写上有用的部分如下:

[global]

[lns default]

ip range = 10.1.1.2-10.1.1.255

local ip = 本机ip

require chap = yes

refuse pap = yes

require authentication = yes

name = LinuxVPNserver

ppp debug = yes

pppoptfile = /etc/ppp/options.xl2tpd

length bit = yes

 

不理解的话可以直接复制没有问题的。ip range是为客户端分配的iplocal ip为服务器本地ip地址,require chap是指明连接的验证方式为chap,而不是pap或者是MS-CHAP等,name是服务器名字,随便写。Pppoptfile指明配置文件的路径。改好后保存。

Ppp配置

确保机子已经安装了ppp服务,可以重新写一遍aptitude install ppp从源安装ppp

cp /usr/share/doc/xl2tpd/examples/ppp-options.xl2tpd

/etc/ppp/options.xl2tpd

xl2tpd例子中的配置文件复制到指定的路径中,并命名为options.xl2tpd,然后再编辑一下这个文件:

Vim /etc/ppp/options.xl2tpd

修改mx-dns为你要分配给连接来的客户机的DNS地址

修改后保存。

添加一个ppp账户

编辑文件vim /etc/ppp/chap-secrets 格式如下:

用户名       *     密码     *

之间最好用tab键规范。现在服务器端的L2tp就搭建好了,要让能连接来的客户机访问网络,还需要做转发设置:

Vim /etc/sysctl.conf

将其中的net.ipv4.ip_forward=1这行取消前面的#号注释。保存退出。

执行 sysctl –p使之生效。如果想使服务器每次启动都对此设置就再编辑 vim /etc/rc.local  将其添加到exit 0之前,保存。

转发设置:iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE

将上面设置的10.1.1.0/24子网中的包从eth0转发,对应上面的xl2tpd.conf文件中的ip range

然后在终端执行一次iptables命令使其生效。现在服务器端的L2tp已经配置好了,开始配置客户端。

客户端:windows操作系统

打开网络设置---设置新的网络连接---连接到工作区---创建新连接---使用我的Internet连接(VPN---输入刚配置的服务器的ip地址,目标名称随意,勾选下面的“现在不连接;仅进行设置以便稍后连接”---用户名和密码输入在客户端创建的用户名和密码,域不填---创建。

然后设置刚创建的VPN连接,在属性中设置安全选项卡中VPN类型选择“使用IPsec的第2层隧道协议(L2TP/IPSec)”,下面的数据加密选择“不允许加密”,身份验证勾选“质询握手身份验证协议(CHAP)”
注意:因为windows默认L2tpIPSec是绑定使用的,要想只用L2tp而不用加密必须对注册表修改,否则在连接的时候会出现“错误789: 运行---regedit  打开注册表,找到如下位置: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters              创建一个新值DWORD类型,名字为ProhibitIpSec,值设为1,保存后重新启动。然后就可以用自己设置的帐号和密码连接L2tp服务器了。
成功后的交互数据包如下:

IPSec部分的环境设置:

VPN的使用很多时候都是需要基于安全的加密传输,所以IPSec配置很必要。

服务器端:

在安装openswan的时候可能先要安装一些编译所必须的包,这些都在openswan文件夹中的README文件中都有说明,所以建议查看下载的版本中此文件。我安装的openswan 2.6.33中需要 build-essential

Libgmp3-devgawkflexbison,需要的话就依次安装aptitude install …

解压openswan包并进入目录,make programsmake install,如果没有出现error字样的错误信息则安装成功。

编辑配置文件 vim /etc/ipsec.conf

1.     修改protostack一行为protostack=netkey

2.     转向文件底部输入如下配置:(这里输入格式要有注意缩进)

conn          %default

         Forceencaps=yes

conn          L2TP-PSK-NAT

         rightsubnet=vhost:%no,%priv

         also=L2TP-PSK-noNAT

conn          L2TP-PSK-noNAT

         authby=secret

         pfs=no

         auto=add

         keyingtries=3

         rekey=no

         ikelifetime=8h

         keylife=1h

         type=tunnel

         left=服务器的ip地址

         leftprotoport=17/1701

         right=%any

         rightprotoport=17/%any

然后保存退出编辑。

设置PSK预共享密钥:vim /etc/ipsec.secrets

在新的一行中输入如下:

服务器ip地址      %any:  PSK              预共享密钥

中间用tab键隔开。

设置网络策略,在终端输入如下:

for each in /proc/sys/net/ipv4/conf/*

do

   echo 0 > $each/accept_redirects

   echo 0 > $each/send_redirects

done

要使此策略在每次系统开启时生效则需要将其加入到rc.local文件中

vim /etc/rc.local exit 0之前加入如上的代码,然后报错退出编辑。

然后重启IPSec服务:              service ipsec restart

然后使用ipsec verify来确认一下配置是否成功:

现在服务器端的IPSec部分就配置好了,客户端需要使用L2tp/IPSec连接需要对客户端再做修改。

客户端:

打开建立好的不加密的l2tpVPN连接,属性---安全,高级设置---选中“使用预共享的密钥作身份验证”---数据加密选项选择“需要加密”
 

现在就可以使用IPSec加密的通道连接服务器了。在WIN7中直接连又会出现错误789,解决办法是:

1.     检查IPSec服务是否开启,打开任务管理器---服务,查找“IKE and AuthIP IPSec keying module”和“IPSec policy”服务是否处于开启状态,若不是则开启。
1.     确认防火墙开放了5004500端口。
 
2.     修改注册表: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
新建一个DWORD(32)的键值,键入名字“AssumeUDPEncapsulationContextOnSendRule”,然后修改键值为2。确定后退出注册表,重启机器。
现在输入用户名和密码,确认预共享密钥也已经输入好了就可以使用L2tp/IPSec连接到服务器了,正常的交互包如下:
 

常见错误:

1.     客户端789错误:

通常是因为windows默认使用IPSec而服务器端又没有配置好造成,可以修改注册表添加并设置ProhibitIpSec来解决。

2.     客户端619809错误:

通常是因为服务器端的l2tp服务不正常,确保服务器端是以根用户身份启动xl2tpd

    猜你喜欢
    发表评论评论公约
    喜欢该文的人也喜欢 更多