在Linode的Ubuntu上搭建L2TP over IPSec服务器

之前在Linode上部署的openVPN服务在我把instance迁移到东京之后就歇菜了。之后特地花了时间重新配置了一把,但是还是出现了连接没问题,仍然无法访问外网的问题(编者按,L2TP配置完之后触类旁通的基本可以肯定是路由问题,也有把握修复了,这是后话)。考虑到ipad只能支持L2TP,所以特地花了时间搞了一把,特地记录一下。
不得不说运气不错,找到一篇很赞的总结文在Linode上搭建L2TP / IPSec VPN,不仅总结了自己的问题,而且还提供了其他详细教程的链接,相当方便。


1)安装IPSec
没啥好说的,Ubuntu就是方便阿方便。

sudo apt-get install openswan

2) 配置IPSec Connection
修改/etc/ipsec.conf,注意把%YOUR.SERVER.IP.ADDRESS%替换成你的服务器地址。

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=%YOUR.SERVER.IP.ADDRESS%
leftprotoport=17/1701
right=%any
rightprotoport=17/%any

3) 配置IPSec共享密钥
修改/etc/ipsec.secrets,注意把%YOUR.SERVER.IP.ADDRESS%替换成你的服务器地址。另外国外论坛也有提到第二种写法可以避免一些不必要的问题。

%YOUR.SERVER.IP.ADDRESS% %any: PSK “YourSharedSecret”

: PSK “YourSharedSecret”

4)修改包转发设置
执行下列命令

for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -p
ipsec verify #用来验证配置

最后重启一下ipsec服务器。

sudo /etc/init.d/ipsec restart

5)安装配置xl2tpd
再次赞叹ubuntu的方便。

sudo apt-get install xl2tpd

修改/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

6)安装配置ppp

sudo apt-get install ppp

修改或者创建/etc/ppp/options.xl2tpd,注意我这里用的是Google的Public DNS。

[global]
ipsec saref = yes
[lns default]
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

添加VPN用户,修改/etc/ppp/chap-secrets

# user server password ip
xiuxiu l2tpd testpassword *

重启xl2tpd

sudo /etc/init.d/xl2tpd restart

7)设置 iptables 的数据包转发
执行下列程序。

iptables –table nat –append POSTROUTING –jump MASQUERADE



8)设置启动脚本
关于IP路由和转发的配置在服务器重启后会消失,所以需要在启动脚本中添加相关内容.修改/etc/rc.local

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
/etc/init.d/ipsec restart



问题汇总
Ubuntu openswan errno 111, origin ICMP type 3 code 3 (not authenticated)
这是我自己遇到的问题,郁闷了半天,结果是最新的openswan for ubuntu有bug,与最新的Linux Kernel有冲突。去openswan的官网下载较老的版本openswan_2.6.32-1xelerance1_i386.deb就可以了。


ERROR: asynchronous network error report on eth0 (sport=4500) for message to your.client.ip.address port 4500, complainant your.server,ip.address: No route to host [errno 113, origin ICMP type 3 code 1 (not authenticated)]
在 ipsec.conf 中加上 leftnexthop=your.server.gateway.ip 应该可以解决。


The remote system is required to authenticate itself
pppd[4407]: but I couldn’t find any suitable secret (password) for it to use to do so.

这是由于验证过程中未使用 l2tp-secrets 中的密码(至于为何如此我不懂,另请高人解释),而是使用 pptp(L2TP/IPsec 也是要走 pptp 的)的密码,所以需要在 /etc/ppp/chap-secrets 中设置密码(具体请见上面如何搭建 PPTP VPN)。


xl2tpd[4062]: Maximum retries exceeded for tunnel 44651. Closing.
在/etc/ipsec.conf里的L2TP-PSK-noNAT中加上
dpddelay=40
dpdtimeout=130
dpdaction=clear

参考链接
Using Linux as an L2TP/IPsec VPN client
openswan_2.6.32-1xelerance1_i386.deb

如何在 Debian / Ubuntu 服务器上架设 L2TP / IPSec VPN
Linode CentOS / Debian 部署 ipsec+l2tpd 简要笔记
Guide: Openswan, XL2TP and PPP on Ubuntu Maverick for iPhone VPN Connection
联通连不通─VPN
linux l2tp vpn install


推荐链接
有兴趣的朋友可以使用我的referral链接注册使用Linode。
http://www.linode.com/?r=513a31440dd0a6c0980cc05a164b4ae2520a19d6

 

在Linode上安装openVPN

一些朋友需要VPN访问一些墙外资源。本着服务器放着不用是浪费的原则我决定搭一个VPN服务器帮助解决朋友的需求。
不得不说Linode的文档非常齐全,而且很傻瓜,照着作一遍基本解决了所有的问题。

openVPN安装

Ubuntu方便是没话说的。

apt-get update
apt-get upgrade --show-upgraded
apt-get install openvpn udev

这就是所有你需要的软件了。安装包里提供了密钥工具包“easy-rsa”,把它拷贝到配置文件夹下。

cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn

修改工具包中的文件vars,按照你的需要配置相关信息

export KEY_COUNTRY="US"
export KEY_PROVINCE="OH"
export KEY_CITY="Oxford"
export KEY_ORG="Ducklington"
export KEY_EMAIL="squire@ducklington.org"

配置你的密钥体系

首先需要初始化PKI.

cd /etc/openvpn/easy-rsa/2.0/
source . /etc/openvpn/easy-rsa/2.0/vars
. /etc/openvpn/easy-rsa/2.0/clean-all
. /etc/openvpn/easy-rsa/2.0/build-ca

接着生成服务器私钥。会有一些问题和提示,选择默认和Y就可以了。

. /etc/openvpn/easy-rsa/2.0/build-key-server server

然后是生成客户端的证书.其中client1是证书的名字,你可以按照你的需要填写。如果需要生成多个客户端证书,重复该步骤就可以了。

. /etc/openvpn/easy-rsa/2.0/build-key client1

最后生成Diffie Hellman Parameters。

. /etc/openvpn/easy-rsa/2.0/build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time

如果一切正常,会出现如上所示的信息。
密钥的配置基本就是这样,最后把生成的密钥文件和easy-rsa提供的服务器端配置文件样本拷贝到配置文件夹下。

cd /etc/openvpn/easy-rsa/2.0/keys
cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn

cd /usr/share/doc/openvpn/examples/sample-config-files
gunzip -d server.conf.gz
cp server.conf /etc/openvpn/
cp client.conf ~/
cd ~/

配置openVPN链接

密钥的配置保证了客户端和VPN服务器的链接。还要配置openVPN对网络包地转发规则。
修改/etc/openvpn/server.conf,添加如下语句

push "redirect-gateway def1"

修改/etc/sysctl.conf,添加如下语句

net.ipv4.ip_forward=1

为VPN会话添加下列变量。

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

为了保证每次启动这边规则都生效,可以把后面四个语句添加到/etc/rc.local中去。
除了IP包地转发规则,我们还需要处理来自客户端的dns请求,安装dnsmasq来解决这个问题。

apt-get update
apt-get install dnsmasq

修改/etc/openvpn/server.conf,添加如下语句

push "dhcp-option DNS 10.8.0.1"

OK,一切搞定,启动openVPN服务吧。

/etc/init.d/openvpn restart

客户端的使用

Mac下的openVPN客户端
http://code.google.com/p/tunnelblick/
Windows下的openVPN客户端
http://openvpn.se/download.html
将上文生成的client.conf, ca.crt, client1.key, client1.crt拷贝到你的电脑,配合客户端使用即可。

参考连接

http://library.linode.com/networking/openvpn/ubuntu-10.04-lucid

推荐连接

有兴趣的朋友可以使用我的referral链接注册使用Linode,将获得10%的优惠。
http://www.linode.com/?r=513a31440dd0a6c0980cc05a164b4ae2520a19d6

 

无觅相关文章插件,快速提升流量