最近接到一客户需要 

1、提供公网Ip地址,

2、提供client to site L2TP ×××服务,

3、每个登录×××的账号对就一个公网IP。 

L2TP(Layer 2 Tunneling Protocol) 第二层隧道协议 是一种工业标准的Internet隧道协议,它使用UDP的1701端口进行通信。L2TP本身并没有任何加密,但

是我们可以使用IPSec对L2TP包进行加密。

仅搭建L2tp即可实现大部分功能,但一般情况下L2tp都与IPSec配合使用,MacOS与iOS的设备貌似对L2tp的支持都必须使用IPSec,所以有必要部署IPSec。

系统 centos 6.5 简化版

eth0:10.9.9.111 内网管理及公网IP路由出口

eth1:x.x.x.x  *** server IP IP

使用163 yum 源

yum update -y

关闭 Selinux

vim /etc/selinux/config 

SELINUX=disabled 

安装IPSec

首先安装必备依赖包

yum install make gcc gmp-devel bison flex lsof

安装openswan

yum install openswan -y

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

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=x.x.x.x

    leftprotoport=17/1701

    right=%any

    rightprotoport=17/%any

    dpddelay=40

    dpdtimeout=130

    dpdaction=clear

    leftnexthop=%defaultroute

    rightnexthop=%defaultroute

“x.x.x.x”为××× server 的登录IP, 

设置共享密钥PSK 编辑配置文件/etc/ipsec.secrets:

vim /etc/ipsec.secrets

输入:

x.x.x.x %any: PSK "1234567890"

1234567890为共享密钥

修改包转发设置

    echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

    echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

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

修改内核设置,使其支持转发,编辑/etc/sysctl.conf文件:

vim /etc/sysctl.conf

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

使修改生效:

sysctl -p

重启IPSec服务:

service ipsec restart

查看系统IPSec安装和启动的正确性:

ipsec verify

一般情况下没有报[FAILED]就可以了。但是如果转发已经确认配置了,但仍检测checking IP Forwarding 失败,可以先忽略此项错误,虽然我此项FAIL,但

不影响使用,根据邮件列表的内容来看很可能是一个未解决的判断BUG, 查看日志中出现 IPSec connection established此类字样基本没有问题。

安装L2TP(使用xl2tpd和rp-l2tp)

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

虽然根据编译结果来看,目前最新版的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

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

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

建立xl2tpd配置文件:

mkdir /etc/xl2tpd

vim /etc/xl2tpd/xl2tpd.conf

加入:

[global]

ipsec saref = yes

[lns default]

ip range = 172.16.10.10-172.16.10.250

local ip = 172.16.10.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环境下

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

此处注意的是第二列的 l2tpd 为上面配置的name,如果有改动也要修改此处。

# Secrets for authentication using CHAP

# client server secret IP addresses

myusername l2tpd mypassword * (自动获取IP地址)

stacksnet001 l2tpd 1234567890 122.227.24.48 (手动指定IP地址,这样就可以保证每个账号会配指定的IP地址)

最后添加iptables转发规则并保存重启

iptables -t nat -A POSTROUTING -o eth1  -j MASQUERADE

/etc/init.d/iptables save

/etc/init.d/iptables restart

以debug方式启动l2tp,查看有无错误:

xl2tpd -D

配置开机启动 xl2tpd

vim /etc/rc.local

/usr/local/sbin/xl2tpd&  添加此行

windows 设置×××拔号

Windows Registry Editor Version 5.00

 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters]

"ProhibitIPSec"=dword:00000001

 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent]

"AssumeUDPEncapsulationContextOnSendRule"=dword:00000002

新这些导入注册表,并重启系统,否则有些系统会报错。

××× 属性--》安全  ×××类型:L2TP/IPSec 高级选项:使用共享预共享的密钥作身份验证。 数据加密:需要加密(如果服务器拒绝将断开连接) 最下面三

项全选