NAT Gateways e NAT Instances são dois serviços ou tecnicas que podemos utilizar para permitir que instâncias em subnets privadas tenham acesso a internet.
Estamos falando de tráfego de saída(outbound), continuamos não permitindo que clientes se conectem a essas instâncias diretamente pela internet. O objetivo aqui é autorizar o tráfego para que as instâncias consigam se conectar a internet para baixar softwares, atualizações, etc.
1️⃣ NAT Gateway
A NAT gateway is a Network Address Translation (NAT) service. You can use a NAT gateway so that instances in a private subnet can connect to services outside your VPC but external services cannot initiate a connection with those instances.
When you create a NAT gateway, you specify one of the following connectivity types:
- Public – (Default) Instances in private subnets can connect to the internet through a public NAT gateway, but cannot receive unsolicited inbound connections from the internet. You create a public NAT gateway in a public subnet and must associate an elastic IP address with the NAT gateway at creation. You route traffic from the NAT gateway to the internet gateway for the VPC. Alternatively, you can use a public NAT gateway to connect to other VPCs or your on-premises network. In this case, you route traffic from the NAT gateway through a transit gateway or a virtual private gateway.
- Private – Instances in private subnets can connect to other VPCs or your on-premises network through a private NAT gateway. You can route traffic from the NAT gateway through a transit gateway or a virtual private gateway. You cannot associate an elastic IP address with a private NAT gateway. You can attach an internet gateway to a VPC with a private NAT gateway, but if you route traffic from the private NAT gateway to the internet gateway, the internet gateway drops the traffic.
The NAT gateway replaces the source IP address of the instances with the IP address of the NAT gateway. For a public NAT gateway, this is the elastic IP address of the NAT gateway. For a private NAT gateway, this is the private IP address of the NAT gateway. When sending response traffic to the instances, the NAT device translates the addresses back to the original source IP address.
https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html
2️⃣ NAT Instance
You can create your own AMI that provides network address translation and use your AMI to launch an EC2 instance as a NAT instance. You launch a NAT instance in a public subnet to enable instances in the private subnet to initiate outbound IPv4 traffic to the internet or other AWS services, but prevent the instances from receiving inbound traffic initiated on the internet.
Limitations
- Your NAT instance quota depends on your instance quota for the Region. For more information, see Amazon EC2 service quotas in the Amazon EC2 User Guide for Linux Instances.
- NAT is not supported for IPv6 traffic—use an egress-only internet gateway instead. For more information, see Enable outbound IPv6 traffic using an egress-only internet gateway.
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html
As instâncias na private subnet possuem IPs privados e mesmo que existisse um Internet Gateway elas não conseguiriam utiliza-lo para se conectar a internet.
O que fazemos para resolver este problema é provisionar um NAT Gateway(possui um ip privado e um Elastic IP Address) dentro de uma public subnet.
A public subnet onde o NAT Gateway é provisionado deve ser associada a uma route table que possua regras para encaminhar as requisições a endereços que não estão no CIDR da VPC para o Internet Gateway(igw-id).
Também é preciso associar ****a private subnet uma private route table que possui regras para encaminhar requisições ao NAT Gateway(nat-gateway-id) exceto quando o destinatário estiver no CIDR da VPC.
Assim as instâncias na private subnet conseguem enviar requisições para o NAT Gateway que se preocupará em traduzir os endereços e encaminhar as requisições para o Internet Gateway.
<aside> 💡 dúvida, a route table funciona como um interceptador para todo o tráfego dentro da subnet? como o NAT Gateway encaminha o tráfego para o Internet Gateway supondo que ambos não são, por exemplo, webservers? talvez seja respondido nas aulas práticas.
</aside>
O NAT Instance é uma máquina EC2 em uma public subnet que executa uma AMI(Amazon Machine Image) especifica para este caso de uso, as AMIs de NAT Instances possuem a string amzn-ami-vpc-nat em seu nome.
Igualmente ao NAT Gateway as NAT Instances possuem um private IP e um Elastic IP Address. É preciso desabilitar o source and destination checks nas network interfaces para as instâncias NAT.
As subnets precisam ter suas route tables configuradas para direcionar o tráfego como foi feito no primeiro exemplo. A única diferença é na regra da private route table que deverá encaminhar o tráfego direcionado a endereços que não estão no CIDR da VPC para a NAT Instance(nat-instance-id).
Videoaula
Documentação AWS