2013年3月6日星期三

在Amazon EC2上配置VPN服务器

前几天搞了个EC2的micro instance,免费一年,配置较低,用来翻墙正合适。不过每月流量只有15G,只能省着点用了。

最简单方便的方法当然是用ssh做代理了。这种方法的坏处是打开国内和国外网址时需要在浏览器中不停切换是否使用代理,这虽然有点麻烦,不过还可以忍受。

但让人不能忍受的是——有些软件不能设置代理,所以搞个VPN服务器还是有必要的。

------

先讲怎么在教育网ssh ec2吧。

事情是这样的:
教育网比较奇葩,国外流量需要收费,我等穷人没钱包月(¥90/月),于是只能访问国内IP。
所以开通ec2后,想直接访问是没门的。
不过教育网也有一个很大的好处,就是ipv6流量是免费的——不需要花钱包月,ipv6的地址可以随便访问,当然包括国外的ipv6地址。

=>所以,如果不想花钱包月,又想访问国外网站,同时还能翻墙,不受墙的干扰,唯一的方案是,通过ipv6连接国外的vps来翻墙。

但是没法直接通过ipv4访问ec2,该怎么办呢?
更要命的是,ec2不支持ipv6.

我不禁陷入了沉思……

看到网上有链接说通过he的6to4来搞,很深奥的样子,没耐心看下去。

后来,我发现了ELB(Elastic Load Balancing)。ELB这货本来是给高富帅用的,用来在多个instance之间做负载均衡。最重要的是ELB是支持ipv6的,而且每月15G流量,已经包含在ec2的免费套餐里面,可以将连接转发到各个instance上。

然后我就试了一下。不试不知道,一试真奇妙。通过设置TCP转发规则,可以将到ELB的请求转发到ec2的instance上,这样就很容易地解决了通过ipv6 ssh到ec2的问题。

------

然后是搭建VPN

主要有三种VPN:PPTP、L2TP、OpenVPN。

刚开始搞了个PPTP的VPN,用了这个gist,很快就弄好了。坑爹的是,当我想通过ipv6连接时,windows告诉我说PPTP不支持ipv6,尼玛!

然后试L2TP,用的是这个。 很快又发现悲剧了,因为ELB不支持UDP转发,摔!

最后只好求助于万能的OpenVPN了。因为OpenVPN配起来比较麻烦,所以刚开始才会想去搞PPTP。但事到如今只好祭出OpenVPN这个大杀器了。
主要参考了这篇文章:Howto setup OpenVPN server
当然这篇文章也漏了一些细节,
比如:配置完server之后,应该启动openvpn服务,原文没提到。
因为openvpn没启动,ifconfig的结果里面就不会有tun0这个设备。所以当时我在“Setup NAT”这里卡了壳,半天才反应过来是怎么回事。

另外对天朝用户比较重要的几个选项:
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 172.16.0.23"
push "dhcp-option DNS 8.8.8.8"
用来绕过DNS污染。
刚开始没开这几个选项,结果导致连接上后仍然上不了被墙的网站。


如果比较懒的话,想在所有设备上用同一个客户端配置文件,则需要打开这个选项:
duplicate-cn
另外有几篇文章可以参考一下:

然后是对应服务器配置修改客户端配置文件,注意cipher选项要和服务器一致。
客户端协议应该是tcp6,不是tcp,更不是udp。
有问题看日志,对应微调一下。
客户端我用的是yegle修改的支持ipv6的openvpn客户端。貌似2.3版的openvpn支持ipv6了。
服务器版本用的是Amazon库里的,2.2版本。

后来就成功连上了!
翻身农奴得解放!
感谢党,感谢国家!

回想一下,感觉很奇葩,客户端用的是tcp6,服务器是tcp,中间经过了ELB,最后竟然连上了,并且能正常工作,不可思议。所以要表扬一下OpenVPN和Amazon。

另外希望Amazon EC2能够早日支持ipv6,就省了这许多麻烦了。

- END -

1 条评论:

  1. 您好,我也是才开通的ec2,但是即使使用负载均衡也是只有v4地址,我在这里http://docs.aws.amazon.com/zh_cn/ElasticLoadBalancing/latest/DeveloperGuide/elb-internet-facing-load-balancers.html也看到VPC 中的负载均衡器仅支持 IPv4 地址,请问您是如何配置好ipv6的呢?谢谢!

    回复删除