到了2007年,公司在Nasdaq上市,按照SOX法案要求,必须加强全球各办公室、机房的IT架构安全,我们将网络设备全部升级为Cisco的产品。当然,我最感兴趣的是Cisco的防火墙产品,它有一套完整的IPsec VPN解决方案。当时我们采用的是ASA5520,构建site to site VPN,将各个办公室和机房的内网打通,并统一部署微软的AD森林,IT基础服务非常稳定,各方面都很满意。而最受员工好评的就是,在办公室里上网可以无阻碍地访问国外网站,并无需事前做任何动作,只因为我们将流量做了分流,访问国内的走国内线路,访问国外的走VPN加密通道从香港出去。同样的,对于移动办公人员,给他们安装Cisco System VPN Client来拨号访问香港的VPN服务器。
期间,还有在美国的朋友要看中国网上直播的奥运节目,在香港的朋友要看内地网上点播的连续剧,而有些节目不对境外IP开放。办法当然是在国内架设远程访问VPN服务器。
这就是一个标准的围城格局。
皆大欢喜的背后是高昂的成本,众所周知,思科产品相当的贵。
那有没有廉价的解决方案呢?当然有,还有不少呢,这得感谢软件开源项目,技术先进,功能强大,还不用花钱。
今年春节前,公司为接收美国节点的数据做大数据分析,购置了IBM旗下Softlayer香港节点的云服务器,这给我测试Linux下的开源VPN软件提供了合适的资源条件,于是我开始寻找合适的开源VPN软件。
先看看常用VPN协议有哪些?
参考:维基百科 - 虚拟专用网
常用的虚拟专用网协议有:
- L2F
- L2TP
- PPTP
- IPsec (如Cisco IPSec VPN)
- SSL VPN
- AnyConnect(Cisco SSL VPN)
- OpenVPN
- SoftEther
各协议的优缺点就不说了,有兴趣可以自己去查,这里我只关注IPsec。
基于IPsec的VPN通道其实包含以下两个部分:
用白话说就是,IKE负责连接双方的身份验证,双方协商得出的密码和使用的加密算法都告知给操作系统,操作系统对两边网段之间的流量数据进行加密传输。
既然数据加密传输的活都给操作系统来干了,操作系统我们也没什么好选的,能选的就只有实现IKE协议的软件了。
IKE的版本发展:
1988年11月,互联网工程任务组在一系列的RFC文件中,定义了这个协议,其中包括了 RFC 2407,RFC 2408 以及 RFC 2409。
2005年以后,IKE版本升级到了IKEv2版本,RFC文件有所更新,其中包括 RFC 4306, RFC 4718,RFC 5996 以及 RFC 7296。
IKEv2的主要改进:
参考 - 维基百科 - IKEv2的实现
如下为当前可用的IKEv2开源实现:
名单的有些软件已经很久不更新了。
而稍微留心一下这个名单,会发现有个字眼很显眼,很明显就是天鹅swan家族:strongSwan,Openswan,Libreswan。
它们其实有一个共同的鼻祖:FreeS/WAN开源项目,历史还真是悠久,为了厘清脉络,我特别做了一些翻译和编辑工作。
参考 - Libreswan官网 - 历史
FreeS/WAN时代(1996 - 2004)
1996年John Gilmore和Hugh Daniel创建FreeS/WAN开源项目,致力于开发用于互联网加密的IPsec和DNS标准,愿景是以每年5%的速度推进流量加密,直到整个互联网全部使用加密通讯。FreeS/WAN项目通常有5个付费人员来开发代码,所有费用由Gilmore支付。
那个时候,加密并不普遍,用于实施加密的免费软件也非常少见。OpenSSL的前身SSLeay也刚刚被开发出来用于web服务器和客户端之间的加密通讯。虽然美国政府与民间组织之间有关隐私的争论已经如火如荼,大多数人并没有深入思考美国政府对网络通讯的侦听和监视。Freeswan软件的目标就是在美国政府以国家安全为由出台法律禁止公众加密之前,广泛普及随机加密技术(Opportunistic Encryption,OE)使加密无处不在。为防止美国政府根据国家安全法案对freeswan的所有者提起控诉,Gilmore要求美国公民包括他本人都不得为freeswan编写代码。这个限制造成了很多不良后果,因为它阻止了freeswan代码被合并进Linux内核,因此使得部署freeswan变得更加困难。
同时,各公司对于在互联网上建立安全连接和VPN的强烈需求,极大地推动了可用的加密标准的开发,为满足不同公司的各种加密需求,各种实现方式的IPsec标准也应运而生。
现在大家所知的IPsec标准套件,是来自于国际互联网工程任务组(IETF)的标准,包含了许多标准文档来实现用于验证的互联网密钥交换(IKE)协议和用于传输加密数据的IPsec协议。大量的加密和验证算法被支持和标准化。然而,并没有采用随机加密(OE)机制。同时,因为一些技术障碍造成的部署困难,使得DNS的安全版本也一度被延迟了好多年。2010年7月15日DNS根区(root zone)最终获准使用DNSSEC,这已经是延迟十年之后的事情了。这期间,freeswan的DNSSEC并未被采用,
因为IETF声明只有DNS自己可以使用DNSSEC KEY记录(现在改名为DNSKEY记录),这意味着freeswan不得不重回过去糟糕的文本记录格式。在2005年IPsec也引入了它自己的DNS记录类型IPSECKEY,但是需要耗费很多年的努力来部署新DNS软件来实际支持这个新记录类型。另外,最终用户也不希望访问他们的反向DNS区来发布OE IPsec需要的公钥。
freeswan也始终没有被Linux内核采用过,一部分原因是Gilmore强制非美国代码的规则,更大的原因在于与负责网络和加密的Linux内核开发人员疏于协作。
尽管freeswan团队多年一直参与Linux研讨会和内核顶层决策会议,Linux开发团队依然沿着他们自己的开发路径,最终只是推出了一些并没有获得广泛支持的加密子系统。结果导致了两个团队花费多年时间来努力维护两个互相竞争的内核IPsec协议栈,KLIPS和NETKEY,直到今日也没有人将这两个协议栈的优点统一整合起来。
一般来说,公众似乎并不太关心政府的侦听,哪怕在Nikcy Hager揭示以美国为中心的情报收集分析网络梯队系统(Echelon)的时候,也没有引起公众对部署加密通讯的足够重视。从90年代到21世纪初,并没有太多的人认为不加密的互联网是个真实的问题,直到2013年6月斯诺登(Edward Snowden)在香港将美国国家安全局关于棱镜计划监听项目的秘密文档披露给英国《卫报》和美国《华盛顿邮报》的时候,这已经是Gilmore放弃用freeswan对整个互联网加密的企图整整十年之后了。
从FreeS/WAN到Openswan(2004 - 2012)
虽然很多商业公司已经在使用freeswan作为它们密钥协作性测试的工具之一,Gilmore和他的开发团队之间的矛盾却与日俱增。Andreas Steffen(strongSwan项目的维护者)编写了大量补丁使freeswan能够支持X.509数字证书标准,但Gilmore拒绝将其并入freeswan。Mathieu Lafon编写的另一个商用VPN的基本功能NAT-Traversal支持代码,也被Gilmore拒绝。freeswan的志愿者Ken Bantoft,维护了一个包含上述补丁的freeswan的版本,并将之命名为超级freeswan。然而,Gilmore看到这个名字并不高兴,因为他不想那些杂七杂八的互联网技术和freeswan这个名字有任何瓜葛。
2003年7月,Gilmore和另一位积极的freeswan志愿者Paul Wouters在柏林附近召开的Chaos Communication Camp会议上碰面。他们想出了一个办法,在没有Gilmore提供赞助的条件下使用freeswan继续对IPsec进行开发。Wouters和其他志愿者将freeswan代码复制出一个分支,同时Gilmore将商业VPN开发相关的大块代码剔除后构建新的freeswan发布版本。Wouters的这个软件分支,被起名为openswan,源于freebsd/openbsd的命名历史,这个名字就这么叫开了。
Gilmore在发布了2个移除了VPN代码的freeswan版本后,就在2004年3月1日,著名的开源网络安全项目 FreeS/WAN 宣布停止开发,其原因主要是开发者的意图和用户的需求不吻合。对于网络安全系统,用户更多考虑的是系统功能的完整、强大,而不是它可预知的先进性,因此,FreeS/WAN 新版本中主打推出的 Opportunistic Encryption (OE) - 随机加密没有吸引到足够数量的用户测试。鉴于此,投资者停止了对 FreeS/WAN 项目的资助,FreeS/WAN从此淡出江湖。
总的来说,Openswan项目将注意力从随机加密(OE)技术转向VPN技术。4个Openswan志愿者创立了Xelerance公司来提供对Openswan的商业支持,盈利被用来对Openswan继续开发。由于不再有Gilmore强加于freeswan的限制这样的障碍,脱胎于freeswan的Openswan代码,被广泛采用并被整合进主要的Linux发行版中,例如RHEL,Debian和SuSe Linux。很多企业级特性被加入,像Xauth和SAref,在企业环境中Openswan如鱼得水。但这种状况本身造成了Xelerance公司收入锐减,因为企业用户大多使用RHEL,很自然付费给Red Hat来提供商业支持,而IPsec和IKE运行得足够好以致于用户基本上没有对新特性的开发要求,或者他们宁愿等待别人来付费或开发新功能。因此,虽然Xelerance公司此时仍然对Openswan项目提供赞助,但公司的运营方向已经发生了改变。一个又一个原始创始者离开了公司,Wouters是在2011年12月最后一个离开的,他的离开引发了Openswan项目团队和Xelerance公司之间关于Openswan商标所有权的争执,引发了法律诉讼。而当免费软件开发者被公司提起诉讼时,比较经济和简单的办法就是走人并给软件改名,Libreswan就这样诞生了。
参考 - strongSwan官方文档 - The strongSwan Open Source VPN Solution
可以看到strongSwan其实是和Openswan并列的两个开源项目,strongSwan更早就对IKEv2提供了完整支持,就选它了。
安装strongSwan
先升级操作系统CentOS至最新版本,我这里比较喜欢用CentOS 6.x的版本。
升级完后需要reboot重启服务器。
查看CentOS版本号
- uname -a
- Linux slhk 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux