l2tp vpn搭建总结(linode ubuntu)

前段时间开始,公司的vpn开始不太好用了,因此我也逐步感觉到墙的力量。

恰好@Zealot有一个linode的vps,之前他搭了一个pptp的vpn,但是联通3g又不能使用pptp vpn,于是尝试自己捣鼓一个l2tp的vpn,断断续续尝试了几次,终于在今天成功了。

参考了很多网上的文章,发现网上的文章都没有涵盖到我碰到的种种问题,因此在这里针对我的案例,写一篇总结性的文章。

首先,按照apple4us的文章,安装一系列软件,写配置:

sudo aptitude install openswan

vim /etc/ipsec.conf

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

注意,ipsec.conf对格式要求很严格,缩进一定要有。

vim /etc/ipsec.secrets

222.222.222.222 %any: PSK “fan1qiang”

这里的psk要解释一下,这个是你在连接l2tp vpn时,需要填写的secret。
此外,别忘记把222.222.222.222替换成你自己服务器的ip(一共两处)。继续:

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

然后检查ipsec是否ok了

sudo ipsec verify

下面是我最终的结果:

Version check and ipsec on-path [OK]
Linux Openswan U2.4.12/K2.6.18.8-linode22 (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 for RSA private key (/etc/ipsec.secrets) [DISABLED]
ipsec showhostkey: no default key in “/etc/ipsec.secrets”
Checking that pluto is running [OK]
Two or more interfaces found, checking IP forwarding [OK]
Checking NAT and MASQUERADEing
Checking for ‘ip’ command [OK]
Checking for ‘iptables’ command [OK]
Opportunistic Encryption Support [DISABLED]

其中需要注意两项:Checking for RSA private key和Opportunistic Encryption Support,第一项其实你大可不必管他,disable或者ok都行。如果你实在要解决,可以:

ipsec newhostkey –file /root/tmpkey
cat /root/tmpkey >> /etc/ipsec.secrets
rm /root/tmpkey

第二项DISABLED是正常状态。

出了问题不要被这两项迷惑,不是他们导致的。

接下来启动:

sudo /etc/init.d/ipsec restart

如果出现错误,按照他指出的行数自己看看。接下来是l2tpd。

sudo aptitude install xl2tpd

vim /etc/xl2tpd/xl2tpd.conf

[global]
ipsec saref = yes

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

然后安装、配置ppp:

sudo aptitude install ppp

vim /etc/ppp/options.xl2tpd

require-mschap-v2
ms-dns 208.67.222.222
ms-dns 208.67.220.220
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

添加一个vpn用户:

vim /etc/ppp/chap-secrets

test l2tpd testpassword *

启动l2tpd:

sudo /etc/init.d/xl2tpd restart

设置iptables转发:

iptables –table nat –append POSTROUTING –jump 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

vi /etc/sysctl.conf
修改 net.ipv4.ip_forward = 1
sysctl –p

好了,如果一切顺利,你的l2tp应该装好了,尝试用iphone或者android连接一下。如果还有问题,请继续。

第一个问题是执行sudo /etc/init.d/xl2tpd restart时,无法看到执行状态,因此很多时候其实服务没有起来。你可以用ps aux | grep l2tp确认一下,如果发现的确没有这个进程,请使用

xl2tpd -D

开启debug模式启动。

如果你碰见了一些很莫名其妙的配置文件错误提示,比如:

parse_config: line 13: data ‘n parameters:’ occurs with no context

而实际上你这一行并没有错误,请检查一下/etc/xl2tpd/xl2tpd.conf 里面是不是有一行很长的注释,把这些注释分成多行或者删除。

第二个问题,如果你启动了xl2tpd,但是一连接iphone就提示“l2tp-vpn server did not respond”,或者android提示”challenge failed”,那请看看你的openswan 是不是 2.6.22或2.4.12:

dpkg -l | grep openswan

如果是,请重新编译安装:

sudo aptitude install libgmp3-dev gawk flex bison
wget http://www.openswan.org/download/openswan-2.6.24.tar.gz
tar xf openswan-2.6.24.tar.gz
cd openswan-2.6.24
make programs
sudo make install

如果你还有其他问题,欢迎在下面留言,我会尝试帮你解决。

参考文章:
https://apple4.us/2010/05/setting-up-l2tp-vpn-on-debian-ubuntu.html
http://b.gkp.cc/posts/setup-ipsec-l2tp-on-centos-55.html
http://suoluo.org/2010/04/4/ (上面三篇文章是全面介绍安装过程的)
http://lists.openswan.org/pipermail/users/2006-November/011029.html (介绍如何fix Checking for RSA private key)
http://lifegoo.pluskid.org/?p=65 (指出xl2tpd.conf的注释问题)

trackback Tags: 评论

iphone上的网游:we rule

最近一直在玩we rule,一个iphone上的网络游戏,app store中可以免费下载。
基本介绍
简单的说,这是一个让玩家建设和发展自己的王国,同时能和其他玩家进行互动的网游。
一开...

trackback Tags: 评论 (1)

opera下的onload、onunload事件无法正确处理?

今天,QA在测试JS框架的时候发现了一个问题:opera下不能绑定onunload事件,最新的opera 10.51也不行。
网上的解释千奇百怪,有说opera不支持unload事件的,有说使用beforeunload事件代替unload事...

trackback Tags: 评论 (1)

博客迁移到nginx

Nginx是一个高性能的HTTP服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的。nginx采用epoll模型来进行网络IO,效率比apache的select模型高...

trackback Tags: 评论

傲游、世界之窗下的getBoundingClientRect问题

问题
今天,同事爆料suggeestion在傲游、世界之窗下,使用滚轮缩放后,suggestion的框和input不能对齐,会出现类似下面的效果(示意图):

页面是quirk模式,如果换用standard模式,就...

trackback Tags: 评论

添加第一个功能按钮 – 在线编辑器(3)

在实现了在网页中插入一个可编辑区域以后,用户已经可以在这个区域中操作富文本内容。但是做为一个真正的编辑器是要有工具栏的,用户能通过工具栏上的按钮方便的对选中的文本进行...

trackback Tags: 评论

得到一个可编辑区域 – 在线编辑器(2)

让一个区域可编辑是实现编辑器最基础的内容之一。
在应用场景中,编辑器的初始状态,要么是从一个空的编辑器(新建文档),要么是从一个已经有内容的编辑器(编辑文档),因此...

trackback Tags: 评论

历史、现状和目标 – 在线编辑器(1)

关于本系列文章
计划暂时是这样,首先介绍一些历史、知识背景,然后详细分析现状和需求,开始设计一个可扩展,低耦合的编辑器,最后针对一些难点问题进行单个分析。
历史、...

trackback Tags: 评论 (1)

善用分布式版本管理系统管理个人代码

大多数人都知道或者善用多种版本管理系统,传统集中式版本管理系统有CVS、SVN等,后来,出现了一些分布式管理系统,如GIT、mercurial等。几乎所有有开发工作的公司,都会选择一个版本管...

trackback Tags: 评论

在javascript编程中灵活使用try-catch

上周,在分享家的qq交流群里,经常有人向我反馈不能下载东西。于是直接联系了一个用户,发现他的浏览器报出pageTracker对象不存在错误。
问题很显然了,由于我在下载链接的onmousedown...

trackback Tags: 评论