在AWS上,创建VPC后,VPC内的实例(instance)如何访问Internet呢? 通常有两种方法:

  1. 直接分配公网IP地址

    • 将VPC关联到互联网网关(Internet Gateway)
    • 这种方式,instance所在的子网,属于公共子网
  2. 通过NAT Gateway 或 NAT instance

    • 在每个子网的路由表中,将默认路由设置为NAT Gateway 或 NAT instance
    • 这种方式,instance所在的子网,属于私有子网

使用ELB(弹性负载均衡器)从Internent访问公共子网和私有子网的不同方式

对于Internet可访问的ELB, 只能关联到公共子网,即默认路由是到Internet Gateway的。
如果要从Internent 访问ELB, 再访问到私有子网,需要中间加一层公共子网。

下图是EC2实例通过IGW(Internet网关) 接入到Internet的示意图。这里EC2实例和Internet通信的两个方向上,实际上发生了如下的转换:

  • 从EC2实例发出的前往Internet的IP包,其源地址10.0.0.10在经过IGW时,会被转换为与实例关联的公网地址 54.232.0.1;
  • 从Internet发给54.232.0.1的IP包,经过IGW时其目的地址会转换为ENI对应的内网地址10.0.0.10并被送到 EC2实例;

可以看到,这里Internet网关就是起到实例的内网地址和公网地址一对一的基本 NAT(网络地址转换)的功能。

img

参考资料:https://aws.amazon.com/cn/blogs/china/vpc-nat/