<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>服务器安全维护工作室 &#187; 如何在AWS上构建基于 OpenSwan 的软件 VPN 解决方案</title>
	<atom:link href="https://www.fuwuqiok.com/tag/%e5%a6%82%e4%bd%95%e5%9c%a8aws%e4%b8%8a%e6%9e%84%e5%bb%ba%e5%9f%ba%e4%ba%8e-openswan-%e7%9a%84%e8%bd%af%e4%bb%b6-vpn-%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.fuwuqiok.com</link>
	<description></description>
	<lastBuildDate>Sun, 01 Mar 2020 07:28:40 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.26</generator>
	<item>
		<title>如何在AWS上构建基于 OpenSwan 的软件 VPN 解决方案</title>
		<link>https://www.fuwuqiok.com/%e5%a6%82%e4%bd%95%e5%9c%a8aws%e4%b8%8a%e6%9e%84%e5%bb%ba%e5%9f%ba%e4%ba%8e-openswan-%e7%9a%84%e8%bd%af%e4%bb%b6-vpn-%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/</link>
		<comments>https://www.fuwuqiok.com/%e5%a6%82%e4%bd%95%e5%9c%a8aws%e4%b8%8a%e6%9e%84%e5%bb%ba%e5%9f%ba%e4%ba%8e-openswan-%e7%9a%84%e8%bd%af%e4%bb%b6-vpn-%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/#comments</comments>
		<pubDate>Fri, 27 Jul 2018 08:54:18 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Amazon AWS]]></category>
		<category><![CDATA[linux代维]]></category>
		<category><![CDATA[linux服务器代维]]></category>
		<category><![CDATA[linux服务器维护]]></category>
		<category><![CDATA[服务器代维]]></category>
		<category><![CDATA[如何在AWS上构建基于 OpenSwan 的软件 VPN 解决方案]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3601</guid>
		<description><![CDATA[<p>概述 随着云的普及以及即用即付的模式，正在被大家逐渐接受，那么在初期从原始数据中心到云迁移的过程中，为了保证数 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%a6%82%e4%bd%95%e5%9c%a8aws%e4%b8%8a%e6%9e%84%e5%bb%ba%e5%9f%ba%e4%ba%8e-openswan-%e7%9a%84%e8%bd%af%e4%bb%b6-vpn-%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/">如何在AWS上构建基于 OpenSwan 的软件 VPN 解决方案</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<h3>概述</h3>
<p>随着云的普及以及即用即付的模式，正在被大家逐渐接受，那么在初期从原始数据中心到云迁移的过程中，为了保证数据的平稳迁移，并不推荐将应用以及数据库一次性的迁移到云中。所有项目都应该分阶段来进行，阶段迁移的情况下就必须要将云资源与本地数据中心的资源互连互通。</p>
<p>要做到互连互通，有三种备选方案，互联网，专线直连（DX）和 VPN。从三个方面比较下这三种解决方案，安全，稳定性以及费用。DX 服务无疑是最优的一种解决方案，提供安全稳定的网络性能，高吞吐量。由于国内专线铺设所带来的高昂费用，所以在初期阶段，DX 并不是一个最优的。这里面互联网是最便宜的，因为本身数据中心就已经支付了这部分费用，只要保证云中的资源可以上互联网就可以了，但互联网面临的问题是网络依赖互联网，互联网的网络性能并不是可控的，另外一方面是互联网的安全性。VPN 呢是基于互联网的服务，虽然不能保证网络性通的可控，但可以做到数据的安全。</p>
<p>就以上比较而言，在初期阶段，VPN 无疑是一种高性比的安全以及节约成本的方案。考虑到目前北京区域并不支持硬件VPN的服务，即Global区域的VPN Connection。那么有没有可以替代的方案呢？答案是肯定的，一切问题都难不倒我们伟大的开源组织，开源方案如 OpenSwan （今天的主角），StrongSwan，Raccoon等等了。除了开源的解决方案外，还有一些商业解决方案，比如Sanfor 深信服，Hillstone 山石，Checkpoint , Cisco CSR1000v等也可以部署，有兴趣的可以与相应的软件提供商联系。</p>
<p>前面说了那么多关于VPN的各种软件，那么该如何选择呢？这里我们从使用上来划分下吧，将VPN主要划分为两类，一类是工作于客户端到服务端的模式，像OpenVPN，SSL VPN，L2TP，PPTP这些都是需要客户端主动发起连接，拨到Server端在两者之间建立一个逻辑上的隧道 (tunnel)进行通信。这种方式一般适用于个人到总部场景。服务器是无法主动发起连接到客户端。</p>
<p>另外一种就是站点到站点（site-to-site）的模式，像OpenSwan，StrongSwan， Raccoon 等软件，这种情况下两端会各有一个设备负责来建立两个站点之间安全通信的隧道，任何需要到对端的通信都会触发设备来建立安全隧道通信。</p>
<p>那么公司原有数据中心与云通信都是双向通信，所以站点到站点更合理。</p>
<p>实际上这里说的 VPN 即是指 IPsec VPN，IPsec 是一种工业标准，只要支持这种标准的设备都可以互相协商建立一个安全的隧道出来，比如支持的硬件设备有路由器，防火墙以及专业的 VPN 设备。</p>
<p>说了这么多，下面我们就以 AWS 端为 OpenSwan 与 Cisco 的路由器之间的配置为例。</p>
<h3>场景及拓扑</h3>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-1.png" alt="1101-1" width="1259" height="514" /></a></p>
<p>拓扑如上图，AWS端建立一个VPC（CIDR：192.168.0.0/16），包含两个子网，一个可以上互联网的Public子网192.168.1.0/24以及私有子网Private 192.168.2.0/24。在公有子网上会配置一台OpenSwan实例与公司的Cisco设备做VPN连接。</p>
<p>OpenSwan的EIP地址为54.223.152.218 子网：192.168.1.0/24</p>
<p>Cisco设备的公网地址为54.223.170.5 子网：10.1.2.0/24</p>
<p>目标：实现AWS上私有子网192.168.2.0/24和数据中心10.1.2.0/24双向互通</p>
<h3>详细配置步骤</h3>
<p>1.配置 VPC 基础环境</p>
<p>1.1 创建 VPC</p>
<p>在AWS console界面点击VPC，在左侧点击“您的VPC”, 创建VPC</p>
<p>名称标签： MyVPC</p>
<p>CIDR块： 192.168.0.0/16</p>
<p>租赁：默认</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-2.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-2.png" alt="1101-2" width="648" height="275" /></a></p>
<p>1.2 创建子网</p>
<p>将鼠标点到子网，选择创建子网</p>
<p>标签名称：Public</p>
<p>VPC：选择第一步创建好的VPC</p>
<p>可用区：保持默认</p>
<p>CIDR块：192.168.1.0/24</p>
<p>以同样的方法创建一个192.168.2.0/24的子网</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-3.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-3.png" alt="1101-3" width="880" height="436" /></a></p>
<p>1.3 创建路由表</p>
<p>点击路由表，创建路由表</p>
<p>名称标签：PrivateRoute</p>
<p>VPC：选择1.1创建好的VPC</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-4.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-4.png" alt="1101-4" width="859" height="333" /></a></p>
<p>创建完成以后，点到刚刚创建好的路由表，在页面下列点击子网关联，点击编辑</p>
<p>在192.168.2.0/24的路由前打勾，点击保存。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-5.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-5.png" alt="1101-5" width="843" height="448" /></a></p>
<p>1.4 创建 IGW</p>
<p>点击Internet网关，创建Internet网关</p>
<p>名称标签：MyIGW</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-6.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-6.png" alt="1101-6" width="856" height="301" /></a>创建完成，点击附加到VPC</p>
<p>选择新创建好的VPC</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-7.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-7.png" alt="1101-7" width="864" height="365" /></a></p>
<p>2. 启动并配置 VPN 实例</p>
<p>2.1 启动实例</p>
<p>到EC2页面，点击启动实例。选择Amazon Linux</p>
<p>在详细信息页中，网络请选择新创建的VPC</p>
<p>子网选择192.168.1.0/24</p>
<p>点击下一步，存储标签等按需配置</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-8.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-8.png" alt="1101-8" width="1083" height="498" /></a></p>
<p>配置安全组，选择创建一个新的安全组</p>
<p>添加规则</p>
<p>自定义的UDP规则，端口500 来源任何位置</p>
<p>自定义的UDP规则，端口4500 来源任何位置</p>
<p>自定义协议， 协议 50 来源任何位置</p>
<p>所有流量 来源为 192.168.2.0/24</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-9.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-9.png" alt="1101-9" width="1088" height="477" /></a></p>
<p>注意：一定要放行来自于192.168.2.0/24的流量，否则无法通信。</p>
<p>最后审核启动，启动时指定一个用于登陆实例的key文件,如果没有创建一个新的。</p>
<p>2.2 配置弹性 IP （EIP）</p>
<p>在EC2页面，左侧导航栏找到弹性IP，申请分配新地址，并将其关联到新创建的OpenSwan实例。这里申请到的为 54.223.152.218。</p>
<p>2.3 关闭源/目的检查</p>
<p>在EC2页面点击OpenSwan实例，右键选择联网，更改源/目标检查，点“是，请禁用”</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-10.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-10.png" alt="1101-10" width="545" height="311" /></a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-11.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-11.png" alt="1101-11" width="462" height="297" /></a></p>
<p>3. 安装配置 OpenSwan</p>
<p>3.1 登录到实例安装 OpenSwan</p>
<p>如何登陆实例请参考如下文档：</p>
<p>https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/putty.html</p>
<p>登陆完成以后，运行如下命令安装OpenSwan</p>
<p><code>$ sudo yum -y install openswan</code></p>
<p>3.2 根据Cisco 参数来配置 OpenSwan</p>
<p>修改/etc/ipsec.conf去掉最后一行include /etc/ipsec.d/*.conf 的注释</p>
<p><code>$ sudo vim /etc/ipsec.conf</code></p>
<p><code>include /etc/ipsec.d/*.conf</code></p>
<p>&nbsp;</p>
<p>Cisco路由器的配置如下：</p>
<p><code>crypto isakmp policy 10</code></p>
<p><code>encr aes</code></p>
<p><code>authentication pre-share</code></p>
<p><code>group 2</code></p>
<p><code>crypto isakmp key aws123 address 54.223.152.218</code></p>
<p><code>!</code></p>
<p><code>!</code></p>
<p><code>crypto ipsec transform-set OpenSwan esp-aes esp-sha-hmac</code></p>
<p><code>mode tunnel</code></p>
<p><code>!</code></p>
<p><code>!</code></p>
<p><code>!</code></p>
<p><code>crypto map OpenSwan 10 ipsec-isakmp</code></p>
<p><code>set peer 54.223.152.218</code></p>
<p><code>set transform-set OpenSwan</code></p>
<p><code>match address 100</code></p>
<p><code>!</code></p>
<p><code>!</code></p>
<p><code>interface GigabitEthernet1</code></p>
<p><code>ip address 54.223.170.5 255.255.255.252</code></p>
<p><code>ip mtu 1400</code></p>
<p><code>ip tcp adjust-mss 1360</code></p>
<p><code>crypto map OpenSwan</code></p>
<p><code>!</code></p>
<p><code>access-list 100 permit ip 10.1.2.0 0.0.0.255 192.168.2.0 0.0.0.255</code></p>
<p><code>ip route 0.0.0.0 0.0.0.0 54.223.170.6</code></p>
<p>根据cisco的配置创建OpenSwan的配置如下：</p>
<p><code>$ sudo vim /etc/ipsec.d/cisco.conf</code></p>
<p><code>conn cisco</code></p>
<p><code>authby=secret</code></p>
<p><code>auto=start</code></p>
<p><code>leftid=54.223.152.218</code></p>
<p><code>left=%defaultroute</code></p>
<p><code>leftsubnet=192.168.2.0/24</code></p>
<p><code>leftnexthop=%defaultroute</code></p>
<p><code>right=54.223.170.5</code></p>
<p><code>rightsubnet=10.1.2.0/24</code></p>
<p><code>keyingtries=%forever</code></p>
<p><code>ike=aes128-sha1;modp1024</code></p>
<p><code>ikelifetime=86400s</code></p>
<p><code>phase2alg=aes128-sha1</code></p>
<p><code>salifetime=3600s</code></p>
<p><code>pfs=no</code></p>
<p>配置解释：</p>
<p>leftid 标明本地对应公网IP</p>
<p>letftsubnet为本地子网</p>
<p>right为对端公网地址</p>
<p>rightsubnet为对端子网</p>
<p>ike为第一阶段参数</p>
<p>ikelifetime为第一阶段的生存时间</p>
<p>phase2alg为第二阶段参数</p>
<p>salifetime为第二阶段生存时间</p>
<p>结果如下图：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-12.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-12.png" alt="1101-12" width="415" height="298" /></a></p>
<p>配置预共享密钥：</p>
<p><code>$ sudo vim /etc/ipsec.d/cisco.secrets</code></p>
<p>54.223.152.218  54.223.170.5: PSK “aws123”</p>
<p>启动openswan服务并做配置检查</p>
<p><code>$ sudo service ipsec start</code></p>
<p><code>$ sudo ipsec verify</code></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-13.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-13.png" alt="1101-13" width="776" height="323" /></a></p>
<p>3.3 修改系统参数</p>
<p>更改系统参数做IP转发并关闭重定向功能</p>
<p>编辑/etc/sysctl.conf内核配置文件，做如下修改</p>
<p><code>$ vim /etc/sysctl.conf</code></p>
<p><code>$ vim /etc/sysctl.conf</code></p>
<p><code>net.ipv4.ip_forward = 1</code></p>
<p><code>net.ipv4.conf.all.accept_redirects = 0</code></p>
<p><code>net.ipv4.conf.all.send_redirects = 0</code></p>
<p><code>net.ipv4.conf.default.send_redirects = 0</code></p>
<p><code>net.ipv4.conf.eth0.send_redirects = 0</code></p>
<p><code>net.ipv4.conf.default.accept_redirects = 0</code></p>
<p><code>net.ipv4.conf.eth0.accept_redirects = 0</code></p>
<p>配置完成以后，启用新的配置</p>
<p><code>$ sudo sysctl –p</code></p>
<p>3.4 更改 OpenSwan 的网卡 MSS 值</p>
<p><code>$ sudo iptables -t mangle -A FORWARD -o eth0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1387</code></p>
<p>3.5 修改 VPC 私有子网路由表</p>
<p>找到VPC Console页面，在左侧点路由表，找到192.168.2.0/24关联的路由表（1.3中创建）， 在页面下方点击路由，编辑</p>
<p>添加其他路由，</p>
<p>目标： 10.1.2.0/24</p>
<p>目标：OpenSwan实例ID (i-xxxxx)</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-14.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1101-14.png" alt="1101-14" width="721" height="257" /></a></p>
<p>4. 测试连通性</p>
<p>以上步骤都完成以后，就可以在192.168.2.0网段的实例进行测试了。使用 ping 测试到 10.1.2.x private 私有地址段的一个地址。</p>
<p><code>ping 10.1.2.3</code></p>
<p>检查 IPsec tunnel 状态：</p>
<p><code>$ sudo service ipsec status</code></p>
<p><code>IPsec running - pluto pid: 25674</code></p>
<p><code>pluto pid 25674</code></p>
<p><code>1 tunnels up</code></p>
<p><code>some eroutes exist</code></p>
<h3>常见问题及排错</h3>
<p>1.  IPsec Tunnel 没有正常建立</p>
<p>首先检查到对端 IP 是否可以通信，检查安全组是否放行 IKE 需要的端口 UDP 500。如果网络层没问题，检查各项参数配置是否有错误。</p>
<p>2. 隧道建立成功，但是无法进行通信</p>
<p>首先检查 IP forward 是否设置为 1？VPN 实例安全组是否放行了相应的策略？路由是否正确？NAT 是否影响？</p>
<p>3. NAT 问题</p>
<p>如果您的 CGW 配置了 NAT 与 VPN 工作，根据厂家不同对 VPN 包的处理顺序不一致，如果源 NAT 在 VPN 之前被处理了，因为源地址发生了改变，所以也就不会再被 VPN 处理，造成通信失败。像 Cisco 设备就需要做 NAT 的例外策略。主流的 Cisco ASA 就需要做相应修改，参考如下：</p>
<p>8.2 及以前的版本：</p>
<p><code>nat (inside) 0 access-list nat_exemption</code><br />
<code>access-list nat_exemption extended permit ip 192.168.1.0 255.255.255.0 10.0.0.0 255.255.255.0</code></p>
<p>8.3 及更新的版本：</p>
<p><code>object network obj-192.168.1.0</code></p>
<p><code>subnet 192.168.1.0 255.255.255.0</code></p>
<p><code>object network obj-10.0.0.0</code></p>
<p><code>subnet 10.0.0.0 255.255.255.0</code></p>
<p><code>nat (inside,any) source static obj-192.168.1.0 obj-192.168.1.0 destination static obj-10.0.0.0 obj-10.0.0.0 no-proxy-arp</code></p>
<p>如果您经过以上步骤还是不能成功搭建 VPN，AWS Support 提供专业化的技术支持，可根据您当前或计划的使用案例为您提供一套独特的工具和专业知识。建议您开案例联系Support 技术支持。</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%a6%82%e4%bd%95%e5%9c%a8aws%e4%b8%8a%e6%9e%84%e5%bb%ba%e5%9f%ba%e4%ba%8e-openswan-%e7%9a%84%e8%bd%af%e4%bb%b6-vpn-%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/">如何在AWS上构建基于 OpenSwan 的软件 VPN 解决方案</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e5%a6%82%e4%bd%95%e5%9c%a8aws%e4%b8%8a%e6%9e%84%e5%bb%ba%e5%9f%ba%e4%ba%8e-openswan-%e7%9a%84%e8%bd%af%e4%bb%b6-vpn-%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
