因为某些原因,学校图书馆的WIFI不支持GRE穿透网关,也就是说,PPTP在这种情况下是用不了的,同时考虑到手机上移动网络的时候PPTP也不好使,所以我决定搭建L2TP/IPsec VPN。
说来惭愧,这个事情我从13年5月一直弄到现在,8.26.2013,才弄好,中间拖拖拉拉,又有许许多多次不成功。
接下来我打算着手尝试搞一下IKE v2认证,看起来很高级的说。
我的搭建环境是Amazon EC2, 我的节点在Toyko,系统是Ubuntu server 13.04.
- 首先一个固定的Public IP是有必要的,可以在EC2 Dashboard里面的Elastic IPs中申请一个固定的公网ip,然后绑定你的instance就好。
- 在后台面板的Security Group中你instance 所用的那个Group要开放UDP 1701端口,不行再打开500、17、4500试试。
-
然后是安装必须的软件,直接从apt源安装就可以了。
apt-get install xl2tpd openswan ppp
- 接下来编辑/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:
- 接下来编辑/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的(蛋疼)
//而且文件末尾似乎还是要增加空行。
- (我也不知道是不是必要的)由于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
- 重启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]
- 配置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
- 修改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
- 设置认证的用户名和密码
由于使用ms-chap-v2认证,修改配置文件/etc/ppp/chap-secrets
大概形式如下:
# client server secret IP addresses
用户名 l2tpd 密码 *
- 重启xl2tpd
service xl2tpd restart
- 开启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
- 设置转发规则
iptables -t nat -A POSTROUTING -j MASQUERADE
- 修改启动脚本(我也不知道是不是必须的)
似乎重启之后关于包转发的设置会消失,所以要在启动脚本/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
- 大功告成了,接下来配置你的客户端就好了。
我参考的文章
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”
能把你的/etc/ipsec.conf 文件发给我吗
我总是出现语法错误 ysjsssl@gmail.com
不好意思……这个原来的配置文件早就没有了,我都不用ec2好一阵子了
你应该不是复制粘贴的吧,汗,这个是我用word的写博客功能直接上传的,但是传完之后的格式很让我困扰,乱七八糟的,可能有一些不符合规范的东西。