如何在 Debian / Ubuntu 服务器上架设 L2TP / IPSec VPN

标签: Tutorial | 发表时间:2010-05-03 18:15 | 作者:Lawrence Li Wang
出处:http://apple4.us

很多公司出于商业资料安全性的考虑,要求员工在移动办公过程中使用 VPN 接入互联网。目前国内用户比较熟悉的 VPN 接入方式是 PPTP,但有时你或许需要用安全性更强的 L2TP / IPSec 方式接入。

本站的 Rio 最近在一台 Ubuntu 和一台 Debian 主机上配置了 L2TP / IPSec VPN,并在自己的博客上做了记录。原文以英文写就,我把它大致翻译了一下,结合我和 Rio 在设置过程中的通信,成文如下,希望能帮到有需要的朋友。以下文字的全部版权归 Rio 所有,如有错误,责任完全归我。—— 编者

首先解释一个问题:在 iPhone 的 VPN 设置介面里(Settings >> General >> Network >> VPN),你可以看到三个标签:L2TP, PPTP, IPSec。但上面我们又讲本次介绍的 VPN 方式叫「L2TP / IPSec」,这两者究竟是什么关系?

iPhone's VPN setup panel

这三个标签确实令人混淆,准确的写法应该是:L2TP over IPSec, PPTP, Cisco IPSec。PPTP 跟另外两者关系不大,且大家较为熟悉,暂且不提,L2TP 和 IPSec 的区别如下。

L2TP:一个「包装」协议,本身并不提供加密和验证的功能。

IPSec:在 IP 数据包的层级提供加密和验证功能,确保中间人无法解密或者伪造数据包。

本来,只用 IPSec 就可以实现 VPN,Mac OS X 和 Linux 都支持。但是 Mac OS X 和 iPhone OS 都推荐使用 L2TP over IPSec,在两者的图形介面上也只能设置这个。L2TP / IPSec 是业界标准,微软也支持。而只用 IPSec 的常见于 Linux-to-Linux 的应用,比如将两个位于不同地区的办公室网络安全地连在一起。这多是固定 IP 路由器到固定 IP 路由器级别的连接,只需保证数据包不被中途截获或者伪造就可以,故使用 L2TP 的意义不大。L2TP / IPSec 主要是实现所谓「Road Warrior」的设置,即用变动的客户端连固定的服务器。

Cisco 的 VPN 用的也是 IPSec 加密,但那是一套不同于 L2TP 的私有包装协议,用于提供用户管理之类的功能,因此一般都需要用 Cisco 自家的 VPN 客户端连接。iPhone / iPad 的 VPN 设置介面中的 IPSec 标签里有 Cisco 的标识,就是这个原因。

以下是在 Ubuntu 和 Debian 主机上架设 L2TP / IPSec VPN 的步骤,一共十四步。你需要有服务器的 root 权限(所以 DreamHost, BlueHost, MediaTemple 这些服务供应商帮你把一切打点周到的主机就无缘了),也需要一些基本的 Linux 知识。不然的话,我们还是推荐您找一位比较熟技术的朋友帮忙。

一、安装 IPSec。如上所述,IPSec 会对 IP 数据包进行加密和验证。这意味着你的电脑 / 移动设备与服务器之间传输的数据无法被解密、也不能被伪造。我推荐用 openswan 这个后台软件包来跑 IPSec。

用以下命令安装 openswan:

sudo aptitude install openswan

二、用文字编辑器打开 /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=YOUR.SERVER.IP.ADDRESS
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any

三、用文字编辑器打开 /etc/ipsec.secrets,改成这样:

YOUR.SERVER.IP.ADDRESS   %any:  PSK "YourSharedSecret"

(别忘了把「YOUR.SERVER.IP.ADDRESS」这部分换成你的服务器的 IP 地址,把「YourSharedSecret」部分换成随便一个字串,例如你喜欢的一句话,等等。)

四、运行以下命令:

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

五、检查一下 IPSec 能否正常工作:

sudo ipsec verify

如果在结果中看到「Opportunistic Encryption Support」被禁用了,没关系,其他项 OK 即可。

六、重启 openswan:

sudo /etc/init.d/ipsec restart

七、安装 L2TP。常用的 L2TP 后台软件包是 xl2tpd,它和 openswan 是同一帮人写的。

运行以下命令:

sudo aptitude 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

这里要注意的是 ip range 一项里的 IP 地址不能和你正在用的 IP 地址重合,也不可与网络上的其他 IP 地址冲突。

九、安装 ppp。这是用来管理 VPN 用户的。

sudo aptitude install ppp

十、检查一下 /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

注意 ms-dns 两行我填的是 OpenDNS。如果你想用其他的 DNS 服务器(例如谷歌的公共 DNS),请自行更换。

十一、现在可以添加一个 VPN 用户了。用文字编辑器打开 /etc/ppp/chap-secrets:

# user      server      password            ip
test        l2tpd       testpassword        *

如果你之前设置过 PPTP VPN,chap-secrets 文件里可能已经有了其他用户的列表。你只要把 test l2tpd testpassword * 这样加到后面即可。

十二、重启 xl2tpd:

sudo /etc/init.d/xl2tpd restart

十三、设置 iptables 的数据包转发:

iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

十四、因为某种原因,openswan 在服务器重启后无法正常自动,所以我们可以在 /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

到这里,设置工作已经基本完成。你可以用 iPhone 或 iPad 试着连一下。记得在「Secret」中填入你在上述第三步里填的 YourSharedSecret。

如果连接成功,上网也没问题的话,恭喜你,大功告成。如果连不上,恐怕还得多做一步。

Ubuntu 9.10 自带的 openswan 版本是 2.6.22, Debian Lenny 带的版本是 2.4.12。这两个版本的 openswan 都有问题。我们的测试结果表明,2.6.24 版的 openswan 可以在上述两版的 Linux 操作系统下正常工作。所以如果做完以上十四步还是连不上的话,请考虑从源码编译 openswan 2.6.24 :

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

编译需要一段时间。你的 Linux 内核版本需要高于 2.6.6。

然后可以删除原先通过 aptitude 安装的 openswan,并重启之:

sudo aptitude remove openswan
sudo /etc/init.d/ipsec restart

相关 [debian ubuntu 服务器] 推荐:

如何在 Debian / Ubuntu 服务器上架设 L2TP / IPSec VPN

- Wang - apple4us
很多公司出于商业资料安全性的考虑,要求员工在移动办公过程中使用 VPN 接入互联网. 目前国内用户比较熟悉的 VPN 接入方式是 PPTP,但有时你或许需要用安全性更强的 L2TP / IPSec 方式接入. 本站的 Rio 最近在一台 Ubuntu 和一台 Debian 主机上配置了 L2TP / IPSec VPN,并在自己的博客上做了记录.

服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS?

- - 知乎每日精选
早期,我们使用 Debian 作为服务器软件,后来转向了CentOS,主要原因如下:. 1、CentOS/RHEL的生命周期是7年,基本上可以覆盖硬件的生命周期,也就意味着一个新硬件安装以后,不用再次安装操作系统. 要知道重新折腾一个生产机是很麻烦而且有风险的事情. [2012.2.1]今天刚刚收到红帽子的通知邮件,RedHat 5, RedHat 6的生命周期,延长到10年,太牛叉了.

Debian / Ubuntu 只安裝安全更新的方法

- MorrisC - Jamyy's Weblog
讓 apt-get upgrade 只安裝安全更新. 參考資料: package management - How can I install just security updates from the command line.

Ubuntu下赌ARM服务器

- Tim - Solidot
今日无数手机平板使用的低能耗处理器能否撑起未来的服务器市场. Canonical计划推出支持ARM架构的Ubuntu服务器版本. Ubuntu Linux并不是x86服务器市场的重量级选手,Red Hat才是. 但通过与ARM合作打造ARM服务器,Canonical正努力赢得更多市场份额. 计划于2011年10月发布的Ubuntu Server 11.10,将同步推出支持x86、x86-64和ARM架构的版本.

在 Ubuntu 上安装 NX 服务器

- - vpsee.com
远程登陆 Linux 图形桌面有很多方式,比如使用 RFB (Remote Frame Buffer) 协议的各种 VNC 工具,TightVNC, UltraVNC, Xvnc 等,使用 NX 的 NoMachine, freenx, neatx 等. NX 通过 X11 调用来通信,比 VNC 这种通过截图似的通信要快的多,而且安全(通过 ssh),更适合在网速不高(相比局域网来说)的 Internet 上应用.

升级Ubuntu 10.04,10.10,11.04到Ubuntu 11.10 (桌面&服务器)

- tackwell - 笨兔兔
Ubuntu 11.10 最终版将于10月13日发布. Ubuntu 11.10 Beta版本发布. 如果您使用的Ubuntu 10.04,10.10,11.04版本,可使用下面方面升级您现在的版本到Ubuntu 11.10最新版本. #1,升级有风险,千万需谨慎. 安全起见,最好将您最重要的数据先转移到U盘或移动硬盘处.

Debian 6.0.3 发布

- Adam - cnBeta.COM
Debian 项目近日宣布Debian 6.0 第三个更新版本发布(代号squeeze),此更新主要增加了对安全问题的改正,稳定性,一起严重的问题和一些调整. 安全建议已另行公布,并引用其中.

Debian 7.0 "Wheezy" 发布

- - LinuxTOY
Debian 项目团队在今天发布了 代号为“Wheezy”的 7.0 稳定版本. 该版本包括 multiarch 支持、部署私有云的工具、改进的安装器、完整的多媒体编/解码器、kFreeBSD kernel 8.3 和 9.0 支持、以及能够移除第三方仓库的前端等功能. Debian 7.0 具有 Linux 3.2、X.Org 7.7、GNOME 3.4、KDE 4.8.4、Xfce 4.8、GCC 4.7.2、GIMP 2.8.2、LibreOffice 3.5.4、Iceweasel 10、Icedove 10、Perl 5.14.2、Python 2.7.3/3.2.3、Xen 4.1.4 等更新包.

Ubuntu安装squid作为内网的代理服务器(Proxy)的简单配制

- - CSDN博客系统运维推荐文章
我有一台Ubuntu Linux的机器,它有无线网卡,可以上外网. 我想把它设置为代理服务器,这样内网里的其他机器就可利用它作为代理上外网了. 在Ubuntu Linux上安装squid. 安装好后会自动启动,如果使用默认配制,在另一台机器上设置代理(这是我在Chrome上设置代理):. 看来还没有Access的权限,配制squid.

基于云的Live Debian系统

- greenar - Solidot
goofegg 写道 "中国科技大学的学生建造了一套校内使用的基于云的Live Debian系统. 文章称:“借助于科大PXE服务(校外无法访问),我们正在定制一个‘云存储’Linux 系统. 此前,科大校园内通过PXE启动可以进入一些Live Linux系统,但在这些系统中的 所有修改都仅存在于内存中,关机后就丢失了.