<?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构建健壮的混合云网络</title>
	<atom:link href="https://www.fuwuqiok.com/tag/aws%e6%9e%84%e5%bb%ba%e5%81%a5%e5%a3%ae%e7%9a%84%e6%b7%b7%e5%90%88%e4%ba%91%e7%bd%91%e7%bb%9c/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构建健壮的混合云网络</title>
		<link>https://www.fuwuqiok.com/aws%e6%9e%84%e5%bb%ba%e5%81%a5%e5%a3%ae%e7%9a%84%e6%b7%b7%e5%90%88%e4%ba%91%e7%bd%91%e7%bb%9c/</link>
		<comments>https://www.fuwuqiok.com/aws%e6%9e%84%e5%bb%ba%e5%81%a5%e5%a3%ae%e7%9a%84%e6%b7%b7%e5%90%88%e4%ba%91%e7%bd%91%e7%bb%9c/#comments</comments>
		<pubDate>Fri, 27 Jul 2018 08:44:28 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[服务器代维]]></category>
		<category><![CDATA[服务器代维护]]></category>
		<category><![CDATA[服务器维护]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[AWS构建健壮的混合云网络]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3548</guid>
		<description><![CDATA[<p>构建健壮的混合云网络——BJS DX篇 &#160; 背景介绍： 近年来，随着公有云的普及，一方面，越来越多的 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/aws%e6%9e%84%e5%bb%ba%e5%81%a5%e5%a3%ae%e7%9a%84%e6%b7%b7%e5%90%88%e4%ba%91%e7%bd%91%e7%bb%9c/">AWS构建健壮的混合云网络</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<h1 class="lb-h2 blog-post-title">构建健壮的混合云网络——BJS DX篇</h1>
<p>&nbsp;</p>
<p><strong>背景介绍：</strong></p>
<p>近年来，随着公有云的普及，一方面，越来越多的用户选择利用公有云在弹性、灵活性等方面的优势，在云上部署新的应用系统，另一方面，大量的企业有很多现有的本地基础设施投资，所以企业上云的过程并不是一触而就的，期间势必存在云应用与本地数据中心应用并存的局面，为了更好的融合云与本地数据中心的应用环境，实现整体应用系统的稳定性和高可用性，构建一个健壮的混合云网络至关重要。</p>
<p>在AWS上，用来连接AWS与本地数据中心的方式主要有以下3种：</p>
<p>1.    纯VPN组网</p>
<p>2.    纯专线组网</p>
<p>3.    VPN与专线的混合组网</p>
<p>其中，对于AWS中国区来讲，由于AWS自身的VPN服务VGW目前尚未落地，客户急需要一个替代方案，能够达到类似于VGW的冗余及故障切换功能。</p>
<p>本篇主要讲述第二种组网方式，着眼点在于如何实现混合云网络的健壮性及故障自愈。</p>
<p>对于第一，第三种组网方式的高可用实现，请参考：</p>
<p>《构建健壮的混合云网络——BJS VPN篇》</p>
<p>《构建健壮的混合云网络——BJS DX+VPN篇》</p>
<p>对于如何实现对VPN流量的监控、故障告警及事件日志搜集，请参考：</p>
<p>《构建健壮的混合云网络——BJS DX+VPN篇》</p>
<p><strong>拓扑图：</strong></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-1.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-1.jpg" alt="1124-1" width="651" height="301" /></a></p>
<p>AWS与本地站点之间建立两条专线，为了保证一条专线故障后，剩下的专线能够承载所有的业务流量，建议使用主备模式，考虑到高可用，建议两条专线分别终结在SINNET和CIDS两个DX Location，并且可以使用两家专线提供商的链路。</p>
<p><strong>配置步骤：</strong></p>
<p>1.    申请专线</p>
<p>小于500M的专线由AWS APN Partner提供，这里以APN Partner方案为例，大于1G的专线接入请参考如下文档：</p>
<p><a href="https://www.amazonaws.cn/en/documentation/directconnect/">https://www.amazonaws.cn/en/documentation/directconnect/</a></p>
<p>向APN Partner申请链路，根据要求提供相关信息，通常包括用户AWS账号，专线带宽等信息。</p>
<p>2.    接受连接并创建virtual interface</p>
<p>当APN Partner建立好专线后，登入management console，选择Direct Connect服务，将可以看到相关的连接，需要选择接受连接。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-2.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-2.jpg" alt="1124-2" width="2548" height="422" /></a></p>
<p>创建Virtual Interface。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-3.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-3.jpg" alt="1124-3" width="2544" height="276" /></a></p>
<p>选择创建Private Virtual Interface，设置接口名称并与相关VPC的VGW关联</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-4.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-4.jpg" alt="1124-4" width="2530" height="932" /></a></p>
<p>根据自己的需要设置互联地址及本地站点的AS号</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-5.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-5.jpg" alt="1124-5" width="2538" height="1002" /></a></p>
<p>3.    下载本地站点端路由器的配置</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-6.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-6.jpg" alt="1124-6" width="2324" height="834" /></a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-7.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-7.jpg" alt="1124-7" width="1398" height="620" /></a></p>
<p>4.    修改本地路由器端BGP配置，实现主备冗余</p>
<p>a.    AWS侧出向流量主备通过AS-PATH属性实现</p>
<p>b.    本地站点侧出向流量主备通过Local-Preference属性实现</p>
<p>下面是本地站点侧，备份链路路由器上的参考配置：</p>
<p><code>route-map LOCAL-PRE permit 10</code></p>
<p><code> set local-preference 50</code></p>
<p><code>!</code></p>
<p><code>route-map PREPEND permit 10</code></p>
<p><code> set as-path prepend 1111 1111</code></p>
<p><code>！</code></p>
<p><code>router bgp 1111</code></p>
<p><code> network 0.0.0.0</code></p>
<p><code> neighbor 169.254.10.2 remote-as 17493</code></p>
<p><code> neighbor 169.254.10.2 route-map LOCAL-PRE in</code></p>
<p><code> neighbor 169.254.10.2 route-map PREPEND out</code></p>
<p>5.    确认接口up</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-8.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1124-8.jpg" alt="1124-8" width="2546" height="506" /></a></p>
<p>6.    设置需要通过专线访问本地站点的路由表的下一跳为VGW</p>
<h1 class="lb-h2 blog-post-title">构建健壮的混合云网络——BJS DX+VPN篇</h1>
<p><strong>背景介绍：</strong></p>
<p>近年来，随着公有云的普及，一方面，越来越多的用户选择利用公有云在弹性、灵活性等方面的优势，在云上部署新的应用系统，另一方面，大量的企业有很多现有的本地基础设施投资，所以企业上云的过程并不是一触而就的，期间势必存在云应用与本地数据中心应用并存的局面，为了更好的融合云与本地数据中心的应用环境，实现整体应用系统的稳定性和高可用性，构建一个健壮的混合云网络至关重要。</p>
<p>在AWS上，用来连接AWS与本地数据中心的方式主要有以下3种：</p>
<p>1.    纯VPN组网</p>
<p>2.    纯专线组网</p>
<p>3.    VPN与专线的混合组网</p>
<p>其中，对于AWS中国区来讲，由于AWS自身的VPN服务VGW目前尚未落地，客户急需要一个替代方案，能够达到类似于VGW的冗余及故障切换功能。</p>
<p>本篇主要讲述第三种组网方式，着眼点在于如何实现混合云网络的健壮性及故障自愈。</p>
<p>此外笔者始终认为“Network is not just ping success”，尤其对于大型企业来说，网络流量的监控，故障事件的告警，日志的搜集检索等功能并非可选项，所以本篇也会顺带介绍如何在AWS云上实现这些功能。</p>
<p>对于第一，第二种组网方式的高可用实现，请参考：</p>
<p>《构建健壮的混合云网络——BJS VPN篇》</p>
<p>《构建健壮的混合云网络——BJS DX篇》</p>
<p>注意：本篇以AWS中国区VGW尚未落地为前提，VPN部分以开源软件实现，但应用场景并不仅限于AWS中国区，如何客户需要一些VGW暂时无法满足的功能，同样可以在AWS Global利用本篇搭建符合自身需求的解决方案，具体可能的需求包括但不限于：</p>
<p>1.    需要使用VGW暂时不支持的加解密算法</p>
<p>2.    需要使用VGW暂时不支持的hash算法</p>
<p>3.    需要使用证书认证</p>
<p>4.    All in one解决方案，VPN设备除了提供VPN功能外，还需要提供防火墙，NAT等功能</p>
<p><strong>拓扑图：</strong></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-1.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-1.jpg" alt="1125-1" width="1402" height="728" /></a></p>
<p>对于DX与VPN互备的场景，有如下几种情况：</p>
<p>1.    1条DX+1条VPN</p>
<p>2.    2条DX+1条VPN</p>
<p>3.    1条DX+2条VPN</p>
<p>4.    2条DX+2条VPN</p>
<p>对于1，2两种场景下，可以简单地通过调整Private-1，Private-2的路由表实现AWS侧的主备，即：流量优先选择DX专线，在专线故障时切换到VPN链路。</p>
<p>启用路由传递，路由表中会出现一条10.10.0.0/16，target为VGW的路由</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-2.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-2.jpg" alt="1125-2" width="2532" height="1016" /></a></p>
<p>设置一条静态路由10.0.0.0/8，target为VPN设备的eni</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-3.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-3.jpg" alt="1125-3" width="2386" height="1066" /></a></p>
<p>由于路由最长匹配的原则，默认去往本地站点10.10.0.0/16的流量会通过VGW走专线，当专线发生故障的时候，10.10.0.0/16的路由不会传递进入路由表，此时10.0.0.0/8的路由生效，流量切换到VPN链路。</p>
<p>对于3，4两种场景下，无法通过上述方式在两条VPN链路之间切换，需要部署拓扑图中的monitor设备来监控DX和VPN链路及VPN设备的健康状态并实现链路切换。</p>
<p>本例主要介绍monitor及Strongswan设备上的脚本功能，及如何与监控，告警相结合。</p>
<p>VPC基本配置，DX基本配置，Strongswan配置及本地站点切换方式请参考：</p>
<p>《构建健壮的混合云网络——BJS VPN篇》</p>
<p>《构建健壮的混合云网络——BJS DX篇》</p>
<p>1.    链路切换逻辑：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-4.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-4.jpg" alt="1125-4" width="1422" height="806" /></a></p>
<p>当专线链路正常时，设置服务器的路由指向VGW，流量通过专线传输，当监测到专线故障时，将服务器路由指向相同AZ中的Strongswan，并且开始监测Strongswan实例及VPN链路的健康状态，当一条VPN链路发生故障时，切换相应流量跨AZ传输给另一个AZ中的Strongswan，当其中一个AZ的Strongswan发送故障时，切换流量的同时，通过stop/start该Strongswan恢复实例。</p>
<p>2.    除了链路切换功能外，通过monitor及Strongswan上运行脚本能实现故障告警，VPN流量统计及事件日志收集检索功能：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-5.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-5.jpg" alt="1125-5" width="1376" height="772" /></a></p>
<p>SNS邮件及短信告警：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-6.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-6.jpg" alt="1125-6" width="925" height="288" /></a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-7.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-7.jpg" alt="1125-7" width="756" height="1338" /></a></p>
<p>CloudWatch针对VPN流量监控：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-8.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-8.jpg" alt="1125-8" width="1269" height="731" /></a></p>
<p>Elasticsearch &amp; Kibana做事件日志收集及检索：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-9.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-9.jpg" alt="1125-9" width="1274" height="881" /></a></p>
<p>可以针对site，dx，vpn做检索：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-10.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-10.jpg" alt="1125-10" width="1277" height="751" /></a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-11.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-11.jpg" alt="1125-11" width="1271" height="671" /></a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-12.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-12.jpg" alt="1125-12" width="1280" height="734" /></a></p>
<p>所有脚本可以从如下的github上下载得到：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-13.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-13.jpg" alt="1125-13" width="1322" height="678" /></a></p>
<p>3.    脚本功能说明：</p>
<p>3.1 monitor实例上运行的脚本：</p>
<p>monitor.sh：</p>
<p>&nbsp;</p>
<p>1.    实现DX链路，VPN链路及VPN设备的健康检测并修改服务器路由切换流量</p>
<p>2.    发现故障后，产生告警通知，通过SNS服务邮件及短信通知相关运维人员</p>
<p>3.    本地产生故障日志，通过logstash输出到Elasticsearch服务存储</p>
<p>注：SNS短信通知目前BJS暂不支持，Elasticsearch &amp; Kibana服务在BJS需要自己搭建</p>
<p>monitor实例需要对路由表做操作，并与SNS服务交互，所以需要赋予相关的角色</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-14.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-14.jpg" alt="1125-14" width="1037" height="301" /></a></p>
<p>其中，monitor policy的配置如下：</p>
<p><code>{</code></p>
<p><code>    "Version": "2012-10-17",</code></p>
<p><code>    "Statement": [</code></p>
<p><code>        {</code></p>
<p><code>            "Action": [</code></p>
<p><code>                "ec2:DescribeInstances",</code></p>
<p><code>                "ec2:CreateRoute",</code></p>
<p><code>                "ec2:ReplaceRoute",</code></p>
<p><code>                "ec2:StartInstances",</code></p>
<p><code>                "ec2:StopInstances"</code></p>
<p><code>            ],</code></p>
<p><code>            "Effect": "Allow",</code></p>
<p><code>            "Resource": "*"</code></p>
<p><code>        }</code></p>
<p><code>    ]</code></p>
<p><code>}</code></p>
<p>3.2 Strongswan实例上运行的脚本：</p>
<p>tunnel_init.sh：创建tunnel接口及路由相关流量到tunnel口</p>
<p>traffic_monitor.sh：收集进出tunnel口的VPN流量统计信息，通过自定义metric发送到CloudWatch中，实现VPN流量的监控</p>
<p>ipsec.conf/ipsec.secrets配置文件：Strongswan配置文件，建立ipsec vpn隧道</p>
<p>Strongswan实例需要收集VPN流量信息并与CloudWatch交互，所以需要赋予相关的角色</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-141.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/07/1125-141.jpg" alt="1125-141" width="1037" height="301" /></a></p>
<p>4.    脚本使用方法：</p>
<p>monitor.sh：运行在monitor实例上，monitor实例需要拥有操控路由表，SNS等</p>
<p>monitor.sh的如下脚本语句需要做相应的修改</p>
<p><code>VPN_ID1="i-0e1466e8a5dd4892c"</code></p>
<p><code>VPN_ID2="i-0430fe110cdec5835"</code></p>
<p><code>VGW_ID="vgw-078bcc55"</code></p>
<p><code>VPN_RT_ID1="rtb-468f5222"</code></p>
<p><code>VPN_RT_ID2="rtb-4b8f522f"</code></p>
<p><code>DX_IP="10.10.3.100"</code></p>
<p><code>Remote_IP1="169.254.100.1"</code></p>
<p><code>Remote_IP2="169.254.200.1"</code></p>
<p><code>logstash_site="Singapore"</code></p>
<p><code>litterbin=$(aws sns publish --region ap-southeast-1 --topic-arn "arn:aws:sns:ap-southeast-1:93870664XXXX:DCI-Status" --subject "Status of DCI between Singapore and Ireland Changed!" --message file://logfile)</code></p>
<p><code>litterbin=$(aws sns publish --region ap-southeast-1 --phone-number "+861860135XXXX" --message file://logfile)</code></p>
<p>其中VPN_ID1，VPN_ID2分别为Strongswan-1，Strongswan-2的instance id，VGW_ID为VGW的id，VPN_RT_ID1，VPN_RT_ID2分别为Private-1，Private-2关联的路由表id，DX_IP为DX链路的检测ip，通常为专线提供商MPLS VPN网络的PE设备或者是本地站点的出口路由器公网ip，Remote_IP1，Remote_IP2分别为本地站点两条VPN的隧道口ip，logstash_site为AWS站点标示，该值会体现在告警及日志中，用于区分多个AWS站点。</p>
<p>–region，–topic-arn，–phone-number根据需要修改，其中SNS的topic需要事先创建并且通过相关邮箱订阅来接收消息。</p>
<p>所有事件日志会先写入本地/tmp/logstash.txt文件中，通过logstash上传给elasticsearch。</p>
<p>&nbsp;</p>
<p>修改/etc/logstash/conf.d/logstash.conf</p>
<p><code>input {</code></p>
<p><code>file {</code></p>
<p><code>         path =&gt; "/tmp/logstash.txt"</code></p>
<p><code>         codec =&gt; json</code></p>
<p><code>}</code></p>
<p><code>}</code></p>
<p>&nbsp;</p>
<p><code>output {</code></p>
<p><code>elasticsearch {</code></p>
<p><code>         hosts =&gt; "http://search-test-cfwkwatg5unnpsgvbd5lyruquy.ap-southeast-1.es.amazonaws.com"</code></p>
<p><code>         index =&gt; "XXXX"</code></p>
<p><code>}</code></p>
<p><code>}</code></p>
<p>可以设置/etc/rc.d/rc.local文件，使monitor实例开机运行monitor.sh脚本</p>
<p>&nbsp;</p>
<p>vpn_monitor.sh：运行在Strongswan实例上，创建VPN隧道接口及相关路由</p>
<p>traffic_monitor.sh：运行在Strongswan实例上，收集隧道接口的流量信息并以自定义metric的方式传输给CloudWatch服务</p>
<p>可以设置/etc/rc.d/rc.local文件，使Strongswan实例开机运行vpn_monitor.sh和traffic_monitor脚本</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/aws%e6%9e%84%e5%bb%ba%e5%81%a5%e5%a3%ae%e7%9a%84%e6%b7%b7%e5%90%88%e4%ba%91%e7%bd%91%e7%bb%9c/">AWS构建健壮的混合云网络</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/aws%e6%9e%84%e5%bb%ba%e5%81%a5%e5%a3%ae%e7%9a%84%e6%b7%b7%e5%90%88%e4%ba%91%e7%bd%91%e7%bb%9c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
