私有子网的机器访问公网有两种方式,一种是通过nat gateway ,另一种是通过nat instance。
本节我们将通过NAT instance的方式,让私有子网的机器能够访问公网。我们将在公有子网里创建一台NAT Instance:

进入EC2页面,点击Launch Instance。
命名为my-nat-instance, NAT Instance需要使用特定的AMI,搜索nat关键字:

选择社区里第一个nat AMI:

创建一个密钥对,并使用它做为EC2连接的密钥。
在网络设置部分,点击Edit:

我们需要将NAT Instance部署在公有子网my-subnet-01:

在安全组配置的部分,增加一条新的规则,允许私有子网VPC的机器使用ICMP协议访问该实例 :

上图应该是
10.100.1.0/16
注意ICMP协议和TCP协议不同!我们将后面将基于ping命令来测试网络的连通性
其他选项保持默认,点击创建机器。
创建完成后,需要修改source/destination check:

禁用源/目的地检查:

创建新的一台实例,命名为my-private-subnet-instance

编辑网络设置,将其部署在私有子网my-subnet-02:

其他选项保持默认,点击创建。
创建完成后,复制下来这台私有子网机器的IP:

从控制台获取NAT Instance的公网IP,登录到NAT Instance:
ssh -i keypair1.pem ec2-user@35.89.190.245
将私网机器登录的密钥复制到上面:
[ec2-user@ip-10-100-0-171 ~]$ vi keypair1.pem
[ec2-user@ip-10-100-0-171 ~]$ chmod 400 keypair1.pem
在NAT Instance登录到私有子网的机器,执行Ping命令:

此时能Ping通,因为上一节我们为私有子网创建的路由创建了一条规则,0.0.0.0/0 -> NAT Gateay。
我们把上一节创建的NAT Gateway删除掉:

删除NAT Gateway大概需要两分钟。
删除完成后,查看私有子网的路由表,发现此时到Nat gateway的路由状态变成blackhole:

在实例上执行Ping命令,此时到公网的流量不能出去:

重新编辑私有子网的路由表,将0.0.0.0/0的流量送往NAT Instance:

更新完成后。此时到公网的流量被送到NAT Instance的ENI:

在私有子网的实例上执行Ping命令,可以Ping通公网:

此时私有子网的流量流向为私有子网EC2 -> NAT Instance(公有子网) -> IGW -> baidu.com
因为私有子网的机器和NAT Instance中间流量要经过网关。例如下图中私有子网的实例10.1.1.23要经过网关10.1.1.1,如果不禁用,NAT instance就不能将包发往10.1.1.23:
