在Ubuntu上安装L2TP/IPsec VPN服务器

2010年9月3日 | 分类: 翻墙相关 | 标签: , , , ,

最近用VPN翻墙比较流行, 我也赶了一下潮流: 买了一个Linode的VPS, 安装了最新的Ubuntu Lucid (10.04), 并在上面配置了L2TP服务器.

以下虽然是在10.04上的配置过程, 但应该对其他版本的Ubuntu同样适用.

2010-09-01: Ubuntu ppa没有karmic上的openswan包, 只能自己编译了, 或是下载我预编译的版本, 参照后面说明.

1. 安装OpenSWAN

L2TP(Layer 2 Tunneling Protocol)顾名思义, 是2层隧道协议. 这个协议的认证方式不是非常安全, 因此实际使用中, 往往将L2TP和IPsec结合, 客户端和服务器之间, 首先通过IPsec生成安全信道, 之后再进行L2TP协议的交互.

因此, 安装L2TP服务器, 首先需要安装IPsec软件. 目前在Linux下, 有FreeSWAN, OpenSWAN, StrongSWAN三款IPsec协议的实现. 这里我用的是OpenSWAN.

目前Ubuntu Lucid中官方自带的OpenSWAN版本是2.6.23. 可惜的是, 这个版本的OpenSWAN有bug, 无法和L2TP服务器配合使用, 必须至少升级到2.6.24以后. 因此需要安装Ubuntu提供的非官方OpenSWAN升级版.

Ubuntu Karmic 9.10 安装过程

ppa中没有Ubuntu Karmic的openswan, 安装过程有不一样. 首先下载我预编译的openswan的deb包, 然后安装:

openswan_2.6.28-1xelerance3_i386.deb (1,013.2 KiB, 6 hits)

sudo dpkg -i openswan*i386.deb
sudo apt-get install -f

安装完成后请直接跳过到步骤2: 配置OpenSWAN.

1.1. 首先添加非官方的OpenSWAN apt源:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:openswan/ppa
sudo apt-get update
1.2. 然后检查OpenSWAN的版本, 至少应该是2.6.24
# apt-cache policy openswan
openswan:
  Installed: (none)
  Candidate: 1:2.6.28-1xelerance3
  Version table:
     1:2.6.28-1xelerance3 0
        500 http://ppa.launchpad.net/openswan/ppa/ubuntu/ lucid/main Packages
1.3. 安装
sudo apt-get install openswan

安装过程中如问到: Use an X.509 certificate for this host, 回答NO.

2. 配置OpenSWAN

2.0. 设置命令行变量

在后面的配置过程中, 有一些配置参数可能需要修改. 本文假设L2TP服务器的IP地址是192.168.1.1, VPN网络前缀是10.1.1.0/24, 用户名为user, 密码为1234. 在完成下面的配置之前, 应该首先把这些参数修改成正确的参数. 后面的命令将使用bash的变量替换规则吧配置文件中出现的参数名替换出下面设置的值:

export SERVER=192.168.1.1
export NET=10.1.1
export USER1=user
export PASS1=1234
2.1. 配置sysctl参数
sudo mv /etc/sysctl.conf /etc/sysctl.conf.bak
 
sudo bash -c "cat > /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
EOF
"

上述参数重启后生效, 如果想不重启即时生效, 需要继续完成步骤2:

2.2. 加载sysctl参数
sudo sysctl -p
 
sudo bash -c 'for each in /proc/sys/net/ipv4/conf/*
do
    echo 0 > $each/accept_redirects
    echo 0 > $each/send_redirects
done
'
2.3. 生成iptables配置
sudo mv /etc/rc.local /etc/rc.local.bak
 
sudo bash -c "cat > /etc/rc.local <<EOF
#!/bin/sh -e
iptables -t nat -A POSTROUTING -s $NET.0/24 -o eth0 -j MASQUERADE
exit 0
EOF
"
 
sudo chmod +x /etc/rc.local

类似的, 上述参数重启后生效. 如果想不重启即时生效, 需要继续完成步骤4:

注意: /etc/rc.local文件中引用了$NET参数的值, 检查一下文件输出是否符合预期.

2.4. 加载iptables配置
sudo /etc/rc.local
2.5. 配置ipsec.secrets
sudo mv /etc/ipsec.secrets /etc/ipsec.secrets.bak
sudo bash -c "cat > /etc/ipsec.secrets <<EOF
$SERVER %any: PSK \"$PASS1\"
EOF
"

注意: /etc/ipsec.secrets文件中引用了$SERVER, $PASS1参数的值, 检查一下文件输出是否符合预期.

2.6. 配置ipsec.conf
sudo mv /etc/ipsec.conf /etc/ipsec.conf.bak
sudo bash -c "cat > /etc/ipsec.conf <<EOF
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=$SERVER
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any
EOF
"

注意: /etc/ipsec.conf文件中引用了$SERVER参数的值, 检查一下文件输出是否符合预期.

2.7. 激活ipsec服务

运行下面的命令, 让ipsec服务可以开机自动启动:

sudo update-rc.d ipsec defaults

3. 安装xl2tpd

L2TP服务器软件, 选择与OpenSWAN同样是xelerance公司支持的xl2tpd软件. 该软件可以直接用Ubuntu自带的版本, 安装过程相对简单:

sudo apt-get install xl2tpd

4. 配置xl2tpd

4.0. 设置命令行变量

配置xl2tpd的过程中同样需要替换配置文件中的部分参数, 参数和OpenSWAN命令行变量一样.

4.1. 配置xl2tpd.conf
sudo mv /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.bak
sudo bash -c "cat > /etc/xl2tpd/xl2tpd.conf <<EOF
[global]
ipsec saref = yes
 
[lns default]
ip range = $NET.2-$NET.255
local ip = $NET.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
EOF
"

注意: /etc/xl2tpd/xl2tpd.conf文件中引用了$NET参数的值, 检查一下文件输出是否符合预期.

4.2. 配置options.xl2tpd
sudo mv /etc/ppp/options.xl2tpd /etc/ppp/options.xl2tpd.bak
sudo bash -c "cat > /etc/ppp/options.xl2tpd <<EOF
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
EOF
"
4.3. 配置chap-secrets
sudo mv /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak
sudo bash -c "cat > /etc/ppp/chap-secrets <<EOF
# user      server      password    ip
$USER1       l2tpd       $PASS1       *
EOF
"

注意: /etc/ppp/chap-secrets文件中引用了$USER1, $PASS1参数的值, 检查一下文件输出是否符合预期.

5. 启动L2TP服务器

至此, L2TP/IPsec服务器配置完成. 重启之后, 就可以使用了. 如果不希望重启, 可以运行下面的命令, 手动启动服务:

sudo invoke-rc.d xl2tpd restart
sudo invoke-rc.d ipsec restart

运行ipsec verify命令, 验证IPsec服务器的运行状态. 典型的检查结果如下:

# sudo ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                             	[OK]
Linux Openswan U2.6.28/K2.6.32.16-linode28 (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]
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]

6. 测试L2TP服务器

完成前面的步骤之后, 就可以用iPhone添加L2TP VPN连接, 测试L2TP服务器的有效性了. 按照本文的配置参数, 服务器的IP地址是192.168.1.1, 用户名是user, L2TP的密码和IPsec的预共享密钥都是1234.

原文:http://dipplum.com/2010/08/30/ubuntu-install-l2tp-server/

  1. 匿名
    2010年9月3日15:10

    好,很好,我没有vps!