CentOS Linux VPS安装IPSec+L2TP VPN

===== 151213 更新yum安装方法 =====

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

=== 151213 add begin===
yum安装openswan、ppp、xl2tpd方法:
1、添加epel源
2、执行:

yum install openswan ppp xl2tpd

3、配置参考编译安装的一样
=== 151213 add end===

一、安装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”即可。

参考资料:
http://hi.baidu.com/wzypunk/blog/item/4566903cf418663b96ddd8b0.html
http://www.wifay.com/blog/2010/08/21/centos-install-ipsec-l2tp-vpn/

《CentOS Linux VPS安装IPSec+L2TP VPN》上的34个想法

  1. 请问博主,我什么都弄好了,执行 xl2tpd -D 时有提示说:

    xl2tpd[1204]: init_network: Unable to bind socket: Address already in use. Terminating.

    什么情况呢?

    1. 你好,如果l2tp日志里没有报错,那就是win7连接设置的问题了,但是win7我没连过,网上找找相关教程

  2. 楼主您好,
    照着您的步骤,我已经成功安装了也成功连线了.
    可是当我用第二台计算机连接了之后第一台就断开连接了.
    是不是l2tp/ipsec 不支持多台连接呢? :-|

      1. 我新建了10个不同的帐号,可是每当新的连接进去之前连接的都一样会断开..
        会不会是因为我办公室共用同一台路由器的关系? 8-O

          1. 我也是这个问题,同一个局域网多个账号不能同时登陆,另外一个电脑登录vpn账号,之前登录的电脑就掉线了!不在一个局域网就OK,愁死我了,,,,我们买的vpn账号,同一个局域网就可以同时登陆,好疑惑啊!呜呜~ :cry:

  3. 当我输入到这一步, ‘sysctl -p’ ,
    下面就显示:

    net.ipv4.ip_forward = 1
    net.ipv4.conf.default.rp_filter = 0
    net.ipv4.tcp_syncookies = 1
    error: permission denied on key ‘fs.aio-max-nr’
    error: permission denied on key ‘fs.file-max’

    请问楼主这是什么问题呢?

      1. 这样啊,,我正好是OpenVZ呢。。。那请问一下关于OpenVZ不支持有什么文档说明么?我是菜鸟呢,求楼主不吝赐教。 :oops:

        1. 因为ovz虚拟化的vps用的不是独立内核,所以vps无法调整内核参数,但是ovz可以用pptp和openvpn。关于openvz和ipsec你可以网上搜下,手头上没有文档。。

  4. 博主你好请问请问到了最后一部显示为
    [root@localhost ~]# xl2tpd -D
    xl2tpd[2076]: Enabling IPsec SAref processing for L2TP transport mode SAs
    xl2tpd[2076]: IPsec SAref does not work with L2TP kernel mode yet, enabling force userspace=yes
    xl2tpd[2076]: setsockopt recvref[30]: Protocol not available
    xl2tpd[2076]: Not looking for kernel support.
    xl2tpd[2076]: open_controlfd: Unable to open /var/run/xl2tpd/l2tp-control for reading.
    是什么问题呢?

  5. # tail -f /var/log/secure
    initial Main Mode message received on 192.168.1.43:500 but no connection has been authorized with policy=PSK

    这个该怎么解决?

评论已关闭。