搭建 L2TP + IPSec VPN 服务器

作者 huhamhire,暂无评论,2013年7月31日 10:28 折腾历程

之前介绍过利用VPS搭建一台基于PPTP的VPN服务器,来为穿墙以及使用国外的一些服务提供便利。

虽然部署起来很方便,但是PPTP在实际使用的过程中却有较大的局限性。由于PPTP只能在两端点间建立单一隧道,所以其最明显的问题就是在一些专用的内部网络中(诸如学校、企业的内部网络)往往会无法正常使用。除此以外,联通、移动这两家ISP,在国内部分地区也针对PPTP所使用的端口进行了屏蔽(个人认为是这两家的公网IP地址数量太少而出现大量内网接入造成的,也不全是运营商的问题)。正因为如此,我就打算继续折腾,准备增加L2TP这个对网络环境要求更低,而又不失设备通用性的方案。

另外,一般情况下,L2TP 也会配合一些加密协议一起使用,以提升连接的安全性,所以这一回折腾的时候,我准备顺带着把 IPSec 的加密服务一起做好。

L2TP 服务器的搭建想偷懒的话也可以很简单,可以直接使用 Zeddius 的一键安装脚本直接搞定,具体可以参考 http://since1989.org/internet/linode-vps-centos-6-3-x64-l2tp-ipsec-vpn-script.html,这里就不做介绍了。要折腾的话,还是自己亲手上的感觉来的好一点。

一、安装Openswan

Openswan 是 Linux 上的一个 IPSec 解决方案,因为需要自行编译,所以先来做下准备工作。

1.准备工作

首先需要安装编译可能会用到的相关组件:


yum -y update
yum install -y ppp make gcc gmp-devel xmlto bison flex xmlto libpcap-devel lsof

2.接下来安装Openswan

这里我参考了 Zeddius 的脚本用了 2.6.24 版,之前试过 2.6.35 版遇到过一些问题。


mkdir /tmp/l2tp
cd /tmp/l2tp
wget http://www.openswan.org/download/openswan-2.6.24.tar.gz
tar zxvf openswan-2.6.24.tar.gz
cd openswan-2.6.24
make programs install

3.配置IPSec

修改IPSec的配置文件 /etc/ipsec.conf,配置为以下内容:


 1 config setup
 2     nat_traversal=yes
 3     virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
 4     oe=off
 5     protostack=netkey
 6 
 7 conn L2TP-PSK-NAT
 8     rightsubnet=vhost:%priv
 9     also=L2TP-PSK-noNAT
10 
11 conn L2TP-PSK-noNAT
12     authby=secret
13     pfs=no
14     auto=add
15     keyingtries=3
16     rekey=no
17     ikelifetime=8h
18     keylife=1h
19     type=transport
20     left=VPS_IP
21     leftprotoport=17/1701
22     right=%any
23 rightprotoport=17/%any

将其中的VPS_IP替换为VPS的外网IP地址。

4.设置预共享密钥(PSK)

IPSec一般可以采用证书或者 PSK 的加密方案。Windows 上面默认的设置就是使用的证书加密,证书的安全性比 PSK 要来的高,不过配置起来在服务端和客户端都比较麻烦,特别是证书还存在信任问题。因此,作为对连接安全性要求远不及企业的普通用户,拿 PSK 来将就一下也是不错的选择。

编辑配置文件 /etc/ipsec.secrets,进行如下设置:


VPS_IP %any: PSK "IPSec_PSK"

同样要将 VPS_IP 替换为 VPS 的外网 IP 地址,并且将 IPSec_PSK 替换为自己想设置的 PSK。

5.修改包转发设置

首先是修改 IPv4 的包转发,运行下面的命令:


for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done

配置防火墙转发:


iptables --table nat --append POSTROUTING --jump MASQUERADE
/etc/init.d/iptables save
/etc/init.d/iptables restart

此外,还需要配置内核的转发设置。即将 /etc/sysctl.conf 中的 net.ipv4.ip_forward 值改为1。并在 shell 中执行:


sysctl -p

因为之前在配置 PPTP 的时候已经做过内核的设置,所以这两步可以直接跳过。

6.检查设置

重启IPSec以应用配置:


/etc/init.d/ipsec restart

检查IPSec状态:


ipsec verify

可以看到类似于下面这张图的结果,一般只要没有 FAILED 就没问题。

Openswan

到这里IPSec的安装配置就完成了,接下来解决L2TP。

二、安装L2TP

需要同时用到 xl2tpd 和 rp-l2tp。xl2tpd 是由 Xelerance Corporation 维护的 l2tpd 应用,不过有个问题是 xl2tpd 没有提供 l2tp-control,所以还需要安装 rp-l2tp。

1.安装 rp-l2tp

首先安装 rp-l2tp,并配置好 l2tp-control 的链接:


cd /tmp/l2tp
wget http://mirror.zeddicus.com/sources/rp-l2tp-0.4.tar.gz
tar zxvf rp-l2tp-0.4.tar.gz
cd rp-l2tp-0.4
./configure
M11ake
cp handlers/l2tp-control /usr/local/sbin/
mkdir /var/run/xl2tpd/
ln -s /usr/local/sbin/l2tp-control /var/run/xl2tpd/l2tp-control

2.安装 xl2tpd

接下来编译安装 xl2tpd,这里用的是 1.2.4 版:


cd /tmp/l2tp
wget http://mirror.zeddicus.com/sources/xl2tpd-1.2.4.tar.gz
tar zxvf xl2tpd-1.2.4.tar.gz
cd xl2tpd-1.2.4
make install

3.配置xl2tpd

建立xl2tpd配置目录:


mkdir /etc/xl2tpd

建立配置文件 /etc/xl2tpd/xl2tpd.conf,并进行如下的配置:


 1 [global]
 2 ipsec saref = yes
 3 [lns default]
 4 ip range = IPrange.2- IPrange.254
 5 local ip = IPrange.1
 6 refuse chap = yes
 7 refuse pap = yes
 8 require authentication = yes
 9 ppp debug = yes
10 pppoptfile = /etc/ppp/options.xl2tpd
11 length bit = yes

需要将其中的 IPrange 修改成为客户端分配的内网网段,比如 10.0.20。

4.配置 PPP

修改 PPP 的配置文件 /etc/ppp/options.xl2tpd


 1 require-mschap-v2
 2 ms-dns 8.8.8.8
 3 ms-dns 8.8.4.4
 4 asyncmap 0
 5 auth
 6 crtscts
 7 lock
 8 hide-password
 9 modem
10 debug
11 name l2tpd
12 proxyarp
13 lcp-echo-interval 30
14 lcp-echo-failure 4

5.设置拨号账户及密码

编辑 /etc/ppp/chap-secrets,按说明的格式加上:


l2tpuser  l2tpd  123456  *

三、设置开机自动启动

前面这样配置完成以后,L2T P的服务还不能实现开机自动启动,还需要手动进行相关的配置:

1.设置启动配置转发

建立 /usr/bin/l2tpset ,进行如下设置:


1 #/bin/bash
2 for each in /proc/sys/net/ipv4/conf/*
3 do
4 echo 0 > \$each/accept_redirects
5 echo 0 > \$each/send_redirects
6 done

随后为脚本赋予执行权限:


chmod +x /usr/bin/zl2tpset

2.向启动配置中添加设置:

编辑 /etc/rc.local,加入:


/etc/init.d/ipsec restart
/usr/bin/l2tpset
/usr/local/sbin/xl2tpd

至此,安装配置工作就基本完成了。

四、使用客户端连接L2TP服务器

VPN 的客户端连接其实都差不多,设置好连接的类型以及认证信息就可以很方便的连接上。如果是按照这里的方案配置好的服务器,只要注意填入设置好的PSK应该就没有太大的问题了。

关键词:L2TP , VPN , 虚拟主机
登录后进行评论