DigitalOcean Ubuntu14.04 中配置L2TP/IPSec VPN服务端

网上的教程太多,今天尝试了几个后,配置成功,记录下来,方便以后参考。

一、安装环境

DigitalOcean VPS, $5/mo套餐,512MBMemory,1 CoreProcessor,20GBSSD Disk, 1TBTransfer。昨天选择的是网上推荐的三潘市的机房,浙江电信宽带下速度还可以,但是在浙江移动宽带下速度非常慢,ssh上去都有卡顿,换了新加坡的机房后,网速明显提升。

二、安装说明

使用root登录安装,若非root登录,需在下面的每个命令前添加sudo。以下出现的%YOUR_VPS_IP%都需要用你的VPS公网IP地址来替换(一共有4处)。

安装过程中会询问你是否需要是否用X.509证书来验证IPSec的连接,选择No。

三、安装配置步骤

1. 更新和安装必要的软件

apt-get update && apt-get upgrade && apt-get install openswan xl2tpd ppp lsof

这里没有安装防火墙软件UFW,昨天折腾了一下没有成功。

2. 配置防火墙,允许VPN数据流

iptables -t nat -A POSTROUTING -j SNAT --to-source %YOUR_VPS_IP% -o eth+

这里的%YOUR_VPS_IP%需要用你的VPS IP地址替换。

3. 转发设置

3.1 开启系统IP包转发,并禁用ICP重定向

echo "net.ipv4.ip_forward = 1" |  tee -a /etc/sysctl.conf
echo "net.ipv4.conf.all.accept_redirects = 0" |  tee -a /etc/sysctl.conf
echo "net.ipv4.conf.all.send_redirects = 0" |  tee -a /etc/sysctl.conf
echo "net.ipv4.conf.default.rp_filter = 0" |  tee -a /etc/sysctl.conf
echo "net.ipv4.conf.default.accept_source_route = 0" |  tee -a /etc/sysctl.conf
echo "net.ipv4.conf.default.send_redirects = 0" |  tee -a /etc/sysctl.conf
echo "net.ipv4.icmp_ignore_bogus_error_responses = 1" |  tee -a /etc/sysctl.conf

3.2 将以上设置应用到其它网络接口

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

3.3 应用配置

sysctl -p

3.4 开机自动加载

vi /etc/rc.local

在exit 0前写入以下代码:

for vpn in /proc/sys/net/ipv4/conf/*; do echo 0 > $vpn/accept_redirects; echo 0 > $vpn/send_redirects; done
iptables -t nat -A POSTROUTING -j SNAT --to-source %YOUR_VPS_IP% -o eth+

这里的%YOUR_VPS_IP%需要用你的VPS IP地址替换。

4. 配置Openswan (IPSEC)

备份/etc/ipsec.conf:

mv /etc/ipsec.conf /etc/ipsec.conf.bak

新建/etc/ipsec.conf:

vi /etc/ipsec.conf

写入如下内容:

version 2.0  
config setup
    dumpdir=/var/run/pluto/
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v6:fd00::/8,%v6:fe80::/10
    protostack=netkey
    force_keepalive=yes
    keep_alive=60
conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    rekey=no
    ikelifetime=8h
    keylife=1h
    ike=aes256-sha1,aes128-sha1,3des-sha1
    phase2alg=aes256-sha1,aes128-sha1,3des-sha1
    type=transport
    left=%YOUR_VPS_IP%
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any
    dpddelay=10
    dpdtimeout=20
    dpdaction=clear

这里的left=行的值需要用你的VPS IP地址替换。

5.设置共享密钥Shared Secret,即PSK

vi /etc/ipsec.secrets

在末尾添加如下代码:

%YOUR_VPS_IP% %any: PSK "psk_password"</pre>

这里的%YOUR_VPS_IP%需要用你的VPS IP地址替换

6. 验证IPSEC设置

ipsec verify

忽略第三行 SAref kernel support N/A,倒数第三行 Checking /bin/sh is not /bin/dash WARNING和最后一行的Opportunistic Encryption Support DISABLE,其他OK即可。

如果碰到Two or more interfaces found, checking IP forwarding [FAILED]也没有关系,只要cat /proc/sys/net/ipv4/ip_forward返回结果是1就没事。

7. 配置xl2tpd

备份/etc/xl2tpd/xl2tpd.conf:

mv /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.bak

新建/etc/xl2tpd/xl2tpd.conf:

vi /etc/xl2tpd/xl2tpd.conf

编辑/etc/xl2tpd/xl2tpd.conf, 内容如下:

[global]
ipsec saref = yes
saref refinfo = 30
;debug avp = yes
;debug network = yes
;debug state = yes
;debug tunnel = yes
[lns default]
ip range = 172.16.1.30-172.16.1.100
local ip = 172.16.1.1
refuse pap = yes
require authentication = yes
;ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

8. 配置ppp

在/etc/ppp目录下新建options.xl2tpd文件,

vi /etc/ppp/options.xl2tpd

内容如下:

require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
auth
mtu 1200
mru 1000
crtscts
hide-password
modem
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

9. 添加用户

vi /etc/ppp/chap-secrets

一行即为一个用户,依次是用户名、服务、密码、IP限制,如:

# Secrets for authentication using CHAP
# client     server    secret        IP addresses
aaa       l2tpd    helloworld             *

10. 重启相关服务

service ipsec restart
service xl2tpd restart

如果连接上VPN后,然后无法访问某些站点,需要把DNS设置成Google的域名服务器8.8.8.8或8.8.4.4

Windows上的设置很简单。

在Ubuntu12.04下,所有的DNS设置信息保存在/etc/resolv.conf文件中。

但是/etc/resolv.conf内的内容是自动生成的,在系统重启后会被自动覆盖掉。

#Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

设置方法:

首先我们需要创建一个文件/etc/resolvconf/resolv.conf.d/tail:

vi /etc/resolvconf/resolv.conf.d/tail

然后我们在这个文件里写入自己要添加的DNS服务器,格式与以前的/etc/resolv.conf文件一致:

nameserver 8.8.8.8
nameserver 8.8.4.4

接下来我们重启下resolvconf程序,让配置生效:

/etc/init.d/resolvconf restart

再去看看/etc/resolv.conf文件,自己添加的DNS服务器已经写进去了。

评论 在此处输入想要评论的文本。

Copied title and URL