最近需要重新搭建一个服务器,本以为按照自己曾经写的教程能够半小时完成任务,后来发现很多包都更新了,很多命令也和之前不一样,甚至一些配置文件语法也变了。我就转用网上的脚本,特别的好用,比我到这个教材好用多了,推荐大家直接用脚本,别傻不拉唧一步一步自己搞了。

http://blog.shuspieler.com/729/

https://github.com/bedefaced/vpn-install

此教程需要有一定的基础知识,至少成功运行了EC2 Amazon Linux实例,并且会一些基本linux命令。

最近申请了亚马逊一年免费体验,其中EC2可以免费使用一个虚拟机实例一年,能够玩的东西是最多的了。大学时候长期处于墙内,感觉不用谷歌微软苹果等等一些公司资源也映像不大,大部分的东西也基本上能用百度搜到,实在需要下载一些国外的东西的时候,找个代理也凑合着用一下,感觉对生活影响并不大。苹果同步不好用的话,QQ同步助手也用户体验还行。直到最近在德国生活了几年,逐渐感觉到,没有墙的束缚真是生活太方便了,这才是互联网应该有的样子。

想起一个细节,大学时候玩Linux,安装软件基本上默认的软件源都是连不上的,各种软件包管理比如yum还有apt-get 啥的都是形同虚设,当时还很不屑这些功能,感觉就是一个下载的功能,没啥大不了的。当时安装软件和windows差不多,百度上网搜下载软件,然后本地安装。当遇到依赖包比较多的时候,需要一个一个找,那时候真是痛恨Linux咋这样设计太反人类了。不夸张,出来之前,我应该一次都没用过软件包管理软件,开始体尝试过几次体验太差后来干脆直接不考虑了。所以也不知道直接命令安装会如此方便,依赖包自动查询安装,出来后简直开启了新的世界。谷歌学术查询论文不能更方便,而且习惯用chrome浏览器,需要查询的时候直接输入到地址栏然后回车,把流程和时间都压缩到最小,而且搜索出来基本上第一个就是你想要的。不用每个人都身怀绝技辨别搜索结果哪个是广告哪个才是真正的官网。在这里是谷歌努力想哪个才是你真正想要的而不是说对于他们更赚钱的结果。这不应该是一个搜索应该有的样子吗?

老虎尝过肉的甜头,再也回不到吃素了。

既然EC2是一个拥有完全控制权的虚拟机,那么自己尝试搭建一个VPN,万一以后哪一天用到,也可以应急。

安装VPN有很多方案,现在最普及的也是最简单的是PPTP VPN,加密能力更强一点的有L2TP/IPsec VPN,CISCO IPsec VPN 还有SSL Openvpn。PPTP VPN安装最简单,对于用于连接也很简单。但是有个致命的缺点是加密能力很差劲,据说,现在已经有能力解密这个VPN传输的内容,苹果新版的系统也取消掉了这个连接方式,可以说PPTP VPN是过时的方案了。Cisco IPsec VPN在苹果的设备支持很好,安装也很方便,可是我是多平台同时使用,除了苹果系还有windows和Android,其他平台配置上稍微麻烦一点,以后尝试看看这个方案好不好玩,这次就选择在我的亚马逊虚拟机上搭建L2TP/IPsec VPN。

网上有很多对于此的教程,我也是站在巨人的肩膀上写出此文,所以对之前我参考过文章教程的作者表示感谢,文末我贴出几个我主要参照的网页,再次对前人的贡献表示感谢。

很多教程都是基于Ubuntu系或者CentOS系一步一步走下来的,虽然Amazon Linux也是用的红帽的软件包管理系统,所以命令和流程和CentOS特别的像,可是还是很多小细节不同,在这些地方我耽误不少时间,写这篇教程一方面可能帮助到其他朋友,另一方面也是给自己的一个记录,以免以后需要重装时候忘了那些细节了就尴尬了。

更新源:

安装基本依赖和工具包:

安装openswan(ipsec):

填写配置文件:

这里边默认有一些信息,将里边的内容更换成一下:

其中比较注意的有两点,一是vim的使用,如果你不熟悉这个编辑器的话可以先查一下这个基本用法,基本上用i插入模式就完全够用了,然后保存。另外一个要注意的地方,left=后边是需要填本机ip地址的。amazon的ip地址分好几个,如果没有申请弹性ip的话,那么对于一个EC2实例有ipv4公网ip和私有ip两个。如果绑定了弹性ip的话就是弹性ip和私有ip两个地址。网上的教程都让那里填写虚拟机外网ip,而对于amazon的EC2 来说,他们做了一对一的NAT,将虚拟机私有ip映射到公网的ip上。所以我一开始那里填写成外网的ip,导致服务开启不了,耽误我很久。正确的是left=填写虚拟机的私有ip。也可以用ifconfig查询,得到的结果是一样的,就是控制台里边的那个私有ip地址。另外一个英文的教程,用脚本自动获取本机ip,个人感觉这个很好用,免得被各种不同ip搞迷糊,直接将我上边那一段复制粘贴就可以,ip也别自己填了。

设置预共享密钥

具体原理我也不是特别明白,看一些帖子介绍说是建立连接通信等时候用到这个密钥,对于用户来说,可以当作另一个密钥项,我也是暂时这样理解的。

在里边填写下边的信息:

自行设定一个yourpsk,这个在客户端登陆时候会用到,要有一定的强度。

 

然后运行ipsec:

设定开机启动:

这样,ipsec就完成了,下边进行L2TP和PPP

安装PPP

ppp是一个拨号软件,用来设置用户名密码。

既然是用来管理用户名密码,那么接下来就添加一个用户名密码,编辑这个文件:

在里边新增一行类似这样的: loginname * loginpassword *

第一个是用户名,然后空格*号,再是密码,后边再有一个空格*号。我参照一篇教程时候直接把这一句抄过去了,所以用iphone测试登陆的时候用户名就成了loginname密码是loginpassword哈哈哈。

安装xl2tpd

这个折腾我好久,yum默认源里边没有这个软件,所以很多sudo yum install xl2tpd就不管用了。我尝试从github下载源码编译,make也能够成功,make install也可以看到日志在sbin命令下添加了xl2tpd,可是配置文件一直没有看到需要的文件,用service开启服务也不能够打开。我在自我编译这里尝试了好久,最终还是放弃了。。。后来在一篇英文文章中找到了安装方法,在epel源下安装:yum install -y –enablerepo=epel openswan xl2tpd

这是临时启用了epel源,如果想永久启用,亚马逊官方问答里边有介绍方法:

问:如何启用 Extra Packages for Enterprise Linux (EPEL) 存储库?

修改 /etc/yum.repos.d/epel.repo。在标记了 [epel] 的部分下,将 enabled=0 改为 enabled=1

要临时启用 EPEL 6 存储库,请使用 yum 命令行选项 –enablerepo=epel

请注意,为 Amazon Linux AMI 存储库配置的优先级高于任何第三方存储库。这样做的原因是,有一些程序包既是 Amazon Linux AMI 的组成部分,又包含在第三方存储库中,并且我们要确保 Amazon Linux AMI 版本已在默认情况下安装。

配置xl2tpd:

同样listen-addr里边需要填写对于Linux来说的“外网”ip,在亚马逊EC2系统是私有ip。可以从amazon的控制台查看,或者ifconfig查看。

接着配置ppp拨号相关的一些信息:

这样,xl2tpd配置好了,启动服务以及开机自启动

配置sysctl: 

sysctl的功能是开启转发。它能够将服务器内部的ip地址关系进行转发和映射,从而实现我们连接VPN之后的用户,能够通过内部的一些端口进行请求的转发:

在里边能找到的话就在原来的基础上更改,没有的话在末尾添加,这里的作用就说转发相关的设置。

执行更改:

设置iptables:

iptables是防火墙软件,这里用来处理登陆进来用户和外网的数据转发。如果这里设置有问题,可能会出现能登陆vpn可是上不了外网的现象。

执行新的iptables

最后一步:

如果结果是和我的一样,那么恭喜你,搭建完成:

 

这是我从我的虚拟机拷贝下来的状态,只要你的和我的相同,相信你也没问题。其中有一点SAref kernel support [N/A],在一篇参考页面第6个有介绍解决方法,我保持这种状态没有去修复,最终也是成功。但是对这其中的道理一知半解感觉很不好。

最后还有一点,在amazon安全组对用到的端口放行,以使得客户端可以通过防火墙链接到虚拟机。现在实例中找到对应属于的安全组,然后再在安全组添加入站规则如下,其中来源选择任何位置

 

UDP port 1701 (for L2TP)
UDP port 500 (for IKE)
UDP port 4500 (for IPSec over UDP)

 

搭建工作完成了,如果按照我的流程一步一步来到话,相信你也会成功的,我自己就是按照这个流程一步一步在amazon linux搭建好的。

这里用到的软件分别起这些作用:

openswan(ipsec) : 提供一个密钥
ppp :提供用户名和密码
xl2tpd : 提供L2TP服务
sysctl : 提供服务器内部转发
iptables : 提供请求从服务器内部转向外部,外部响应转向服务器内部

手机或者其他设备就可以尝试连接这个VPN了,记得协议选择L2TP,祝你成功啊~~

 

我在搭建过程中,参考了很多大神的经验贴,从中学到不少知识,主要有下边几篇,在他们的基础上我完成了amazon linux发行版的安装。再次对下边文章作者做出感谢。

https://segmentfault.com/a/1190000006125737

https://blog.igbuend.com/howto-l2tp-vpn-with-psk-on-ec2-linux-ami-to-support-your-google-chromebook/

https://watchmysys.com/blog/2014/03/setting-up-ipsecl2tp-on-amazon-ec2/

http://blog.csdn.net/sonsie007/article/details/16932017

http://b.gkp.cc/2010/06/19/setup-ipsec-l2tp-on-centos-55/

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.