在Amazon EC2(Ubuntu)上搭建L2TP-IPsec VPN


因为某些原因,学校图书馆的WIFI不支持GRE穿透网关,也就是说,PPTP在这种情况下是用不了的,同时考虑到手机上移动网络的时候PPTP也不好使,所以我决定搭建L2TP/IPsec VPN。
说来惭愧,这个事情我从13年5月一直弄到现在,8.26.2013,才弄好,中间拖拖拉拉,又有许许多多次不成功。
接下来我打算着手尝试搞一下IKE v2认证,看起来很高级的说。
我的搭建环境是Amazon EC2, 我的节点在Toyko,系统是Ubuntu server 13.04.

  1. 首先一个固定的Public IP是有必要的,可以在EC2 Dashboard里面的Elastic IPs中申请一个固定的公网ip,然后绑定你的instance就好。
  2. 在后台面板的Security Group中你instance 所用的那个Group要开放UDP 1701端口,不行再打开500、17、4500试试。
  3. 然后是安装必须的软件,直接从apt源安装就可以了。

    apt-get install xl2tpd openswan ppp

  4. 接下来编辑/etc/ipsec.conf    这些内容是我配置好之后直接贴出来的,格式上应该没有错误。

我编辑后的内容如下:

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,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10

    oe=off

    protostack=netkey

conn L2TP-PSK-NAK

    rightsubnet=vhost:%priv

    also=L2TP-PAK-noNAT

 

conn L2TP-PSK-noNAT

    authby=secret

    pfs=no

    auto=add

    keyingtries=3

    rekey=no

    ikelifetime=8h

    keylife=1h

    type=transport

    left=xxx.xxx.xxx.xxx    //此处填写ec2的内网ip

    leftprotoport=17/1701

    right=%any

    rightprotoport=17/%any

    dpddelay=40

    dpdtimeout=130

    dpdaction=clear

//另外需要注意的是文件的结尾部分必须有新行,即,编辑到末尾再敲1-2个回车
//否则启动ipsec时会提示如下且没有出错代码
//Segmentation fault
//openswan failed to exec the requested action – the following error occured:

  1. 接下来编辑/etc/ipsec.secrets使之变成如下内容

include /var/lib/openswan/ipsec.secrets.inc

your.server.ip.address     %any: PSK “你的ipsec 预共享密钥”

//注:这个ip也要填写ec2 instance的内网ip
//其他vps的比如linode什么的这里就是服务器的公网ip。
//因为大家用的虚拟技术不一样,xen什么的都是直接把公网ip绑定在虚拟机上,EC2是要NAT的(蛋疼)
//而且文件末尾似乎还是要增加空行。

  1. (我也不知道是不是必要的)由于IPSec工作时可能会与网络接口的send_redirects和accept_redirects功能相冲突,因此需要在启动IPSec前将网卡的这些功能关闭。

运行:

echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_redirects

  1. 重启ipsec服务并检查其是否正常工作

service ipsec restart

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.37/K3.2.0-35-virtual (netkey)

Checking for IPsec support in kernel [OK]

SAref kernel support [N/A]

NETKEY: Testing XFRM related proc values [OK]

[OK]

[OK]

Checking that pluto is running [OK]

Pluto listening for IKE on udp 500 [OK]

Pluto listening for NAT-T on udp 4500 [OK]

Checking for ‘ip’ command [OK]

Checking /bin/sh is not /bin/dash [WARNING]

Checking for ‘iptables’ command [OK]

Opportunistic Encryption Support [DISABLED]

  1. 配置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 = no

pppoptfile = /etc/ppp/options.xl2tpd

length bit = yes

  1. 修改pppd的配置,新建配置文件/etc/ppp/options.xl2tpd

修改后如下:

ipcp-accept-local

ipcp-accept-remote

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

  1. 设置认证的用户名和密码

由于使用ms-chap-v2认证,修改配置文件/etc/ppp/chap-secrets
大概形式如下:

# client    server    secret            IP addresses

用户名     l2tpd    密码    *

  1. 重启xl2tpd

service xl2tpd restart

  1. 开启ip转发

将下面的配置加入到/etc/sysctl.conf中

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 0

net.ipv4.conf.default.accept_source_route = 0

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.icmp_ignore_bogus_error_responses = 1

之后加载系统配置

sysctl -p

  1. 设置转发规则

iptables -t nat -A POSTROUTING -j MASQUERADE

  1. 修改启动脚本(我也不知道是不是必须的)

似乎重启之后关于包转发的设置会消失,所以要在启动脚本/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

  1. 大功告成了,接下来配置你的客户端就好了。

 
 
我参考的文章
http://zeroomega.info/blog/?p=95
http://blog.ltns.info/linux/ipsec_l2tp_vpn_debian_vps/
http://blog.tech4k.com/?p=745
http://b.gkp.cc/2010/06/19/setup-ipsec-l2tp-on-centos-55/
http://apple4us.com/2010/05/setting-up-l2tp-vpn-on-debian-ubuntu.html
https://www.dls-yan.com/2012/06/29/742.html
http://kencheang.blogspot.com/2012/12/l2tpipsec-vpn-amazon-ec2.html
 
 

, , ,

2 responses to “在Amazon EC2(Ubuntu)上搭建L2TP-IPsec VPN”

    • 不好意思……这个原来的配置文件早就没有了,我都不用ec2好一阵子了
      你应该不是复制粘贴的吧,汗,这个是我用word的写博客功能直接上传的,但是传完之后的格式很让我困扰,乱七八糟的,可能有一些不符合规范的东西。

Leave a Reply

Your email address will not be published. Required fields are marked *