早在2005年,为解决国内办公室访问香港邮件服务器时连接被随机中断而产生大量重复邮件的问题,我们在香港IDC机房的NetScreen防火墙上部署了IPsec VPN服务器,国内员工电脑上安装VPN客户端软件,在发送邮件前先VPN拨号,虽然麻烦,但成功解决了问题。
到了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协议来互相验证,并协商建立IPsec通道所需的特定加密参数和两端特定的网段。
IPsec协议(IP安全协议):使用特定加密参数对特定数据进行加密传输,通常由操作系统内核实现,目前基本上所有主流操作系统都支持IPsec协议。
用白话说就是,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的主要改进:
更精简的RFC标准化文档
对移动设备更好的支持
全面支持NAT穿越和SCTP协议
简化的信息交换机制
增强的可靠性和状态管理
更好的防范DoS攻击机制
参考 - 维基百科 - IKEv2的实现
如下为当前可用的IKEv2开源实现:
OpenIKEv2,
strongSwan,
Openswan,
IKEv2,
Racoon and Racoon2 from the KAME project,
iked from the OpenBSD project.,
Libreswan,
Rockhopper VPN Software
名单的有些软件已经很久不更新了。
而稍微留心一下这个名单,会发现有个字眼很显眼,很明显就是天鹅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版本号
查看SELinux状态
如果SELinux没有被禁用,需禁用之,并重启服务器
查看当前网卡配置
可以看到,服务器公网IP是119.81.236.70,对应网卡是eth1。
安装strongSwan的运行依赖环境
现在正式开始安装strongSwan
安装方法一:使用yum安装
strongSwan的发行版已包含在EPEL源中, 但源中的包版本5.3.2比较低,目前官网上5.4.0已经发布了。
安装EPEL源:
yum -y install epel-release
安装strongswan:
注意:使用yum安装,命令ipsec被替代为strongswan。可设置别名来解决这个问题:
alias ipsec='strongswan'
yum -y install strongswan
安装方法二:下载源程序编译安装
为使用最新版本,还是得自己下载源码编译安装,我测试时的版本是5.3.5。
下载源代码压缩包
cd /root
wget http://download.strongswan.org/strongswan.tar.gz
解压
tar zxvf strongswan.tar.gz
编译安装
程序安装路径:/usr
strongSwan配置文件路径:/etc/strongswancd strongswan-5.3.5
./configure --prefix=/usr --sysconfdir=/etc/strongswan --enable-eap-identity --enable-eap-md5 \
--enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap \
--enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap \
--enable-xauth-pam --enable-dhcp --enable-openssl --enable-addrblock \
--enable-unity --enable-certexpire --enable-radattr --enable-tools \
--enable-openssl --disable-gmp
make
make install
配置私钥和证书
生成CA私钥,并使用此私钥自签名生成CA证书
这里C表示国家名,O表示组织名,CN为通用名。默认证书有效期为3年,这里配置3652天,即10年。cd /etc/strongswan
ipsec pki --gen --outform pem > ca.pem
ipsec pki --self --in ca.pem --dn "C=CN, O=VPN, CN=strongSwan CA" --ca --lifetime 3652 \
--outform pem > ca.cert.pem
生成服务器私钥,然后从私钥中导出公钥,用CA证书签发服务器证书
ipsec pki命令可用来生成RSA密钥对,包含了私钥和公钥,公钥是在网络上传输的,而私钥是藏好用来和接收到的公钥配对的(因此私钥里也有整个公钥,用来配对)。
所以这里C、O的值要跟第1步的一致,CN值及--san值是服务器公网地址或url,另外这里可以设置多个--san值。否则会出现错误 13801:IKE身份验证凭证不可接受。iOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址。
除了上述要求,Windows 7 还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证)--flag serverAuth。
非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU)--flag ikdeIntermediate。
Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,--san。
ipsec pki --gen --outform pem > server.pem
ipsec pki --pub --in server.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem \
--cakey ca.pem --dn "C=CN, O=VPN, CN=119.81.236.70" --san="119.81.236.70" \
--flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
生成客户端私钥,然后从私钥中导出公钥,用CA证书签发客户端证书
这里C、O的值要跟第1步的一致。ipsec pki --gen --outform pem > client.pem
ipsec pki --pub --in client.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem \
--cakey ca.pem --dn "C=CN, O=VPN, CN=strongSwan Client" --outform pem > client.cert.pem
生成 pkcs12 证书,用来导入手机或电脑
生成时需设置密码,例如:pceva.com,请记住这个密码,在客户端导入此证书时需输入该密码。openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "strongSwan Client" \
-certfile ca.cert.pem -caname "strongSwan CA" -out client.cert.p12
Export Password: pceva.com
安装证书
把刚才生成的私钥和证书文件复制到目录/etc/strongswan/ipsec.d/下的指定目录下即可。
cacerts/目录下放置CA证书
certs/目录下放置服务器和客户端证书
private/目录下放置服务器和客户端私钥
配置strongSwan
strongSwan包含3个配置文件,在目录/etc/strongswan/下。
strongswan.conf strongSwan各组件的通用配置
ipsec.conf IPsec相关的配置,定义IKE版本、验证方式、加密方式、连接属性等等
ipsec.secrets 定义各类密钥,例如:私钥、预共享密钥、用户账户和密码
vi /etc/strongswan/strongswan.conf
vi /etc/strongswan/ipsec.conf
密码文件ipsec.secrets文件默认不存在,需要自己生成。
vi /etc/strongswan/ipsec.secrets
更改密码文件读写权限,仅限root可读写
CentOS配置转发
CentOS配置iptables防火墙,允许UDP500,UDP4500,并配置转发和NAT规则。
vi /etc/sysconfig/iptables
配置完成后,重启iptables服务,使新规则生效。
配置init.d服务启动脚本(源码编译安装不带此脚本)
vi /etc/init.d/strongswan
配置开机时strongswan服务自启动
启动strongswan服务
查看strongswan服务状态
以上为VPN服务器端的配置
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以下为VPN客户端的配置
VPN客户端配置
基本上目前流行的平台都可以配置客户端和strongSwanVPN服务器对接。
windows 7+
导入证书
开始菜单搜索“cmd”,打开后输入mmc(Microsoft管理控制台);
“文件”-“添加/删除管理单元”,添加“证书”单元;
证书单元的弹出窗口中一定要选“计算机账户”,之后选“本地计算机”,确定;
在左边的“控制台根节点”下选择“证书”-“个人”,然后选右边的“更多操作”-“所有任务”-“导入”打开证书导入窗口;
选择刚才生成的 client.cert.p12 文件。下一步输入私钥密码 pceva.com 。下一步“证书存储”选“个人”;
导入成功后,把导入的 CA 证书剪切到“受信任的根证书颁发机构”的证书文件夹里面;
打开剩下的那个私人证书,看一下有没有显示“您有一个与该证书对应的私钥”,以及“证书路径”下面是不是显示“该证书没有问题”;
然后关闭 mmc,提示“将控制台设置存入控制台1吗”,选“否”即可。新建vpn连接
控制面板 - 网络和共享中心
设置新的连接或网络 - 连接到工作区 - 使用我的Internet连接(VPN)
Internet地址:119.81.236.70
目标名称:VPN连接
勾选:允许其他人使用此连接;现在不连接。
用户名:stone
密码:PCeva2016
勾选:记住此密码
更改适配器设置,右击VPN连接,选择安全栏
VPN类型:IKEv2
数据加密:需要加密(如果服务器拒绝将断开连接)
身份验证:(下面两项任选一项即可)
使用可扩展的身份验证协议(EAP)- Microsoft:安全密码(EAP-MSCHAP v2)(启用加密)
使用计算机证书Android
Android 4.x自带的VPN客户端
目前只支持IKEv1,使用预共享密钥外加用户账号验证,不需要导入证书。
设置 – 更多 – VPN,点击右上角的+。
名称:随便起。
类型:IPSec Xauth PSK。Xauth表示用户账户验证,PSK就是Pre-Shared Key,也即预共享密钥。
服务器地址:119.81.236.70
IPSec标示符:放空不填。
IPSec预共享密钥:写ipsec.secrets里PSK后面的那个密码 hello2016.pceva.comstrongSwan APP
strongSwan有发布安卓平台上的客户端APP:strongSwan VPN Client for Android 4 and newer,
https://play.google.com/store/ap ... .strongswan.android
可在各大应用市场下载,目前版本1.5.0,只支持IKEv2。
我手上的安卓手机无法导入CA证书,就没有继续测试了。IOS
苹果的系统可以使用IKEv1和IKEv2,建议使用IKEv2的配置。IKEv1配置:预共享密钥+用户账户验证,不需要证书,配置最简单,老系统版本都支持。
设置 – 通用 – VPN
点击 添加VPN配置,点击类型
选择IPSec,返回
描述:随便填
服务器:119.81.236.70
账户: stone
密码: PCeva2016
密钥: hello2016.pceva.comIKEv2配置:证书+用户账户验证,最安全和稳定。
需要导入2个证书:CA和客户端证书
将文件ca.cert.pem和client.cert.p12通过邮件发给自己。
注意:导入client.cert.p12时需要输入密码:pceva.com
导入完成后,在 设置 – 通用 – 描述文件 里,能看见刚才导入的两个证书。
再到 设置 – 通用 – VPN 里,添加VPN配置
类型: IKEv2
描述: 随便填
服务器:119.81.236.70
远程ID:119.81.236.70
本地ID:随便填或不填
用户名:stone
密码: PCeva2016Linux
Linux作为客户端的配置(以CentOS为例),很多帖子都说strongSwan本身就是客户端,但是却没有给出例子,我这里就多写点。
查看客户端CentOS当前版本
查看客户端当前网卡配置
strongSwan软件安装
安装证书
用scp将文件client.cert.p12从VPN服务器复制到此目录中:/etc/strongswan/ipsec.d/private/
配置文件:strongswan.conf
vi /etc/strongswan/strongswan.conf
默认情况下,strongswan启动时将DNS服务器地址插入文件/etc/strongswan/resolv.conf
配置文件:ipsec.conf
vi /etc/strongswan/ipsec.conf
密码文件:ipsec.secrets
vi /etc/strongswan/ipsec.secrets
启动strongswan服务
启动连接rw
查看出口的公网IP
查看VPN连接建立后的网卡配置注意:网卡eth0多绑定了一个虚拟IP: 10.10.10.1/32
查看策略路由
查看ipsec状态
VPN服务器端查看IPsec状态
查看相关证书
查看CA证书
关闭连接rw
启动连接home
查看网卡配置
查看策略路由
VPN服务器端查看IPsec状态
关闭连接home
停止strongswan服务[root@test strongswan]# ipsec stop
Stopping strongSwan IPsec...
[root@test ~]# ipsec down home
closing CHILD_SA home{1} with SPIs cc0a9d50_i (0 bytes) c42d14a1_o (0 bytes) and TS 10.10.10.2/32 === 0.0.0.0/0
sending DELETE for ESP CHILD_SA with SPI cc0a9d50
generating INFORMATIONAL_V1 request 1048339490 [ HASH D ]
sending packet: from 192.168.1.22[4500] to 119.81.236.70[4500] (76 bytes)
deleting IKE_SA home[1] between 192.168.1.22[192.168.1.22]...119.81.236.70[119.81.236.70]
sending DELETE for IKE_SA home[1]
generating INFORMATIONAL_V1 request 1136352302 [ HASH D ]
sending packet: from 192.168.1.22[4500] to 119.81.236.70[4500] (92 bytes)
removing DNS server 8.8.4.4 from /etc/resolv.conf
removing DNS server 8.8.8.8 from /etc/resolv.conf
IKE_SA [1] closed successfully
[root@slhk ~]# ipsec statusall
Status of IKE charon daemon (strongSwan 5.3.5, Linux 2.6.32-573.18.1.el6.x86_64, x86_64):
uptime: 45 hours, since Apr 03 17:01:25 2016
malloc: sbrk 528384, mmap 0, used 347424, free 180960
worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 9
loaded plugins: charon aes des rc2 sha1 sha2 md5 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf xcbc cmac hmac attr kernel-netlink resolve socket-default stroke updown eap-identity eap-md5 eap-mschapv2 eap-dynamic eap-radius eap-tls eap-ttls eap-peap eap-tnc xauth-generic xauth-eap xauth-pam tnc-tnccs dhcp certexpire radattr addrblock unity
Virtual IP pools (size/online/offline):
10.10.10.0/24: 254/1/1
Listening IP addresses:
10.110.71.123
119.81.236.70
Connections:
IKEv1-CERT-XAUTH: %any...%any IKEv1, dpddelay=30s
IKEv1-CERT-XAUTH: local: [C=CN, O=VPN, CN=119.81.236.70] uses public key authentication
IKEv1-CERT-XAUTH: cert: "C=CN, O=VPN, CN=119.81.236.70"
IKEv1-CERT-XAUTH: remote: [C=CN, O=VPN, CN=strongSwan Client] uses public key authentication
IKEv1-CERT-XAUTH: cert: "C=CN, O=VPN, CN=strongSwan Client"
IKEv1-CERT-XAUTH: remote: uses XAuth authentication: any
IKEv1-CERT-XAUTH: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear
IKEv1-PSK-XAUTH: %any...%any IKEv1, dpddelay=30s
IKEv1-PSK-XAUTH: local: [119.81.236.70] uses pre-shared key authentication
IKEv1-PSK-XAUTH: remote: uses pre-shared key authentication
IKEv1-PSK-XAUTH: remote: uses XAuth authentication: any
IKEv1-PSK-XAUTH: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear
IKEv2-CERT: %any...%any IKEv2, dpddelay=30s
IKEv2-CERT: local: [C=CN, O=VPN, CN=119.81.236.70] uses public key authentication
IKEv2-CERT: cert: "C=CN, O=VPN, CN=119.81.236.70"
IKEv2-CERT: remote: [C=CN, O=VPN, CN=strongSwan Client] uses public key authentication
IKEv2-CERT: cert: "C=CN, O=VPN, CN=strongSwan Client"
IKEv2-CERT: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear
IKEv2-EAP: %any...%any IKEv2, dpddelay=30s
IKEv2-EAP: local: [119.81.236.70] uses public key authentication
IKEv2-EAP: cert: "C=CN, O=VPN, CN=119.81.236.70"
IKEv2-EAP: remote: uses EAP_MSCHAPV2 authentication with EAP identity '%any'
IKEv2-EAP: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear
Security Associations (1 up, 0 connecting):
IKEv1-PSK-XAUTH[19]: ESTABLISHED 10 seconds ago, 119.81.236.70[119.81.236.70]...116.233.140.216[192.168.1.22]
IKEv1-PSK-XAUTH[19]: Remote XAuth identity: stone
IKEv1-PSK-XAUTH[19]: IKEv1 SPIs: 157cb85bea66c692_i cefcd0f0616019e9_r*, pre-shared key reauthentication in 2 hours
IKEv1-PSK-XAUTH[19]: IKE proposal: AES_CBC_128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_2048
IKEv1-PSK-XAUTH{38}: INSTALLED, TUNNEL, reqid 18, ESP in UDP SPIs: c42d14a1_i cc0a9d50_o
IKEv1-PSK-XAUTH{38}: AES_CBC_128/HMAC_SHA1_96, 0 bytes_i, 0 bytes_o, rekeying in 46 minutes
IKEv1-PSK-XAUTH{38}: 0.0.0.0/0 === 10.10.10.2/32
[root@test ~]# ip route list table 220
192.168.1.0/24 dev eth0 proto static src 192.168.1.22
default via 192.168.1.1 dev eth0 proto static src 10.10.10.2
[root@test ~]# ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:bf:74:da brd ff:ff:ff:ff:ff:ff
inet 192.168.1.22/24 brd 192.168.1.255 scope global eth0
inet 10.10.10.2/32 scope global eth0
inet6 fe80::20c:29ff:febf:74da/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]# ipsec up home
initiating Main Mode IKE_SA home[1] to 119.81.236.70
generating ID_PROT request 0 [ SA V V V V ]
sending packet: from 192.168.1.22[500] to 119.81.236.70[500] (248 bytes)
received packet: from 119.81.236.70[500] to 192.168.1.22[500] (136 bytes)
parsed ID_PROT response 0 [ SA V V V ]
received XAuth vendor ID
received DPD vendor ID
received NAT-T (RFC 3947) vendor ID
generating ID_PROT request 0 [ KE No NAT-D NAT-D ]
sending packet: from 192.168.1.22[500] to 119.81.236.70[500] (372 bytes)
received packet: from 119.81.236.70[500] to 192.168.1.22[500] (372 bytes)
parsed ID_PROT response 0 [ KE No NAT-D NAT-D ]
local host is behind NAT, sending keep alives
generating ID_PROT request 0 [ ID HASH ]
sending packet: from 192.168.1.22[4500] to 119.81.236.70[4500] (76 bytes)
received packet: from 119.81.236.70[4500] to 192.168.1.22[4500] (76 bytes)
queueing TRANSACTION request as tasks still active
received packet: from 119.81.236.70[4500] to 192.168.1.22[4500] (76 bytes)
parsed ID_PROT response 0 [ ID HASH ]
parsed TRANSACTION request 272908667 [ HASH CPRQ(X_USER X_PWD) ]
generating TRANSACTION response 272908667 [ HASH CPRP(X_USER X_PWD) ]
sending packet: from 192.168.1.22[4500] to 119.81.236.70[4500] (92 bytes)
received packet: from 119.81.236.70[4500] to 192.168.1.22[4500] (76 bytes)
parsed TRANSACTION request 4281219443 [ HASH CPS(X_STATUS) ]
XAuth authentication of 'stone' (myself) successful
IKE_SA home[1] established between 192.168.1.22[192.168.1.22]...119.81.236.70[119.81.236.70]
scheduling reauthentication in 9939s
maximum IKE_SA lifetime 10479s
generating TRANSACTION response 4281219443 [ HASH CPA(X_STATUS) ]
sending packet: from 192.168.1.22[4500] to 119.81.236.70[4500] (76 bytes)
generating TRANSACTION request 2403667200 [ HASH CPRQ(ADDR DNS) ]
sending packet: from 192.168.1.22[4500] to 119.81.236.70[4500] (76 bytes)
received packet: from 119.81.236.70[4500] to 192.168.1.22[4500] (108 bytes)
parsed TRANSACTION response 2403667200 [ HASH CPRP(ADDR DNS NBNS DNS NBNS) ]
installing DNS server 8.8.8.8 to /etc/resolv.conf
handling INTERNAL_IP4_NBNS attribute failed
installing DNS server 8.8.4.4 to /etc/resolv.conf
handling INTERNAL_IP4_NBNS attribute failed
installing new virtual IP 10.10.10.2
generating QUICK_MODE request 4142496424 [ HASH SA No ID ID ]
sending packet: from 192.168.1.22[4500] to 119.81.236.70[4500] (236 bytes)
received packet: from 119.81.236.70[4500] to 192.168.1.22[4500] (172 bytes)
parsed QUICK_MODE response 4142496424 [ HASH SA No ID ID ]
connection 'home' established successfully
[root@test strongswan]# ipsec down rw
deleting IKE_SA rw[1] between 192.168.1.22[C=CN, O=VPN, CN=strongSwan Client]...119.81.236.70[C=CN, O=VPN, CN=119.81.236.70]
sending DELETE for IKE_SA rw[1]
generating INFORMATIONAL request 3 [ D ]
sending packet: from 192.168.1.22[4500] to 119.81.236.70[4500] (76 bytes)
received packet: from 119.81.236.70[4500] to 192.168.1.22[4500] (76 bytes)
parsed INFORMATIONAL response 3 [ ]
IKE_SA deleted
removing DNS server 8.8.4.4 from /etc/resolv.conf
removing DNS server 8.8.8.8 from /etc/resolv.conf
IKE_SA [1] closed successfully
[root@test strongswan]# ipsec listcacerts
List of X.509 CA Certificates:
subject: "C=CN, O=VPN, CN=strongSwan CA"
issuer: "C=CN, O=VPN, CN=strongSwan CA"
serial: 6f:95:be:cc:f9:a9:0c:4f
validity: not before Mar 15 15:45:34 2016, ok
not after Mar 15 15:45:34 2026, ok
pubkey: RSA 2048 bits
keyid: 32:16:22:cb:f3:45:7a:cb:f7:ea:b2:b5:fd:36:2d:06:76:27:11:5b
subjkey: 3e:fe:ce:09:95:0f:89:9e:ab:bd:70:bc:7b:69:dc:94:30:86:c4:be
[root@test strongswan]# ipsec listcerts
List of X.509 End Entity Certificates:
subject: "C=CN, O=VPN, CN=strongSwan Client"
issuer: "C=CN, O=VPN, CN=strongSwan CA"
serial: 4a:4b:78:d6:5c:4a:b7:51
validity: not before Mar 15 15:46:35 2016, ok
not after Mar 15 15:46:35 2026, ok
pubkey: RSA 2048 bits, has private key
keyid: ef:75:ce:5a:0c:c6:15:14:4c:25:98:f5:a2:b7:b5:f4:73:bc:1d:c6
subjkey: d5:9f:d0:c3:43:9b:53:4c:a5:ed:91:3e:49:b2:80:3e:6e:34:83:5c
authkey: 3e:fe:ce:09:95:0f:89:9e:ab:bd:70:bc:7b:69:dc:94:30:86:c4:be
altNames: 119.81.236.70
subject: "C=CN, O=VPN, CN=119.81.236.70"
issuer: "C=CN, O=VPN, CN=strongSwan CA"
serial: 24:99:5a:2f:0c:e9:fa:a8
validity: not before Mar 29 15:25:30 2016, ok
not after Mar 29 15:25:30 2026, ok
pubkey: RSA 2048 bits
keyid: 28:b8:cc:62:36:88:ee:6f:c5:f6:81:46:5e:22:51:b3:dd:f3:cf:fd
subjkey: 3a:28:1e:00:7a:4b:17:13:97:a7:78:34:ad:ca:16:cf:e4:06:36:d9
authkey: 3e:fe:ce:09:95:0f:89:9e:ab:bd:70:bc:7b:69:dc:94:30:86:c4:be
[root@slhk strongswan]# ipsec statusall
Status of IKE charon daemon (strongSwan 5.3.5, Linux 2.6.32-573.18.1.el6.x86_64, x86_64):
uptime: 17 hours, since Apr 03 17:01:25 2016
malloc: sbrk 528384, mmap 0, used 347424, free 180960
worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 4
loaded plugins: charon aes des rc2 sha1 sha2 md5 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf xcbc cmac hmac attr kernel-netlink resolve socket-default stroke updown eap-identity eap-md5 eap-mschapv2 eap-dynamic eap-radius eap-tls eap-ttls eap-peap eap-tnc xauth-generic xauth-eap xauth-pam tnc-tnccs dhcp certexpire radattr addrblock unity
Virtual IP pools (size/online/offline):
10.10.10.0/24: 254/1/1
Listening IP addresses:
10.110.71.123
119.81.236.70
Connections:
IKEv1-CERT-XAUTH: %any...%any IKEv1, dpddelay=30s
IKEv1-CERT-XAUTH: local: [C=CN, O=VPN, CN=119.81.236.70] uses public key authentication
IKEv1-CERT-XAUTH: cert: "C=CN, O=VPN, CN=119.81.236.70"
IKEv1-CERT-XAUTH: remote: [C=CN, O=VPN, CN=strongSwan Client] uses public key authentication
IKEv1-CERT-XAUTH: cert: "C=CN, O=VPN, CN=strongSwan Client"
IKEv1-CERT-XAUTH: remote: uses XAuth authentication: any
IKEv1-CERT-XAUTH: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear
IKEv1-PSK-XAUTH: %any...%any IKEv1, dpddelay=30s
IKEv1-PSK-XAUTH: local: [119.81.236.70] uses pre-shared key authentication
IKEv1-PSK-XAUTH: remote: uses pre-shared key authentication
IKEv1-PSK-XAUTH: remote: uses XAuth authentication: any
IKEv1-PSK-XAUTH: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear
IKEv2-CERT: %any...%any IKEv2, dpddelay=30s
IKEv2-CERT: local: [C=CN, O=VPN, CN=119.81.236.70] uses public key authentication
IKEv2-CERT: cert: "C=CN, O=VPN, CN=119.81.236.70"
IKEv2-CERT: remote: [C=CN, O=VPN, CN=strongSwan Client] uses public key authentication
IKEv2-CERT: cert: "C=CN, O=VPN, CN=strongSwan Client"
IKEv2-CERT: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear
IKEv2-EAP: %any...%any IKEv2, dpddelay=30s
IKEv2-EAP: local: [119.81.236.70] uses public key authentication
IKEv2-EAP: cert: "C=CN, O=VPN, CN=119.81.236.70"
IKEv2-EAP: remote: uses EAP_MSCHAPV2 authentication with EAP identity '%any'
IKEv2-EAP: child: 0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear
Security Associations (1 up, 0 connecting):
IKEv2-CERT[6]: ESTABLISHED 20 seconds ago, 119.81.236.70[C=CN, O=VPN, CN=119.81.236.70]...116.233.140.216[C=CN, O=VPN, CN=strongSwan Client]
IKEv2-CERT[6]: IKEv2 SPIs: 7dc5e36f3505c5db_i be111cf11e69652d_r*, public key reauthentication in 2 hours
IKEv2-CERT[6]: IKE proposal: AES_CBC_128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_2048
IKEv2-CERT{6}: INSTALLED, TUNNEL, reqid 6, ESP in UDP SPIs: c835f5db_i c1c6879b_o
IKEv2-CERT{6}: AES_CBC_128/HMAC_SHA1_96, 0 bytes_i, 0 bytes_o, rekeying in 42 minutes
IKEv2-CERT{6}: 0.0.0.0/0 === 10.10.10.1/32
[root@test strongswan]# ipsec statusall
Status of IKE charon daemon (strongSwan 5.3.5, Linux 2.6.32-573.18.1.el6.x86_64, x86_64):
uptime: 56 seconds, since Apr 03 18:58:32 2016
malloc: sbrk 405504, mmap 0, used 349408, free 56096
worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 5
loaded plugins: charon aes des rc2 sha1 sha2 md5 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf xcbc cmac hmac attr kernel-netlink resolve socket-default stroke updown eap-identity eap-md5 eap-mschapv2 eap-dynamic eap-radius eap-tls eap-ttls eap-peap eap-tnc xauth-generic xauth-eap xauth-pam tnc-tnccs dhcp certexpire radattr addrblock unity
Listening IP addresses:
192.168.1.22
Connections:
home: %any...119.81.236.70 IKEv1, dpddelay=30s
home: local: uses pre-shared key authentication
home: local: uses XAuth authentication: any with XAuth identity 'stone'
home: remote: [119.81.236.70] uses pre-shared key authentication
home: child: dynamic === 0.0.0.0/0 TUNNEL, dpdaction=clear
rw: %any...119.81.236.70 IKEv2, dpddelay=30s
rw: local: [C=CN, O=VPN, CN=strongSwan Client] uses public key authentication
rw: remote: [C=CN, O=VPN, CN=119.81.236.70] uses public key authentication
rw: child: dynamic === 0.0.0.0/0 TUNNEL, dpdaction=clear
exempt: 127.0.0.1...%any IKEv1/2, dpddelay=30s
exempt: local: [127.0.0.1] uses public key authentication
exempt: remote: uses public key authentication
exempt: child: 192.168.1.0/24 === 192.168.1.0/24 PASS, dpdaction=clear
Shunted Connections:
exempt: 192.168.1.0/24 === 192.168.1.0/24 PASS
Security Associations (1 up, 0 connecting):
rw[1]: ESTABLISHED 26 seconds ago, 192.168.1.22[C=CN, O=VPN, CN=strongSwan Client]...119.81.236.70[C=CN, O=VPN, CN=119.81.236.70]
rw[1]: IKEv2 SPIs: 84ebacd73cf20b96_i* c0793701f46c9363_r, public key reauthentication in 2 hours
rw[1]: IKE proposal: AES_CBC_128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_2048
rw{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c7bfc2e3_i c6a4003a_o
rw{1}: AES_CBC_128/HMAC_SHA1_96, 0 bytes_i, 0 bytes_o, rekeying in 42 minutes
rw{1}: 10.10.10.1/32 === 0.0.0.0/0
ip route list table 220
192.168.1.0/24 dev eth0 proto static src 192.168.1.22
default via 192.168.1.1 dev eth0 proto static src 10.10.10.1
[root@test ~]# ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:bf:74:da brd ff:ff:ff:ff:ff:ff
inet 192.168.1.22/24 brd 192.168.1.255 scope global eth0
inet 10.10.10.1/32 scope global eth0
inet6 fe80::20c:29ff:febf:74da/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]# curl -s ip.cn | egrep -o '[0-9\.]+'
119.81.236.70
[root@test strongswan]# ipsec up rw
initiating IKE_SA rw[1] to 119.81.236.70
generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(HASH_ALG) ]
sending packet: from 192.168.1.22[500] to 119.81.236.70[500] (1148 bytes)
received packet: from 119.81.236.70[500] to 192.168.1.22[500] (481 bytes)
parsed IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) CERTREQ N(HASH_ALG) N(MULT_AUTH) ]
local host is behind NAT, sending keep alives
received cert request for "C=CN, O=VPN, CN=strongSwan CA"
sending cert request for "C=CN, O=VPN, CN=strongSwan CA"
authentication of 'C=CN, O=VPN, CN=strongSwan Client' (myself) with RSA_EMSA_PKCS1_SHA256 successful
sending end entity cert "C=CN, O=VPN, CN=strongSwan Client"
establishing CHILD_SA rw
generating IKE_AUTH request 1 [ IDi CERT CERTREQ IDr AUTH CPRQ(ADDR DNS) SA TSi TSr N(MOBIKE_SUP) N(NO_ADD_ADDR) N(MULT_AUTH) N(EAP_ONLY) ]
sending packet: from 192.168.1.22[4500] to 119.81.236.70[4500] (1564 bytes)
received packet: from 119.81.236.70[4500] to 192.168.1.22[4500] (1420 bytes)
parsed IKE_AUTH response 1 [ IDr CERT AUTH CPRP(ADDR DNS NBNS DNS NBNS) SA TSi TSr N(AUTH_LFT) N(MOBIKE_SUP) N(ADD_4_ADDR) ]
received end entity cert "C=CN, O=VPN, CN=119.81.236.70"
using certificate "C=CN, O=VPN, CN=119.81.236.70"
using trusted ca certificate "C=CN, O=VPN, CN=strongSwan CA"
checking certificate status of "C=CN, O=VPN, CN=119.81.236.70"
certificate status is not available
reached self-signed root ca with a path length of 0
authentication of 'C=CN, O=VPN, CN=119.81.236.70' with RSA_EMSA_PKCS1_SHA256 successful
IKE_SA rw[1] established between 192.168.1.22[C=CN, O=VPN, CN=strongSwan Client]...119.81.236.70[C=CN, O=VPN, CN=119.81.236.70]
scheduling reauthentication in 9988s
maximum IKE_SA lifetime 10528s
installing DNS server 8.8.8.8 to /etc/resolv.conf
handling INTERNAL_IP4_NBNS attribute failed
installing DNS server 8.8.4.4 to /etc/resolv.conf
handling INTERNAL_IP4_NBNS attribute failed
installing new virtual IP 10.10.10.1
CHILD_SA rw{1} established with SPIs c7bfc2e3_i c6a4003a_o and TS 10.10.10.1/32 === 0.0.0.0/0
received AUTH_LIFETIME of 9871s, scheduling reauthentication in 9331s
peer supports MOBIKE
connection 'rw' established successfully
[root@test strongswan]# ipsec start
Starting strongSwan 5.3.5 IPsec [starter]...
insmod /lib/modules/2.6.32-573.18.1.el6.x86_64/kernel/net/key/af_key.ko
insmod /lib/modules/2.6.32-573.18.1.el6.x86_64/kernel/net/ipv4/ah4.ko
insmod /lib/modules/2.6.32-573.18.1.el6.x86_64/kernel/net/ipv4/esp4.ko
insmod /lib/modules/2.6.32-573.18.1.el6.x86_64/kernel/net/xfrm/xfrm_ipcomp.ko
insmod /lib/modules/2.6.32-573.18.1.el6.x86_64/kernel/net/ipv4/ipcomp.ko
insmod /lib/modules/2.6.32-573.18.1.el6.x86_64/kernel/net/ipv4/tunnel4.ko
insmod /lib/modules/2.6.32-573.18.1.el6.x86_64/kernel/net/ipv4/xfrm4_tunnel.ko
: P12 client.cert.p12 "pceva.com"
: PSK "hello2016.pceva.com"
stone : XAUTH "PCeva2016"
stone : EAP "PCeva2016"
# ipsec.conf - strongSwan IPsec configuration file
config setup
uniqueids=never
conn %default
dpdaction=clear
conn home
keyexchange=ikev1
left=%any #本地端IP地址,魔术字%any表示任意
leftsourceip=%config #本地端(VPN客户端)的虚拟IP由远程端(VPN服务器)指定
leftauth=psk
leftauth2=xauth
right=119.81.236.70 #远程端(VPN服务器)的IP地址
rightsubnet=0.0.0.0/0 #远程端网络,0.0.0.0/0为通配,表示所有IP网段
rightauth=psk
xauth_identity=stone #指定XAUTH验证的用户名为stone
auto=add #strongSwan启动时添加连接类型但不启动
conn rw
keyexchange=ikev2
left=%any
leftsourceip=%config
leftauth=pubkey
leftid="C=CN, O=VPN, CN=strongSwan Client" #本地端标识,使用客户端证书的DN
right=119.81.236.70
rightid="C=CN, O=VPN, CN=119.81.236.70" #远程端标识,使用VPN服务器证书的DN
rightsubnet=0.0.0.0/0
rightauth=pubkey
auto=add
conn exempt #配置LAN访问不走IPsec通道
right=127.0.0.1
leftsubnet=192.168.1.0/24
rightsubnet=192.168.1.0/24
type=passthrough
auto=route #strongSwan启动时添加连接类型,有流量时启动连接
# strongswan.conf - strongSwan configuration file
#
# Refer to the strongswan.conf(5) manpage for details
#
# Configuration changes should be made in the included files
charon {
load_modular = no
plugins {
include strongswan.d/charon/*.conf
resolve {
file = /etc/resolv.conf #设置reslov.conf文件的正确路径为/etc/
}
}
}
include strongswan.d/*.conf
yum update
yum install gpm-devel pam-devel openssl-devel make gcc
wget http://download.strongswan.org/strongswan.tar.gz
tar xzvf strongswan.tar.gz
cd strongswan-5.3.5
./configure --prefix=/usr --sysconfdir=/etc/strongswan --enable-eap-identity --enable-eap-md5 \
--enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap \
--enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap \
--enable-xauth-pam --enable-dhcp --enable-openssl --enable-addrblock \
--enable-unity --enable-certexpire --enable-radattr --enable-tools \
--enable-openssl --disable-gmp
make
make install
[root@test ~]# ip add list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:bf:74:da brd ff:ff:ff:ff:ff:ff
inet 192.168.1.22/24 brd 192.168.1.255 scope global eth0
inet6 fe80::20c:29ff:febf:74da/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]# uname -a
Linux test 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
结束语
现在市场上云服务商已经有很多了,象亚马逊AWS,阿里云,腾讯云等等,在世界多地都有节点,主机节点的位置对于VPN的访问体验至关重要,因为即便是加密的流量,也是依托于国内和VPN服务器之间的公网连接,以我的经验,香港节点对我们来说应该是个最好的选择了。
自己动手才是王道,真是谁用谁知道。
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://sg.hqyman.cn/post/307.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~
评论列表: