<?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; ROS一键搭建 NatGateway 让阿里 VPC 与 Internet 的互访教程</title>
	<atom:link href="https://www.fuwuqiok.com/tag/ros%e4%b8%80%e9%94%ae%e6%90%ad%e5%bb%ba-natgateway-%e8%ae%a9%e9%98%bf%e9%87%8c-vpc-%e4%b8%8e-internet-%e7%9a%84%e4%ba%92%e8%ae%bf%e6%95%99%e7%a8%8b/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>ROS一键搭建 NatGateway 让阿里 VPC 与 Internet 的互访教程</title>
		<link>https://www.fuwuqiok.com/ros%e4%b8%80%e9%94%ae%e6%90%ad%e5%bb%ba-natgateway-%e8%ae%a9%e9%98%bf%e9%87%8c-vpc-%e4%b8%8e-internet-%e7%9a%84%e4%ba%92%e8%ae%bf%e6%95%99%e7%a8%8b/</link>
		<comments>https://www.fuwuqiok.com/ros%e4%b8%80%e9%94%ae%e6%90%ad%e5%bb%ba-natgateway-%e8%ae%a9%e9%98%bf%e9%87%8c-vpc-%e4%b8%8e-internet-%e7%9a%84%e4%ba%92%e8%ae%bf%e6%95%99%e7%a8%8b/#comments</comments>
		<pubDate>Sat, 11 Mar 2017 00:18:57 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[ROS一键搭建 NatGateway 让阿里 VPC 与 Internet 的互访教程]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3203</guid>
		<description><![CDATA[<p>ROS搭建SNAT网关使专有网络访问Internet 背景 专有网络环境下，云服务器ECS实例不能直接访问公网 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/ros%e4%b8%80%e9%94%ae%e6%90%ad%e5%bb%ba-natgateway-%e8%ae%a9%e9%98%bf%e9%87%8c-vpc-%e4%b8%8e-internet-%e7%9a%84%e4%ba%92%e8%ae%bf%e6%95%99%e7%a8%8b/">ROS一键搭建 NatGateway 让阿里 VPC 与 Internet 的互访教程</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<h2 class="blog-title">ROS搭建SNAT网关使专有网络访问Internet</h2>
<div class="content-detail">
<h2 id="1">背景</h2>
<p>专有网络环境下，云服务器ECS实例不能直接访问公网，一种方法是给需要访问公网的ECS实例申请弹性IP，但是如果有大量的ECS实例同时需要访问公网，这种方法就不可行。今天将介绍一种SNAT网关访问公网的方式。如下图所示 :</p>
<p>::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::0</p>
<p>这种方法需要申请一台额外的ECS实例绑定EIP做VPC网络的SNAT网关。首先这台ECS实例要在指定的VPC网络中，要绑定EIP，配置这台ECS实例上的iptables， 最后在指定VPC网络的路由表中添加下一跳是这台ECS的路由项。详细的手动配置过程请参考<a href="https://help.aliyun.com/document_detail/27738.html?spm=5176.100239.blogcont55998.16.IimFcR">这里</a>。</p>
<h2 id="2">ROS资源介绍</h2>
<p>下面将介绍如何通过ROS自动化创建配置VPC SNAT网关。在模版中使用了ROS的如下资源：</p>
<p><a href="https://ros.console.aliyun.com/#/resourceType/detail/ALIYUN::ECS::EIP/metadata">ALIYUN::ECS::EIP</a></p>
<ul>
<li>InternetChargeType：计费方式，按带宽或者按照流量</li>
<li>Bandwidth： 带宽在［1～200］取值，单位是Mbps</li>
</ul>
<p>创建EIP资源</p>
<p><a href="https://ros.console.aliyun.com/#/resourceType/detail/ALIYUN::ECS::EIPAssociation/metadata">ALIYUN::ECS::EIPAssociation</a></p>
<ul>
<li>AllocationId：分配的EIP ID</li>
<li>InstanceId： 需要绑定EIP的ECS instance ID</li>
</ul>
<p>本资源资源将绑定EIP到指定的ECS实例</p>
<p><a href="https://ros.console.aliyun.com/#/resourceType/detail/ALIYUN::ECS::Route/metadata">ALIYUN::ECS::Route</a></p>
<ul>
<li>RouteId： 指定VPC网络中的路由器ID</li>
<li>RouteTableId： 指定VPC网络中路由表ID</li>
<li>DestinationCidrBlock： 路由项的目标网段</li>
<li>NextHopId：路由项的下一跳</li>
</ul>
<p>本资源将会添加一条路由到指定VPC网络的路由表中，它的下一跳是SNAT网关</p>
<p><a href="https://ros.console.aliyun.com/#/resourceType/detail/ALIYUN::ECS::InstanceGroup/metadata">ALIYUN::ECS::InstanceGroup</a></p>
<ul>
<li>本例中主要使用了UserData属性，用户通过指定脚本给UserData，当ECS启动的时候，就会自动配置iptables。</li>
</ul>
<p>本资源就是创建SNAT网关</p>
<h2 id="3">编写ROS模版</h2>
<p>在模版中，首先说明此stack需要一个EIP资源，一台ECS实例，并且把EIP绑定到ECS资源上，最终通过执行我们传给ECS的UserData脚本自动化的配置iptbales，最终把下一跳指向ECS的路由项添加到VPC路由器的路由表里面。最终的ROS模版如下：</p>
<pre><code class="hljs json" data-language="">{
  <span class="hljs-attr">"ROSTemplateFormatVersion"</span>: <span class="hljs-string">"2015-09-01"</span>,
  <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"一键创建SNAT网关"</span>,
  <span class="hljs-attr">"Parameters"</span>: {
    <span class="hljs-attr">"SecurityGroupId"</span>: {
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"安全组ID"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>
    },
    <span class="hljs-attr">"RouteTableId"</span>: {
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"专有网络中路由器ID"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>
    },
    <span class="hljs-attr">"RouteId"</span>: {
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"专有网络中路由器ID"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>
    },
    <span class="hljs-attr">"EIPBandwidth"</span>: {
      <span class="hljs-attr">"Default"</span>: <span class="hljs-number">5</span>,
      <span class="hljs-attr">"MinValue"</span>: <span class="hljs-number">1</span>,
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"弹性公网IP的限速，默认为 5Mbps。"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"Number"</span>,
      <span class="hljs-attr">"MaxValue"</span>: <span class="hljs-number">200</span>
    },
    <span class="hljs-attr">"ECSZoneId"</span>: {
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"可用区, , &lt;a href='#/product/cn-shenzhen/list/zoneList' target='_blank'&gt;查看可用区&lt;/a&gt;"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>
    },
    <span class="hljs-attr">"ECSPassword"</span>: {
      <span class="hljs-attr">"NoEcho"</span>: <span class="hljs-literal">true</span>,
      <span class="hljs-attr">"MaxLength"</span>: <span class="hljs-number">30</span>,
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"实例的密码"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>,
      <span class="hljs-attr">"ConstraintDescription"</span>: <span class="hljs-string">"8-30个字符, 必须同时包含三项（大、小写字母，数字和特殊符号）."</span>,
      <span class="hljs-attr">"MinLength"</span>: <span class="hljs-number">8</span>
    },
    <span class="hljs-attr">"VSwitchId"</span>: {
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>
    },
    <span class="hljs-attr">"VpcId"</span>: {
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>
    },
    <span class="hljs-attr">"VSwitchCidrBlock"</span>: {
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"通过SNAT网关访问外网的VSwitch网段，此网段必须属于VPC"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>
    },
    <span class="hljs-attr">"EIPInternetChargeType"</span>: {
      <span class="hljs-attr">"Default"</span>: <span class="hljs-string">"PayByTraffic"</span>,
      <span class="hljs-attr">"AllowedValues"</span>: [
        <span class="hljs-string">"PayByBandwidth"</span>,
        <span class="hljs-string">"PayByTraffic"</span>
      ],
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"弹性公网IP计费类型，PayByBandwidth(按固定带宽计费)，PayByTraffic(按使用流量计费)，固定带宽的费用以天计，使用流量的费用以小时计"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>
    },
    <span class="hljs-attr">"ECSSysDiskSize"</span>: {
      <span class="hljs-attr">"Default"</span>: <span class="hljs-number">40</span>,
      <span class="hljs-attr">"MinValue"</span>: <span class="hljs-number">40</span>,
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"系统盘大小，40-500之间"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"Number"</span>,
      <span class="hljs-attr">"MaxValue"</span>: <span class="hljs-number">500</span>
    },
    <span class="hljs-attr">"ECSDiskCategory"</span>: {
      <span class="hljs-attr">"Default"</span>: <span class="hljs-string">"cloud_efficiency"</span>,
      <span class="hljs-attr">"AllowedValues"</span>: [
        <span class="hljs-string">"cloud"</span>,
        <span class="hljs-string">"cloud_efficiency"</span>,
        <span class="hljs-string">"cloud_ssd"</span>
      ],
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"系统盘的磁盘种类, 普通云盘（cloud）、高效云盘（cloud_efficiency）或SSD云盘（cloud_ssd）"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>
    },
    <span class="hljs-attr">"ECSInstanceType"</span>: {
      <span class="hljs-attr">"Default"</span>: <span class="hljs-string">"ecs.s2.large"</span>,
      <span class="hljs-attr">"AllowedValues"</span>: [
        <span class="hljs-string">"ecs.t1.small"</span>,
        <span class="hljs-string">"ecs.s1.small"</span>,
        <span class="hljs-string">"ecs.s1.medium"</span>,
        <span class="hljs-string">"ecs.s1.large"</span>,
        <span class="hljs-string">"ecs.s2.small"</span>,
        <span class="hljs-string">"ecs.s2.large"</span>,
        <span class="hljs-string">"ecs.s2.xlarge"</span>,
        <span class="hljs-string">"ecs.s2.2xlarge"</span>,
        <span class="hljs-string">"ecs.s3.medium"</span>,
        <span class="hljs-string">"ecs.s3.large"</span>,
        <span class="hljs-string">"ecs.m1.medium"</span>,
        <span class="hljs-string">"ecs.m2.medium"</span>,
        <span class="hljs-string">"ecs.m1.xlarge"</span>,
        <span class="hljs-string">"ecs.c1.small"</span>,
        <span class="hljs-string">"ecs.c1.large"</span>,
        <span class="hljs-string">"ecs.c2.medium"</span>,
        <span class="hljs-string">"ecs.c2.large"</span>,
        <span class="hljs-string">"ecs.c2.xlarge"</span>,
        <span class="hljs-string">"ecs.n1.tiny"</span>,
        <span class="hljs-string">"ecs.n1.small"</span>,
        <span class="hljs-string">"ecs.n1.medium"</span>,
        <span class="hljs-string">"ecs.n1.large"</span>,
        <span class="hljs-string">"ecs.n1.xlarge"</span>
      ],
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"实例规格, &lt;a href='#/product/cn-shenzhen/list/typeList' target='_blank'&gt;查看实例规格&lt;/a&gt;"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>
    },
    <span class="hljs-attr">"ECSImageId"</span>: {
      <span class="hljs-attr">"Default"</span>: <span class="hljs-string">"ubuntu1404_64_40G_cloudinit_20160427.raw"</span>,
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"镜像文件 ID，表示启动实例时选择的镜像资源, &lt;a href='#/product/cn-shenzhen/list/imageList' target='_blank'&gt;查看实例规格&lt;/a&gt;"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>
    },
    <span class="hljs-attr">"ECSTag"</span>: {
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"ECS的标签"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"String"</span>
    }
  },
  <span class="hljs-attr">"Resources"</span>: {
    <span class="hljs-attr">"ElasticIpAssociation"</span>: {
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"ALIYUN::ECS::EIPAssociation"</span>,
      <span class="hljs-attr">"Properties"</span>: {
        <span class="hljs-attr">"InstanceId"</span>: {
          <span class="hljs-attr">"Fn::Select"</span>: [
            <span class="hljs-string">"0"</span>,
            {
              <span class="hljs-attr">"Fn::GetAtt"</span>: [
                <span class="hljs-string">"ECSSnatGateWay"</span>,
                <span class="hljs-string">"InstanceIds"</span>
              ]
            }
          ]
        },
        <span class="hljs-attr">"AllocationId"</span>: {
          <span class="hljs-attr">"Fn::GetAtt"</span>: [
            <span class="hljs-string">"ElasticIp"</span>,
            <span class="hljs-string">"AllocationId"</span>
          ]
        }
      }
    },
    <span class="hljs-attr">"VRoute"</span>: {
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"ALIYUN::ECS::Route"</span>,
      <span class="hljs-attr">"Properties"</span>: {
        <span class="hljs-attr">"NextHopId"</span>: {
          <span class="hljs-attr">"Fn::Select"</span>: [
            <span class="hljs-string">"0"</span>,
            {
              <span class="hljs-attr">"Fn::GetAtt"</span>: [
                <span class="hljs-string">"ECSSnatGateWay"</span>,
                <span class="hljs-string">"InstanceIds"</span>
              ]
            }
          ]
        },
        <span class="hljs-attr">"RouteId"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"RouteId"</span>
        },
        <span class="hljs-attr">"RouteTableId"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"RouteTableId"</span>
        },
        <span class="hljs-attr">"DestinationCidrBlock"</span>: <span class="hljs-string">"0.0.0.0/0"</span>
      }
    },
    <span class="hljs-attr">"ECSSnatGateWay"</span>: {
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"ALIYUN::ECS::InstanceGroup"</span>,
      <span class="hljs-attr">"Properties"</span>: {
        <span class="hljs-attr">"SecurityGroupId"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"SecurityGroupId"</span>
        },
        <span class="hljs-attr">"ImageId"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"ECSImageId"</span>
        },
        <span class="hljs-attr">"Password"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"ECSPassword"</span>
        },
        <span class="hljs-attr">"MinAmount"</span>: <span class="hljs-string">"1"</span>,
        <span class="hljs-attr">"InternetMaxBandwidthIn"</span>: <span class="hljs-number">100</span>,
        <span class="hljs-attr">"UserData"</span>: {
          <span class="hljs-attr">"Fn::Replace"</span>: [
            {
              <span class="hljs-attr">"ros-notify"</span>: {
                <span class="hljs-attr">"Fn::GetAtt"</span>: [
                  <span class="hljs-string">"ECSSnatGateWayConditionHandle"</span>,
                  <span class="hljs-string">"CurlCli"</span>
                ]
              }
            },
            {
              <span class="hljs-attr">"Fn::Join"</span>: [
                <span class="hljs-string">""</span>,
                [
                  <span class="hljs-string">"#!/bin/sh"</span>,
                  <span class="hljs-string">"\n"</span>,
                  <span class="hljs-string">"PostRouting="</span>,
                  {
                    <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"VSwitchCidrBlock"</span>
                  },
                  <span class="hljs-string">"\n"</span>,
                  <span class="hljs-string">"SourceRouting=`ifconfig eth0|grep inet|awk '{print $2}'|tr -d 'addr:'`"</span>,
                  <span class="hljs-string">"\n"</span>,
                  <span class="hljs-string">"echo 'net.ipv4.ip_forward=1'&gt;&gt; /etc/sysctl.conf \n"</span>,
                  <span class="hljs-string">"sysctl -p \n"</span>,
                  <span class="hljs-string">"iptables -t nat -I POSTROUTING -s $PostRouting -j SNAT --to-source $SourceRouting \n"</span>,
                  <span class="hljs-string">"apt-get update\n"</span>,
                  <span class="hljs-string">"apt-get install -y curl\n"</span>,
                  <span class="hljs-string">"ros-notify -d '{\"data\" : \" docker swarm created\"}'\n"</span>
                ]
              ]
            }
          ]
        },
        <span class="hljs-attr">"ZoneId"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"ECSZoneId"</span>
        },
        <span class="hljs-attr">"VSwitchId"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"VSwitchId"</span>
        },
        <span class="hljs-attr">"InternetChargeType"</span>: <span class="hljs-string">"PayByTraffic"</span>,
        <span class="hljs-attr">"VpcId"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"VpcId"</span>
        },
        <span class="hljs-attr">"InstanceType"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"ECSInstanceType"</span>
        },
        <span class="hljs-attr">"SystemDisk_Category"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"ECSDiskCategory"</span>
        },
        <span class="hljs-attr">"IoOptimized"</span>: <span class="hljs-string">"optimized"</span>,
        <span class="hljs-attr">"Tags"</span>: [
          {
            <span class="hljs-attr">"Value"</span>: {
              <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"ECSTag"</span>
            },
            <span class="hljs-attr">"Key"</span>: <span class="hljs-string">"ECS_SNAT_GATEWAY"</span>
          }
        ],
        <span class="hljs-attr">"InternetMaxBandwidthOut"</span>: <span class="hljs-number">100</span>,
        <span class="hljs-attr">"SystemDisk_Size"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"ECSSysDiskSize"</span>
        },
        <span class="hljs-attr">"MaxAmount"</span>: <span class="hljs-string">"1"</span>
      }
    },
    <span class="hljs-attr">"ECSSnatGateWayConditionHandle"</span>: {
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"ALIYUN::ROS::WaitConditionHandle"</span>
    },
    <span class="hljs-attr">"ECSSnatGateWayGroupWaitCondition"</span>: {
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"ALIYUN::ROS::WaitCondition"</span>,
      <span class="hljs-attr">"DependsOn"</span>: <span class="hljs-string">"ECSSnatGateWay"</span>,
      <span class="hljs-attr">"Properties"</span>: {
        <span class="hljs-attr">"Handle"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"ECSSnatGateWayConditionHandle"</span>
        },
        <span class="hljs-attr">"Timeout"</span>: <span class="hljs-number">600</span>,
        <span class="hljs-attr">"Count"</span>: <span class="hljs-number">1</span>
      }
    },
    <span class="hljs-attr">"ElasticIp"</span>: {
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"ALIYUN::ECS::EIP"</span>,
      <span class="hljs-attr">"Properties"</span>: {
        <span class="hljs-attr">"InternetChargeType"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"EIPInternetChargeType"</span>
        },
        <span class="hljs-attr">"Bandwidth"</span>: {
          <span class="hljs-attr">"Ref"</span>: <span class="hljs-string">"EIPBandwidth"</span>
        }
      }
    }
  },
  <span class="hljs-attr">"Outputs"</span>: {
    <span class="hljs-attr">"ECSSnatGateWay_INNER_IPS"</span>: {
      <span class="hljs-attr">"Value"</span>: {
        <span class="hljs-attr">"Fn::GetAtt"</span>: [
          <span class="hljs-string">"ECSSnatGateWay"</span>,
          <span class="hljs-string">"PrivateIps"</span>
        ]
      },
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"Inner IP address of the ECS instance."</span>
    },
    <span class="hljs-attr">"ECSSnatGateWay_InstanceIds"</span>: {
      <span class="hljs-attr">"Value"</span>: {
        <span class="hljs-attr">"Fn::GetAtt"</span>: [
          <span class="hljs-string">"ECSSnatGateWay"</span>,
          <span class="hljs-string">"InstanceIds"</span>
        ]
      },
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"The instance id of created ecs instance"</span>
    },
    <span class="hljs-attr">"EipAddress"</span>: {
      <span class="hljs-attr">"Value"</span>: {
        <span class="hljs-attr">"Fn::GetAtt"</span>: [
          <span class="hljs-string">"ElasticIp"</span>,
          <span class="hljs-string">"EipAddress"</span>
        ]
      },
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"IP address of created EIP."</span>
    },
    <span class="hljs-attr">"ECSSnatGateWay_ZoneIds"</span>: {
      <span class="hljs-attr">"Value"</span>: {
        <span class="hljs-attr">"Fn::GetAtt"</span>: [
          <span class="hljs-string">"ECSSnatGateWay"</span>,
          <span class="hljs-string">"ZoneIds"</span>
        ]
      },
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"Zone id of created instance."</span>
    }
  }
}


</code></pre>
<p>在上边的文章中，总结了ROS搭建SNAT网关使专有网络访问Internet,它的主要思路是在VPC网络里面创建一个ECS做NAT网关的角色以便实现VPC网络访问internet的功能。坦白的说，这个方法是比较复杂的。今天介绍一个ROS的新资源NAT Gateway，通过它能非常方便的实现这个功能，在专有网络中的机器与Internet互访不是梦。</p>
<h3>Nat Gateway介绍</h3>
<p>NAT网关（NAT Gateway）是一款企业级的VPC公网网关,提供NAT代理（SNAT、DNAT）、10Gbps级别的转发能力、Region级别的高可用性（跨可用区的容灾能力）。</p>
<p>共享带宽包（Bandwidth Package)是对NAT网关上的公网IP与公网带宽的封装；一个共享带宽包由一份公网带宽和一组公网IP组成，这些公网IP共享带宽。</p>
<p>NAT网关与共享带宽包需要配合使用，组合成为高性能、配置灵活的企业级网关。</p>
<h4>NAT Gateway在VPC中的拓扑如下图所示：</h4>
<p>::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::1</p>
<h4>关键特性：</h4>
<p>DNAT：目的网络地址转换（入方向代理），用于VPC内的ECS面向互联网提供服务；支持端口映射、IP映射；<br />
SNAT：源网络地址转换（出方向代理），用于VPC内的ECS访问互联网内容；<br />
多IP共享带宽：NAT网关上购买公网IP和公网带宽时以“共享带宽包”形式购买，一个带宽包内的所有IP共享带宽；<br />
高性能：NAT网关可以支撑单实例10Gbps级别的转发能力；<br />
高可用：NAT网关基于SDN技术，采用跨可用区分布式架构，每个实例均具备应对可用区级别故障；<br />
按需购买：所有费用均为先使用后结算，实例规格、带宽大小、公网IP个数均可随时调整、即时生效;</p>
<h3>ROS Nat Gateway相关资源介绍</h3>
<h4><a href="https://ros.console.aliyun.com/?spm=5176.2020520101.202.d10ros.KEKcEz#/resourceType/detail/ALIYUN::ECS::NatGateway/metadata">ALIYUN::ECS::NatGateway</a></h4>
<p>这个资源是申明要在那个VPC中创建一个NAT Gateway。在创建NAT Gateway的时候必须指定VPC的ID，VSWITCH的ID，以及至少一个带宽包。NAT Gateway</p>
<p>资源创建成功后会自动在VPC的路有表中添加一条指向NAT Gateway的路由表项。通过ROS可以输出NAT Gateway的ID， 所有带宽包的ID，所有带宽包中申明的所有公网IP，Forward 表ID，SNAT表ID。</p>
<pre><code class="hljs cpp"><span class="hljs-string">"NatGateway"</span>: {
      <span class="hljs-string">"DependsOn"</span>: <span class="hljs-string">"VSwitch"</span>,
      <span class="hljs-string">"Properties"</span>: {
        <span class="hljs-string">"BandwidthPackage"</span>: [
          {
            <span class="hljs-string">"Bandwidth"</span>: <span class="hljs-number">5</span>,
            <span class="hljs-string">"IpCount"</span>: <span class="hljs-number">1</span>,
            <span class="hljs-string">"ZoneId"</span>: <span class="hljs-string">"cn-hangzhou-b"</span>
          },
          {
            <span class="hljs-string">"Bandwidth"</span>: <span class="hljs-number">5</span>,
            <span class="hljs-string">"IpCount"</span>: <span class="hljs-number">1</span>,
            <span class="hljs-string">"ZoneId"</span>: <span class="hljs-string">"cn-hangzhou-b"</span>
          }
        ],
        <span class="hljs-string">"Description"</span>: <span class="hljs-string">"hhhhh"</span>,
        <span class="hljs-string">"NatGatewayName"</span>: <span class="hljs-string">"nat_gateway_1"</span>,
        <span class="hljs-string">"Spec"</span>: <span class="hljs-string">"Middle"</span>,
        <span class="hljs-string">"VSwitchId"</span>: {
          <span class="hljs-string">"Fn::GetAtt"</span>: [
            <span class="hljs-string">"VSwitch"</span>,
            <span class="hljs-string">"VSwitchId"</span>
          ]
        },
        <span class="hljs-string">"VpcId"</span>: {
          <span class="hljs-string">"Fn::GetAtt"</span>: [
            <span class="hljs-string">"Vpc"</span>,
            <span class="hljs-string">"VpcId"</span>
          ]
        }
      },
      <span class="hljs-string">"Type"</span>: <span class="hljs-string">"ALIYUN::ECS::NatGateway"</span>
    }


</code></pre>
<h4><a href="https://ros.console.aliyun.com/?spm=5176.2020520101.202.d10ros.KEKcEz#/resourceType/detail/ALIYUN::ECS::BandwidthPackage/metadata">ALIYUN::ECS::BandwidthPackage</a></h4>
<p>带宽包也可以单独作为一个资源创建，然后关联到一个具体的NAT Gateway。创建带宽包必须要指定NAT Gateway的ID，带宽大小，以及所需要的公网IP数量。</p>
<p>资源创建完成后，通过ROS可以输出带宽包ID和带宽包中所申请的所有IP</p>
<pre><code class="hljs php"> BandwidthPackage<span class="hljs-string">": {
      "</span>Type<span class="hljs-string">": "</span>ALIYUN::ECS::BandwidthPackage<span class="hljs-string">",
      "</span>Properties<span class="hljs-string">": {
        "</span>BandwidthPackageName<span class="hljs-string">": "</span>pkg_2<span class="hljs-string">",
        "</span>Description<span class="hljs-string">": "</span><span class="hljs-keyword">new</span> bandwidth package<span class="hljs-string">",
        "</span>NatGatewayId<span class="hljs-string">": "</span>ngw-h1xoxepyf<span class="hljs-string">",
        "</span>IpCount<span class="hljs-string">": 2,
        "</span>Bandwidth<span class="hljs-string">": 5,
        "</span>ZoneId<span class="hljs-string">": "</span>cn-beijing-c<span class="hljs-string">"
      }
    }

</span></code></pre>
<h4><a href="https://ros.console.aliyun.com/?spm=5176.2020520101.202.d10ros.KEKcEz#/resourceType/detail/ALIYUN::ECS::ForwardEntry/metadata">ALIYUN::ECS::ForwardEntry</a></h4>
<p>本资源是给NAT Gateway的目的网络转换表添加访问规则，通过这条规则可以让外网主动访问VPC网络中的机器。创建一条规则必须传入Forward表的ID，网络协议，VPC内部机器的IP，内部机器的端口，暴漏给外网访问的IP和端口。外网的IP，就是带宽包中所申请的IP资源。</p>
<p>资源创建完成，通过ROS可以输出这条规则的ID</p>
<p>下面的例子展示如何配置一个外网通过22端口访问在VPC网络的机器。</p>
<pre><code class="hljs cpp"><span class="hljs-string">"ForwardEntry"</span>: {
      <span class="hljs-string">"Properties"</span>: {
        <span class="hljs-string">"ExternalIp"</span>: {
          <span class="hljs-string">"Fn::Select"</span>: [
            <span class="hljs-string">"1"</span>,
            {
              <span class="hljs-string">"Fn::GetAtt"</span>: [
                <span class="hljs-string">"NatGateway"</span>,
                <span class="hljs-string">"BandwidthPackageIps"</span>
              ]
            }
          ]
        },
        <span class="hljs-string">"ExternalPort"</span>: <span class="hljs-string">"22"</span>,
        <span class="hljs-string">"ForwardTableId"</span>: {
          <span class="hljs-string">"Fn::GetAtt"</span>: [
            <span class="hljs-string">"NatGateway"</span>,
            <span class="hljs-string">"ForwardTableId"</span>
          ]
        },
        <span class="hljs-string">"InternalIp"</span>: <span class="hljs-string">"192.168.0.1"</span>,
        <span class="hljs-string">"InternalPort"</span>: <span class="hljs-string">"22"</span>,
        <span class="hljs-string">"IpProtocol"</span>: <span class="hljs-string">"TCP"</span>
      },
      <span class="hljs-string">"Type"</span>: <span class="hljs-string">"ALIYUN::ECS::ForwardEntry"</span>
    }

</code></pre>
<h4><a href="https://ros.console.aliyun.com/?spm=5176.2020520101.202.d10ros.KEKcEz#/resourceType/detail/ALIYUN::ECS::SNatEntry/metadata">ALIYUN::ECS::SNatEntry</a></h4>
<p>本资源给源网络地址转换表配置一条规则，通过这个规则可以让VPC中的机器能主动访问外网。创建一条规则必须传入SNAT表的ID，将要访问外网的VSWITCH ID，以及通过那个外网IP访问外网，这个IP也是带宽包中所申请的IP。如果同时需要主动，被动访问外网的，就必须至少有两个外网IP。也就是SNAT和Forward表的公网IP不能相同。</p>
<pre><code class="hljs cpp"><span class="hljs-string">"SNatEntry"</span>: {
      <span class="hljs-string">"Properties"</span>: {
        <span class="hljs-string">"SNatIp"</span>: {
          <span class="hljs-string">"Fn::Select"</span>: [
            <span class="hljs-string">"0"</span>,
            {
              <span class="hljs-string">"Fn::GetAtt"</span>: [
                <span class="hljs-string">"NatGateway"</span>,
                <span class="hljs-string">"BandwidthPackageIps"</span>
              ]
            }
          ]
        },
        <span class="hljs-string">"SNatTableId"</span>: {
          <span class="hljs-string">"Fn::GetAtt"</span>: [
            <span class="hljs-string">"NatGateway"</span>,
            <span class="hljs-string">"SNatTableId"</span>
          ]
        },
        <span class="hljs-string">"SourceVSwitchId"</span>: {
          <span class="hljs-string">"Fn::GetAtt"</span>: [
            <span class="hljs-string">"VSwitch"</span>,
            <span class="hljs-string">"VSwitchId"</span>
          ]
        }
      }

</code></pre>
<p>下面是一个完整的模版创建一个VPC网络，然后配置NAT Gateway，让VPC的中的ECS实例能和Internet互访。完整模版下载 <a href="https://yq.aliyun.com/attachment/download/?spm=0.0.0.0.W8ePxI&amp;filename=nat_gate...%5B%E9%97%AE%E6%A8%B5%5D.1478860078.gz">-&gt;&gt;</a></p>
</div>
<p>&nbsp;</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/ros%e4%b8%80%e9%94%ae%e6%90%ad%e5%bb%ba-natgateway-%e8%ae%a9%e9%98%bf%e9%87%8c-vpc-%e4%b8%8e-internet-%e7%9a%84%e4%ba%92%e8%ae%bf%e6%95%99%e7%a8%8b/">ROS一键搭建 NatGateway 让阿里 VPC 与 Internet 的互访教程</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/ros%e4%b8%80%e9%94%ae%e6%90%ad%e5%bb%ba-natgateway-%e8%ae%a9%e9%98%bf%e9%87%8c-vpc-%e4%b8%8e-internet-%e7%9a%84%e4%ba%92%e8%ae%bf%e6%95%99%e7%a8%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
