Skip to content

VPS CentOS下IPSec L2TP VPN的安装

写在前:上一个VPS搭建好的时候就安装了ssh和vpn(pptp vpn),但是非常不稳定,特别是vpn,经常连着连着服务就宕了。于是作罢。ssh倒是之前买了一个,一年也没多少钱,也就没用自己架的消耗VPS流量了,另一个原因是那一段时间我的博客经常被墙,担心所有的鸡蛋放在一个篮子里会全打了。现在重操 vpn是因为自己搞了个安卓手机,跟某歌同步通讯录的时候都同步不了,彻底让我草泥马了。用过goXxent,非常不稳定,广告还跑流量,https出问题。花钱买一个vpn吧,想想自己有vps,干嘛不架一个呢,呵呵!已经买了ssh了,再买vpn,太浪费了而且也用得少。于是,还是自己架一下吧。这个文章就是一个学习笔记,方便以后翻阅。内容大部分是从网上复制过来的。我尽量都附上链接地址。话说网上有一键安装的,感兴趣可以去试试。

为什么要是l2tp vpn,pptp不行么?听说联通神马的,pptp是不行的。

第二层隧道协议L2TP(Layer 2 Tunneling Protocol)是一种工业标准的Internet隧道协议,它使用UDP的1701端口进行通信。L2TP本身并没有任何加密,但是我们可以使用IPSec对L2TP包进行加密。L2TP VPN比PPTP VPN搭建复杂一些。

提示:1、确定你用的是xen的vps;2、首先需要卸载已安装的openswan,因为yum install安装的openswan版本可能有bug,会导致莫名错误。

一、安装必备软件

yum install make gcc gmp-devel bison flex lsof

这些个应该都和编译有关。

二、安装IPsec

Openswan是Linux系统上IPsec的一个实现。由于更新源上的版本较老,这里使用源码安装,我用的版本是2.6.24。

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

通过阅读INSTALL这个文件得知,安装命令为make programs install。

三、配置IPsec

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

#备份
cp /etc/ipsec.conf /etc/ipsec.conf.bak
vim /etc/ipsec.conf

#修改如下
config setup
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
    oe=off
    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

其中一些设置含义可以参考/etc/ipsec.d/examples/l2tp-psk.conf

四、设置共享密码PSK

编辑配置文件/etc/ipsec.secrets

vim /etc/ipsec.secrets[enter]
YOUR.SERVER.IP.ADDRESS %any: PSK "YourSharedSecret"

五、修改包转发设置

在终端里运行:

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

echo 1 >/proc/sys/net/core/xfrm_larval_drop

iptables -t nat -A POSTROUTING -j MASQUERADE

修改内核设置,支持转发,编辑/etc/sysctl.con:

将“net.ipv4.ip_forward”的值改为1。

生效:/sbin/sysctl –p

六、重启IPSec

service ipsec restart

ipsec verify

结果显示如下:

ipsecVerify

提示:

如果出现:Pluto listening for IKE on udp 500                              [FAILED]

安装lsof:yum install lsof

如果出现:Checking NAT and MASQUERADEing                                  [N/A]

iptables -t nat -A POSTROUTING -j MASQUERADE

七、安装L2TP(xl2tpd和rp-l2tp)

xl2tpd是由Xelerance Corporation维护的l2tpd应用。但是xl2tpd没有l2tp-control,需要从rp-l2tp这个里面提取。所以要装这两个软件包。

安装必备软件:

yum install libpcap-devel ppp policycoreutils

安装xl2tpd和rp-l2tp:

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 --prefix=/usr/local/rp-l2tp
make
cp handlers/l2tp-control /usr/local/sbin/
mkdir /var/run/xl2tpd/
ln -s /usr/local/sbin/l2tp-control /var/run/xl2tpd/l2tp-control

 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

新建配置文件

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

配置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

设置拨号用户名和密码:

vim /etc/ppp/chap-secrets

添加iptables转发规则:

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

设置开机运行,编辑/etc/rc.local

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

vpsyou上有一键安装的脚本,经测试,很简单,不用这么麻烦,安装上完全可以用。

不管自己安装的还是通过一键安装的脚本都会有个问题,就是:在iphone/ipod touch上可以使用,但是在安卓(Android 2.2.2)上连接成功但是迅速的断开了连接。下面是日志的内容,我还不知道是怎么回事,有知道的童鞋可以教教我。

Aug  7 12:23:04 abc ipsec_setup: ...Openswan IPsec started
Aug  7 12:23:04 abc pluto: adjusting ipsec.d to /etc/ipsec.d
Aug  7 12:23:04 abc ipsec__plutorun: adjusting ipsec.d to /etc/ipsec.d
Aug  7 12:23:05 abc ipsec__plutorun: 002 added connection description "L2TP-PSK-NAT"
Aug  7 12:23:05 abc ipsec__plutorun: 002 added connection description "L2TP-PSK-noNAT"
Aug  7 12:23:05 abc ipsec__plutorun: 003 NAT-Traversal: Trying new style NAT-T
Aug  7 12:23:05 abc ipsec__plutorun: 003 NAT-Traversal: ESPINUDP(1) setup failed for new style NAT-T family IPv4 (errno=19)
Aug  7 12:23:05 abc ipsec__plutorun: 003 NAT-Traversal: Trying old style NAT-T
Aug  7 12:25:37 abc shutdown[18379]: shutting down for system reboot
Aug  7 12:25:37 abc init: Switching to runlevel: 6
Aug  7 12:25:37 abc ipsec_setup: Stopping Openswan IPsec...
Aug  7 12:25:39 abc kernel: NET: Unregistered protocol family 15

参考资料:

  1. How To Set Up A L2TP/IPSec VPN In A VPS
  2. CentOS安装L2TP VPN笔记
  3. CentOS Linux VPS安装IPSec+L2TP VPN
  4. Linode CentOS / Debian 部署 ipsec+l2tpd 简要笔记
  5. http://bbs.chinaunix.net/thread-1340886-1-1.html
  6. http://www.cnblogs.com/klobohyz/archive/2012/02/04/2337775.html