创建NAT Instance

私有子网的机器访问公网有两种方式,一种是通过nat gateway ,另一种是通过nat instance

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

image-20220903175953059

在公有子网创建NAT Instance

进入EC2页面,点击Launch Instance

命名为my-nat-instance, NAT Instance需要使用特定的AMI,搜索nat关键字:

image-20220903180355260

选择社区里第一个nat AMI:

image-20220903180415675

创建一个密钥对,并使用它做为EC2连接的密钥。

在网络设置部分,点击Edit

image-20220903180529902

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

image-20220903180732180

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

image-20220903184334479

上图应该是10.100.1.0/16

注意ICMP协议和TCP协议不同!我们将后面将基于ping命令来测试网络的连通性

其他选项保持默认,点击创建机器。

创建完成后,需要修改source/destination check:

image-20220903180837558

禁用源/目的地检查

image-20220903180853058

创建私网机器

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

image-20220903181355137

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

image-20220903181426028

其他选项保持默认,点击创建。


创建完成后,复制下来这台私有子网机器的IP:

image-20220903181829670

测试网络连通性

从控制台获取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命令:

image-20220903182056481

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


我们把上一节创建的NAT Gateway删除掉:

image-20220903182150224

删除NAT Gateway大概需要两分钟。

删除完成后,查看私有子网的路由表,发现此时到Nat gateway的路由状态变成blackhole

image-20220903182345265

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

image-20220903182310313

路由表使用NAT Instance

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

image-20220903182416184

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

image-20220903182432457

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

image-20220903184428391

此时私有子网的流量流向为私有子网EC2 -> NAT Instance(公有子网) -> IGW -> baidu.com

附 - 为什么NAT Instance要禁用source/destination检查

因为私有子网的机器和NAT Instance中间流量要经过网关。例如下图中私有子网的实例10.1.1.23要经过网关10.1.1.1,如果不禁用,NAT instance就不能将包发往10.1.1.23image-20191211090207033