在ubuntu上搭建L2PT/IPsec服务器

为什么要搭建L2PT呢、最简单的一点理由就是支持移动网络

 

首先安装好编译环境

apt-get -y install build-essential

然后再安装OpenSwan依赖包

apt-get -y install libgmp3-dev flex bison

编译安装OpenSwan

wget -c http://www.openswan.org/download/openswan-2.6.33.tar.gz
tar -zxf openswan-2.6.33.tar.gz
cd openswan-2.6.33
make programs install

 

然后配置IPSec文件

cp /etc/ipsec.conf /etc/ipsec.conf.bak
vim /etc/ipsec.conf

 在里面输入以下内容

version 2.0

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=192.168.1.102
leftprotoport=17/1701
right=%any
rightprotoport=17/%any

注意缩进格式、否则启动服务器会发生错误、left=这一行要换成迩的公网IP、记得是当前服务器公网IP、别使用localhost这些冬冬、不然客户端会找不到迩的服务器的!

 

接着设置PSK预共享密码、在/etc/目录下创建ipsec.secrets文件

vim /etc/ipsec.secrets

输入以下内容

192.168.1.102 %any: PSK "123456"

同样、192.168.1.102要切换成迩的服务器公网IP、123456为迩的预共享密码、请更改成迩喜欢的安全码


然后修改网络策略

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

这里使用了shell的循环语法、迩要一句一句的输入、大致的意思就是把/proc/sys/net/ipv4/conf/目录下的所有目录的accept_redirects和send_redirects用0来填充、意思就是把这些属性都关闭吧、

然后重启IPSec服务、再验证是否已经正常了

/etc/init.d/ipsec restart
/usr/local/sbin/ipsec verify

如果遇到有ERROR或者WANGRING、则参看这个文章:http://www.cnblogs.com/klobohyz/archive/2012/02/04/2337775.html

还有ipsec并不会自动启动、如果重新启动请手机启动ipsec服务器或者写自动运行脚本

 

以上就已经把IPSec部署好了、接下来部署L2TP

首先获取l2tp-control、并安装

wget http://nchc.dl.sourceforge.net/project/rp-l2tp/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是建立在/var/run/上面、意味着服务器重启会把里面的这些冬冬都删除掉、所以为了以后方便、最好把后面两句命令写成自动执行的shell、这样重启服务器就自动在run目录里建立xl2tpd目录、然后再搞链接、

 

然后安装xl2tpd、先安装依赖包

apt-get -y install libpcap-dev 

再安装xl2tpd、

wget -c http://www.xelerance.com/wp-content/uploads/software/xl2tpd/xl2tpd-1.2.8.tar.gz
tar -zxf xl2tpd-1.2.8.tar.gz
cd xl2tpd-1.2.8
make install

再进行xl2tpd的配置、在etc目录下新建xl2tpd目录、再往里面新建一个xl2tpd.conf文件

mkdir /etc/xl2tpd
vim /etc/xl2tpd/xl2tpd.conf

在里面输入以下内容

[global]
ipsec saref = yes

[lns default]
local ip = 10.10.11.1
ip range = 10.10.11.2-10.10.11.245
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

注意这里、如果迩刚刚执行ipsec verify命令时是不支持saref的话、这里的ipsec saref请设置为no、而local ip和ip range请不要与当前网络发生冲突、local ip就是当服务器与客户端建立了VPN时服务器端的虚拟IP、下面的ip range则是客户端在VPN里的IP

然后再安装ppp包和设置VPN用户、如果迩之前安装过pptp、请略过这些步骤

安装ppp包

apt-get -y install ppp

配置xl2tpd文件、在/etc/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

ms-dns那两个为google提供的公共DNS服务器、迩可以改成电信提供的DNS也可以

 

添加VPN用户、这个VPN用户是和pptp共用同一个文件的、迩可以使同一个用户同时作用于pptp和l2tp、也可以将两个用户分开来设定、编辑chap-secrets文件

vim /etc/ppp/chap-secrets

输入以下内容

user * 123456 *

建立一个用户名为user、密码为123456的vpn用户、第一个星号表示同时支持pptp和l2tp、迩可以写成pptpd或者xl2tpd、这样就只支持其中一种协议了、后面一个星号表示由VPN服务器自动分配IP地址

 

然后设置数据包转发、同样如果在pptp里已经设置过了这里可以不再设置

sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sysctl -p

这里的意思就是把存在/etc/sysctl.conf文件里包含#net.ipv4.ip_forward=1的行统一都取消掉注释、然后执行sysctl -p使修改后的sysctl.conf立即生效

 

然后设置iptables的转发

iptables -t nat -A POSTROUTING -s 10.10.11.0/24 -o eth0 -j MASQUERADE

注意这里的10.10.11.0的填写是与xl2tpd.conf里的IP设定有关的、因为之前已经设定了local ip为10.10.11.1所以这里才设定成10.10.11.0、后面的24表示子网掩码为255.255.255.0、因为前面设置的分配IP就是以C类子网来划分的

 下面就只要启动xl2tpd服务就大功造成了

/usr/local/sbin/xl2tpd
/usr/local/sbin/xl2tpd -D #以调式模式启动

 

注意iptables会在重启后失效的、请使用iptables-save先保存一份规则然后在网络启动时再使用iptables-restore来加载这个文件、

至于l2tp与freeradius的整合、只需要在options.xl2tpd的尾部加上

plugin /usr/lib64/pppd/2.4.5/radius.so
plugin /usr/lib64/pppd/2.4.5/radattr.so
radius-config-file /usr/local/etc/radiusclient/radiusclient.conf

具体方法请参看这文章的PART II:http://www.cnblogs.com/klobohyz/archive/2012/02/04/2338675.html

 

另外如果


 

参考文章:

https://wangyan.org/blog/debian-l2tp-ipsec-vpn.html

http://zyj.me/article/ipv6-l2tp-vpn

http://ttz.im/blog/2011/04/577

 

至于windows客户端L2TP/IPSec的连接方式就不详细讲了、主要在安全那里更改协议成L2TP/IPSec、并在高级设置里填写上预共享密钥就可以了

 



 

posted @ 2012-02-04 16:04  klobodnf  阅读(8237)  评论(0编辑  收藏  举报