2013年8月29日星期四

CentOS搭建VPN(IPSec+L2TP)

大家可能对于VPN的安全性要求非常重视(如果是图简单可以搭建PPTPD的VPN可以参照一下帖子http://blog.fanyue.info/?p=10或者http://blog.fanyue.info/?p=11)所以有耐心和对安全要求较高的同学还是推荐使用以下的的教程(KVM 与Xen 下的VPS使用此教程) :
当然你必须有一台境外的服务器或者VPS:如果要购买这个可以去zrblog.net 看一看!
第二层隧道协议L2TP(Layer 2 Tunneling Protocol)是一种工业标准的Internet隧道协议,它使用UDP的1701端口进行通信。L2TP本身并没有任何加密,但是我们可以使用IPSec对L2TP包进行加密。L2TP VPN比PPTP VPN搭建复杂一些。
一、安装IPsec,Openswan是Linux系统上IPsec的一个实现。
官网:http://www.openswan.org/
1、安装必备软件:
yum install make gcc gmp-devel bison flex lsof
make,gcc我们都知道是干什么用的了。
gmp-devel: Development tools for the GNU MP arbitrary precision library.
bison: A GNU general-purpose parser generator.
flex: A tool for creating scanners (text pattern recognizers).
看上去好像都和编译器有关?
2、安装Openswan:
由于更新源上的版本是2.6.21-5.el5_6.4较老,这里使用源码安装,目前最新版是2.6.35。
cd /tmp
wget http://www.openswan.org/download/openswan-2.6.35.tar.gz
tar -zxvf openswan-2.6.35.tar.gz
cd openswan-2.6.35
make programs install
PS:进openswan-2.6.35目录看到已经有Makefile文件了,阅读目录内的INSTALL写着
Building userland:
make programs install
3、配置IPSec
编辑配置文件/etc/ipsec.conf:
cp /etc/ipsec.conf /etc/ipsec.conf.bak
vim /etc/ipsec.conf
查找protostack=auto,修改为:
protostack=netkey
在最后加入:
conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    rekey=no
    ikelifetime=8h
    keylife=1h
    type=transport
    left=YOUR.SERVER.IP.ADDRESS
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any
“YOUR.SERVER.IP.ADDRESS”换成VPS的外网IP。其中一些设置含义可以参考/etc/ipsec.d/examples/l2tp-psk.conf文件的内容。
4、设置共享密钥PSK
编辑配置文件/etc/ipsec.secrets:
vim /etc/ipsec.secrets
输入:
YOUR.SERVER.IP.ADDRESS %any: PSK "YourSharedSecret"
5、修改包转发设置
复制以下两段代码在终端里运行:
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
echo 1 >/proc/sys/net/core/xfrm_larval_drop
修改内核设置,使其支持转发,编辑/etc/sysctl.conf文件:
vim /etc/sysctl.conf
将“net.ipv4.ip_forward”的值改为1。
使修改生效:
sysctl -p
6、重启IPSec:
/etc/init.d/ipsec restart
查看系统IPSec安装和启动的正确性:
ipsec verify
没有报[FAILED]就可以了。
我用的这个VPS结果显示如下:
二、安装L2TP(xl2tpd和rp-l2tp)
xl2tpd是由Xelerance Corporation维护的l2tpd应用。但是xl2tpd没有l2tp-control,需要从rp-l2tp这个里面提取。所以要装这两个软件包。
1、安装必备软件:
yum install libpcap-devel ppp policycoreutils
2、安装xl2tpd和rp-l2tp:
cd /tmp
wget http://sourceforge.net/projects/rp-l2tp/files/rp-l2tp/0.4/rp-l2tp-0.4.tar.gz
tar -zxvf rp-l2tp-0.4.tar.gz
cd rp-l2tp-0.4
./configure
make
cp handlers/l2tp-control /usr/local/sbin/
mkdir /var/run/xl2tpd/
ln -s /usr/local/sbin/l2tp-control /var/run/xl2tpd/l2tp-control
xl2tpd用的是目前最新的xl2tpd-1.3.0:
cd /tmp
wget http://www.xelerance.com/wp-content/uploads/software/xl2tpd/xl2tpd-1.3.0.tar.gz
tar -zxvf xl2tpd-1.3.0.tar.gz
cd xl2tpd-1.3.0
make
make install
显示安装了如下一些内容:
3、建立xl2tpd配置文件:
mkdir /etc/xl2tpd
vim /etc/xl2tpd/xl2tpd.conf
加入:
[global]
ipsec saref = yes
[lns default]
ip range = 10.82.88.2-10.82.88.254
local ip = 10.82.88.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
4、配置ppp
建立options.xl2tpd文件:
vim /etc/ppp/options.xl2tpd
加入:
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
5、设置拨号用户名和密码:
vim /etc/ppp/chap-secrets
6、添加iptables转发规则:
iptables --table nat --append POSTROUTING --jump MASQUERADE
保存iptables转发规则:
/etc/init.d/iptables save
重启iptables:
/etc/init.d/iptables restart
7、以debug方式启动l2tp,查看有无错误:
xl2tpd -D
显示如下:
xl2tpd[9647]: Enabling IPsec SAref processing for L2TP transport mode SAs
xl2tpd[9647]: IPsec SAref does not work with L2TP kernel mode yet, enabling forceuserspace=yes
xl2tpd[9647]: setsockopt recvref[22]: Protocol not available
xl2tpd[9647]: This binary does not support kernel L2TP.
xl2tpd[9647]: xl2tpd version xl2tpd-1.3.0 started on myserver.localdomain PID:9647
xl2tpd[9647]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
xl2tpd[9647]: Forked by Scott Balmos and David Stipp, (C) 2001
xl2tpd[9647]: Inherited by Jeff McAdams, (C) 2002
xl2tpd[9647]: Forked again by Xelerance (www.xelerance.com) (C) 2006
xl2tpd[9647]: Listening on IP address 0.0.0.0, port 1701
说明已经在监听端口了。现在可以在windows上建立L2TP拨号连接了。
三、设置开机启动
vim /etc/rc.local
加入:
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
echo 1 >/proc/sys/net/core/xfrm_larval_drop
/etc/init.d/ipsec restart
/usr/local/sbin/xl2tpd
四、建立连接时遇到的问题
windows下新建一个VPN连接,属性-网络-VPN类型选择L2TP IPSec VPN,安全-IPSec设置-输入共享密钥。
提示“错误 768:因为加密数据失败连接尝试失败。”
IPSEC services被关掉了。开始-运行-输入services.msc,然后在服务中启用“IPSEC services”即可。