之前不是一直L2TP搭建失败么,因为是买的openvz的vps,所以总是失败,几经周折找了个8.5$一年的低端的KVZ的vps,买完就折腾,后台挂载了debian的映像,VNC连接上进行了系统的安装,然后就是对L2TP IPSEC 的安装。

他哥这个连vim都木有,用不惯vi,所以先装个vim(记得用su命令切换到root权限下)

apt-get -y install vim

进入opt下,新建一个文件

mkdir test.sh

编辑文件

vim test.sh

复制以下内容进去后保存,账号密码啥的自己看着改。

#!/bin/sh

#VPN 账号
vpn_name="test"

#VPN 密码
vpn_password="test123456"

#设置 PSK 预共享密钥
psk_password="test123456"

#获取公网IP
ip=`ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`


#安装 openswan、xl2tpd(有弹对话框的话直接按回车就行)
apt-get install -y openswan xl2tpd screen


#备份 /etc/ipsec.conf 文件
ipsec_conf="/etc/ipsec.conf"
if [ -f $ipsec_conf ]; then
cp $ipsec_conf $ipsec_conf.bak
fi
echo "
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=$ip
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
dpddelay=40
dpdtimeout=130
dpdaction=clear
" > $ipsec_conf



#备份 /etc/ipsec.secrets 文件
ipsec_secrets="/etc/ipsec.secrets"
if [ -f $ipsec_secrets ]; then
cp $ipsec_secrets $ipsec_secrets.bak
fi
echo "
$ip %any: PSK \"$psk_password\"
" >> $ipsec_secrets



#备份 /etc/sysctl.conf 文件
sysctl_conf="/etc/sysctl.conf"
if [ -f $sysctl_conf ]; then
cp $sysctl_conf $sysctl_conf.bak
fi
echo "
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
" >> $sysctl_conf
sysctl -p

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


#设置 l2tp
xl2tpd="/etc/xl2tpd/xl2tpd.conf"
if [ -f $xl2tpd ]; then
cp $xl2tpd $xl2tpd.bak
fi
echo "
[global]
ipsec saref = yes

[lns default]
ip range = 10.1.2.2-10.1.2.255
local ip = 10.1.2.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
" > $xl2tpd


#设置 ppp
options_xl2tpd="/etc/ppp/options.xl2tpd"
if [ -f $options_xl2tpd ]; then
cp $options_xl2tpd $options_xl2tpd.bak
fi
echo "
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
" > $options_xl2tpd

#添加 VPN 账号
chap_secrets="/etc/ppp/chap-secrets"
if [ -f $chap_secrets ]; then
cp $chap_secrets $chap_secrets.bak
fi
echo "
$vpn_name * $vpn_password *
" >> $chap_secrets


#设置 iptables 的数据包转发
iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward


/etc/init.d/ipsec stop

/etc/init.d/xl2tpd stop

/etc/init.d/ipsec start

screen -dmS xl2tpd xl2tpd -D

ipsec verify

echo "###########################################"
echo "## L2TP VPN SETUP COMPLETE!"
echo "## VPN IP : $ip"
echo "## VPN USER : $vpn_name"
echo "## VPN PASSWORD : $vpn_password"
echo "## VPN PSK : $psk_password"
echo "###########################################"

然后按ESC,按“:”键,输入wq!保存退出。

接下来赋予脚本可执行权限。

chmod +x test.sh

执行脚本自动安装

./test.sh

稍后就会提示安装完毕了。
看看这,执行了
ipsec verify后一切OK。

Version check and ipsec on-path                                 [OK]
Linux Openswan U2.6.28/K2.6.32-5-686 (netkey)
Checking for IPsec support in kernel [OK]
NETKEY detected, testing for disabled ICMP send_redirects [OK]
NETKEY detected, testing for disabled ICMP accept_redirects [OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for NAT-T on udp 4500 [OK]
Checking for 'ip' command [OK]
Checking for 'iptables' command [OK]

至此,就可以用移动设备使用L2TP/IPSec PSK模式进行VPN的连接了。

事情还没有完,还要编辑添加开机启动:

sudo vim /etc/init.d/rc.local

在尾部添加

iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
/etc/init.d/ipsec restart

保存后,重启,测试下VPN如果连接正常,就都OK了。

对于linux真的不太了解,但好歹是解开了之前没有搞定L2TP的心结。
实体机就用SSH就好了~

以上脚本内容参考:http://dhq.me/one-key-deploy-ipsec-l2tp-vpn-on-debian-CentOS

Related Posts: Debian-L2TP-VPN搭建流程 :