基于 Debian 6.x 搭建 PPTP / L2TP IPSec VPN
生活在一个拥有庞大局域网的国度,对 VPN 的需求是越来越大了,老是买吧不划算,自己用得特别多,还要跟那些用 VPN 玩美服的小屁孩一起堵,于是果断决定在 Linode 的一台闲置 VPS 上搭建一个。其中各种艰辛啊,Google 找回来的搭建方案又无数种,个个说法不一,又找遍基友们实践,最终终于把这个方案折腾出来了。(PS:Linode 是某朝重点关照对象,在使用 VPN 时要自行承受 IP 被 Ban 的风险。)
这台 VPS 是 Debian 6.0 系统的,Plan 是 Linode 1024,首先我们 SSH 登陆到终端,更新源
apt-get update
先来安装配置最基本的 PPTP 和 L2TP,PPTP 采用 pptpd,L2TP 采用 xl2tpd。
apt-get install ppp pptpd xl2tpd libpcap-dev
安装好之后先来配置 pptpd。
mv /etc/ppp/pptpd-options /etc/ppp/pptpd-options.bak
touch /etc/ppp/pptpd-options
nano /etc/ppp/pptpd-options
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
nodefaultroute
lock
nobsdcomp
ms-dns 8.8.8.8
ms-dns 8.8.4.4
mv /etc/pptpd.conf /etc/pptpd.conf.bak
touch /etc/pptpd.conf
nano /etc/pptpd.conf
option /etc/ppp/pptpd-options
debug
logwtmp
localip 10.0.22.1
remoteip 10.0.22.9-250
pptpd 弄好之后配置 xl2tpd,文件位于 /etc/xl2tpd/xl2tpd.conf
mv /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.bak
touch /etc/xl2tpd/xl2tpd.conf
nano /etc/xl2tpd/xl2tpd.conf
[global]
ipsec saref = no
[lns default]
ip range = 10.0.23.10-10.0.23.255
local ip = 10.0.23.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
然后再将 xl2tpd 附加到 ppp 中
mv /etc/ppp/options.xl2tpd /etc/ppp/options.xl2tpd.bak
touch /etc/ppp/options.xl2tpd
nano /etc/ppp/options.xl2tpd
require-mschap-v2
refuse-mschap
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
配置完成之后就来搭建 IPSec。IPSec 的实现方案有很多,我们通常使用更加方便的 OpenSwan,直接使用 apt-get 安装即可,网上很多资料都说要自己编译,我编译了 N 个 Version 都是有问题的!后来直接安装反而成功了。
apt-get install openswan
安装的时候会出现一个窗口问你是否使用 X.509 证书验证,这个用不着,NO!安装完成后就可以开始配置。
mv /etc/ipsec.conf /etc/ipsec.conf.bak
touch /etc/ipsec.conf
nano /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=
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
dpddelay=30
dpdtimeout=120
dpdaction=clear
这里要特别特别注意,IPSec 对格式很敏感,少了缩进或者少了个空行它都不行。Why you so diao?必须按照格式输入,我也提供样本下载,直接按自己实际情况修改就好了。
接着要配置自己的 IPSec 预共享密钥。
nano /etc/ipsec.secrets
%any: PSK""
**这里要空出一行**
要注意的是这个文件必须有一个空行,没有不行,我在这里纠结好久了。
配置好之后终端执行命令设置转发。
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
执行后重启 IPSec 并验证成果
/etc/init.d/ipsec restart
ipsec verify
结果应该如下图,除了最后一个是 Disabled 以外其余均 OK,如果有其他选项 Failed 或者 Disabled 那就要检查下究竟上面哪一步有问题了。
最后,为了达到我们代理上网的目的,还要在 iptables 中转发一次,执行以下命令。
iptables -t nat -A POSTROUTING -j MASQUERADE
最后重启一次 xl2tpd 和 IPSec.
/etc/init.d/xl2tpd restart
/etc/init.d/ipsec restart
然后就可以添加我们的 VPN 账号,进行拨号测试了。
echo "vpntest * password *" >> /etc/ppp/chap-secrets
拨号测试成功!
但转发设置在重启之后就会失效,需要重新设置,所以我们要将设置加入到自启动。Debian 6.0 的真正自启动是 /etc/init.d/rc.local
,并不是/etc/rc.local
,开始我也是出错在这里,将下面的内容添加到 rc.local 文件末端就可以。
#VPN
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/pptpd restart
/etc/init.d/xl2tpd restart
/etc/init.d/ipsec restart
###
保存,大功告成。
配置文件打包下载:Download 1,Download 2
我装了过几次在iphone上不能用,你这个支持哪些平台的设备?
全平台,但凡是Linux做的L2TP在iOS上都不稳定,需要Windows。
算了,还是用ssh代理比较合适!简单明了,没有被墙的地址可以直接访问,这样速度和VPS流量都解决了。
是的,SSH配合Chrome定向很灵活,不过用路由器做路由表也是很不错的
ipsec verify看状态,有一条是这样:
Checking /bin/sh is not /bin/dash [WARNING]
请问该怎么解决呢
系统版本导致显示不同,没有影响
据说PPTP的端口越小速度越快,楼主有进一步优化的方法么?俺这里延迟200,丢包也低,但速度比较慢~
服务器的原因,我使用默认端口,连接之后基本还能保持全速呢
下载倒是能达到满速,看视频就慢了~
楼主用的Linode日本么?
对,还有其他主机,不是Linode的
[…] 搭建VPN参考的是这篇文档 基于Debian 6.x 搭建PPTP/L2TP IPSec VPN […]
修改那些设置可以限制最大连接数呢?
就使用pptpd只能通过设置IP段范围限制最大连接数,不能单个账号限制。需要流控或者更加精准的限制可以用freeradius