Instâncias NAT - Amazon Virtual Private Cloud

Instâncias NAT

Uma instância NAT fornece conversão de endereços de rede (NAT). É possível usar uma instância NAT para permitir que recursos em uma sub-rede privada se comuniquem com destinos fora da nuvem privada virtual (VPC), como a Internet ou uma rede on-premises. Os recursos na sub-rede privada podem iniciar o tráfego IPv4 de saída para a Internet, mas não podem receber o tráfego de entrada iniciado na Internet.

Importante

A AMI de NAT é construída com base na última versão do Amazon Linux, 2018.03, que atingiu o final do ciclo de suporte padrão em 31 de dezembro de 2020 e o final do ciclo de suporte de manutenção em 31 de dezembro de 2023. Para obter mais informações, consulte a seguinte postagem no blog: Amazon Linux AMI end of life.

Se você usar uma AMI de NAT existente, a AWS recomenda migrar para um gateway NAT. Os gateways NAT oferecem maior disponibilidade e maior largura de banda e exigem menos esforços administrativos. Para ter mais informações, consulte Comparar gateways NAT e instâncias NAT.

Se as instâncias de NAT forem uma correspondência melhor para o seu caso de uso do que os gateways NAT, você poderá criar sua própria AMI de NAT com base em uma versão atual do Amazon Linux conforme descrita em Crie uma AMI de NAT.

Noções básicas sobre a instância NAT

A figura a seguir mostra noções básicas sobre instância NAT. A tabela de rotas associada à sub-rede privada envia o tráfego da Internet das instâncias na sub-rede privada para a instância NAT na sub-rede pública. Em seguida, a instância NAT envia o tráfego para o gateway da Internet. O tráfego é atribuído ao endereço IP público da instância NAT. A instância NAT especifica um número de porta alto para a resposta; quando uma resposta retorna, a instância NAT a envia a uma instância na sub-rede privada com base no número da porta para a resposta.

A instância NAT deve ter acesso à Internet, portanto, deve estar em uma sub-rede pública (uma sub-rede que possui uma tabela de rotas com uma rota para o gateway da Internet) e deve ter um endereço IP público ou um endereço IP elástico.


        Configuração da instância NAT

Para começar a usar instâncias NAT, crie uma AMI de NAT, crie um grupo de segurança para a instância NAT e execute a instância NAT em sua VPC.

Sua cota de instância NAT depende da cota de instância para a região. Para obter mais informações, consulte Service Quotas do Amazon EC2 na Referência geral da AWS.

Crie uma VPC para a instância NAT

Use o procedimento a seguir para criar uma VPC com uma sub-rede pública e uma sub-rede privada.

Como criar a VPC
  1. Abra o console da Amazon VPC em https://console.aws.amazon.com/vpc/.

  2. Escolha Criar VPC.

  3. Em Resources to create (Recursos a serem criados), escolha VPC and more (VPC e mais).

  4. Em Name tag auto-generation (Geração automática de tags de nome), insira um nome para a VPC.

  5. Para configurar as sub-redes, faça o seguinte:

    1. Em Number of Availability Zones (Número de zonas de disponibilidade), escolha 1 ou 2 dependendo das suas necessidades.

    2. Em Number of public subnets (Número de sub-redes públicas), verifique se você tem uma sub-rede pública por zona de disponibilidade.

    3. Em Number of private subnets (Número de sub-redes privadas), verifique se você tem uma sub-rede privada por zona de disponibilidade.

  6. Escolha Criar VPC.

Crie um grupo de segurança para a instância NAT

Crie um grupo de segurança com as regras descritas na tabela a seguir. Essas regras possibilitam que sua instância NAT receba tráfego vinculado à Internet de instâncias na sub-rede privada, bem como tráfego SSH de sua rede. A instância NAT também pode enviar tráfego à Internet, o que permite que as instâncias na sub-rede privada obtenham atualizações de software.

As regras recomendadas são mostradas a seguir.

Entrada
Origem Protocolo Intervalo de portas Comentários
CIDR da sub-rede privada TCP 80 Permite tráfego HTTP de entrada de servidores na sub-rede privada.
CIDR da sub-rede privada TCP 443 Permite tráfego HTTPS de entrada de servidores na sub-rede privada.
Intervalo de endereços IP públicos da sua rede TCP 22 Permitir acesso SSH de entrada de sua rede à instância NAT (por meio do gateway da Internet).
Saída
Destino Protocolo Intervalo de portas Comentários
0.0.0.0/0 TCP 80 Permite acesso HTTP de saída à Internet.
0.0.0.0/0 TCP 443 Permite acesso HTTPS de saída à Internet.
Como criar o grupo de segurança
  1. Abra o console da Amazon VPC em https://console.aws.amazon.com/vpc/.

  2. No painel de navegação, selecione Grupos de segurança.

  3. Escolha Create grupo de segurança (Criar grupo de segurança).

  4. Insira um nome e uma descrição para o grupo de segurança.

  5. Em VPC, selecione o ID da VPC para sua instância NAT.

  6. Adicione regras para o tráfego de entrada em Regras de entrada da seguinte forma:

    1. Escolha Adicionar regra. Escolha HTTP em Tipo e insira o intervalo de endereços IP de sua sub-rede privada em Fonte.

    2. Escolha Adicionar regra. Escolha HTTPS em Tipo e insira o intervalo de endereços IP de sua sub-rede privada em Fonte.

    3. Escolha Adicionar regra. Escolha SSH em Tipo e insira o intervalo de endereços IP da sua rede em Fonte.

  7. Adicione regras para o tráfego de saída em Regras de saída da seguinte forma:

    1. Escolha Adicionar regra. Escolha HTTP em Tipo e digite 0.0.0.0/0 em Destino.

    2. Escolha Adicionar regra. Escolha HTTPS em Tipo e digite 0.0.0.0/0 em Destino.

  8. Escolha Create security group (Criar grupo de segurança).

Para ter mais informações, consulte Grupos de segurança.

Crie uma AMI de NAT

Uma AMI de NAT é configurada para executar NAT em uma instância do EC2. Você deve criar uma AMI de NAT e, em seguida, executar sua instância NAT usando a AMI de NAT.

Caso planeje usar um sistema operacional diferente do Amazon Linux para sua AMI de NAT, consulte a documentação desse sistema operacional para saber como configurar a NAT. Não se esqueça de salvar essas configurações para que elas persistam mesmo após a reinicialização da instância.

Criar uma AMI de NAT para o Amazon Linux
  1. Inicie uma instância do EC2 executando o AL2023 ou o Amazon Linux 2. Não deixe de especificar o grupo de segurança que você criou para a instância do NAT.

  2. Conecte-se à sua instância e execute os comandos a seguir na instância para habilitar iptables.

    sudo yum install iptables-services -y sudo systemctl enable iptables sudo systemctl start iptables
  3. Faça o seguinte na instância para habilitar o encaminhamento de IP de forma que ele persista após a reinicialização:

    1. Usando um editor de texto, como nano ou vim, crie um arquivo com a seguinte configuração: /etc/sysctl.d/custom-ip-forwarding.conf.

    2. Adicione a seguinte linha ao arquivo de configuração.

      net.ipv4.ip_forward=1
    3. Salve o arquivo de configuração e saia do editor de texto.

    4. Execute o comando a seguir para aplicar o arquivo de configuração.

      sudo sysctl -p /etc/sysctl.d/custom-ip-forwarding.conf
  4. Execute o comando a seguir na instância e anote o nome da interface de rede primária. Você precisará dessas informações para a próxima etapa.

    netstat -i

    No exemplo de saída a seguir, docker0 é uma interface de rede criada pelo docker, eth0 é a interface de rede primária e lo é a interface de loopback.

    Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg docker0 1500 0 0 0 0 0 0 0 0 BMU eth0 9001 7276052 0 0 0 5364991 0 0 0 BMRU lo 65536 538857 0 0 0 538857 0 0 0 LRU

    No exemplo de saída a seguir, a interface de rede primária é enX0.

    Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg enX0 9001 1076 0 0 0 1247 0 0 0 BMRU lo 65536 24 0 0 0 24 0 0 0 LRU

    No exemplo de saída a seguir, a interface de rede primária é ens5.

    Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg ens5 9001 14036 0 0 0 2116 0 0 0 BMRU lo 65536 12 0 0 0 12 0 0 0 LRU
  5. Execute os comandos a seguir na instância para configurar o NAT. Se a interface de rede primária não for eth0, substitua eth0 pela interface de rede primária indicada na etapa anterior.

    sudo /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo /sbin/iptables -F FORWARD sudo service iptables save
  6. Crie uma AMI de NAT da instância do EC2. Para obter mais informações, consulte Criar uma AMI do Linux a partir de uma instância no Manual do usuário do Amazon EC2 para instâncias do Linux.

Execute uma instância NAT

Use o procedimento a seguir para executar uma instância NAT usando a VPC, o grupo de segurança e a AMI de NAT que você criou.

Executar uma instância NAT
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel, escolha Executar instância.

  3. Em Nome, insira um nome para sua instância NAT.

  4. Em Aplicações e imagens do SO, selecione sua AMI de NAT (escolha Procurar mais AMIs e Minhas AMIs).

  5. Em Tipo de instância, escolha um tipo de instância que forneça os recursos de computação, memória e armazenamento de que sua instância NAT precisa.

  6. Em Par de chaves, selecione um par de chaves existente ou escolha Criar novo par de chaves.

  7. Em Configurações de rede, faça o seguinte:

    1. Escolha Editar.

    2. Em VPC, escolha a VPC criada anteriormente.

    3. Em Sub-rede, selecione a sub-rede pública criada anteriormente para a VPC.

    4. Em Atribuir IP público automaticamente, selecione Habilitar. Como alternativa, após executar a instância NAT, aloque um endereço IP elástico e atribua-o à instância NAT.

    5. Em Firewall, escolha Selecionar grupo de segurança existente e, em seguida, escolha o grupo de segurança que você criou.

  8. Escolha Iniciar instância. Escolha o ID da instância para abrir a página de detalhes da instância. Aguarde o estado da instância mudar para Em execução, bem como a conclusão bem-sucedida das verificações de status.

  9. Desabilite as verificações de origem e destino para a instância NAT (consulte Desativar as verificações de origem/destino).

  10. Atualize a tabela de rotas para enviar tráfego para a instância NAT (consulte Atualize a tabela de rotas).

Desativar as verificações de origem/destino

Por padrão, toda Instância EC2 executa verificações origem/destino. Isso significa que a instância deve ser a origem ou o destino de qualquer tráfego que ela envia ou recebe. Entretanto, a instância NAT deve poder enviar e receber tráfego quando ela não é a origem nem o destino. Por isso, você deve desativar as verificações de origem/destino na instância NAT.

Desabilitar as verificações de origem e destino
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, escolha Instances (Instâncias).

  3. Selecione a instância NAT.

  4. Escolha Ações, Redes, Alterar verificação de origem/destino.

  5. Em Verificação de origem e destino, selecione Interromper.

  6. Escolha Save (Salvar).

  7. Se a instância NAT tem uma interface de rede secundária, escolha-a em Network interfaces (Interfaces de rede) na guia Networking (Rede) guia. Escolha a interface ID para ir à página das interfaces de rede. Selecione Actions (Ações), Change source/dest. check (Alterar verificação de origem/destino), desmarque Enable (Habilitar) e selecione Save (Salvar).

Atualize a tabela de rotas

A tabela de rotas para a sub-rede privada deve ter uma rota que envie o tráfego da Internet para a instância NAT.

Atualizar a tabela de rotas
  1. Abra o console da Amazon VPC em https://console.aws.amazon.com/vpc/.

  2. No painel de navegação, escolha Route tables.

  3. Selecione a tabela de rotas para a sub-rede privada.

  4. Na guia Rotas, escolha Editar rotas e, em seguida, escolha Adicionar rota.

  5. Insira 0.0.0.0/0 para Destino e o ID da instância NAT para Alvo.

  6. Escolha Salvar alterações.

Para ter mais informações, consulte Configurar tabelas de rotas.

Teste sua instância NAT

Após executar uma instância NAT e concluir as etapas anteriores de configuração, você pode testar se uma instância em sua sub-rede privada pode acessar a Internet por meio da instância NAT ao usar a instância NAT como um servidor bastion.

Etapa 1: atualizar o grupo de segurança da instância NAT

Para permitir que as instâncias na sua sub-rede privada enviem tráfego de ping à instância NAT, adicione uma regra para permitir tráfego ICMP de entrada e saída. Para permitir que a instância NAT atue como servidor bastion, adicione uma regra para permitir o tráfego SSH de saída para a sub-rede privada.

Atualizar o grupo de segurança da instância NAT
  1. Abra o console da Amazon VPC em https://console.aws.amazon.com/vpc/.

  2. No painel de navegação, selecione Grupos de segurança.

  3. Marque a caixa de seleção do grupo de segurança associado à sua instância NAT.

  4. Na guia Regras de entrada, selecione Editar regras de entrada.

  5. Escolha Add rule (Adicionar regra). Escolha All ICMP - IPv4 (Todos ICMP - IPv4) para Type (Tipo). Escolha Personalizar em Fonte e insira o intervalo de endereços IP de sua sub-rede privada. Escolha Salvar regras.

  6. Na guia Regras de saída, escolha Editar regras de saída.

  7. Escolha Add rule (Adicionar regra). Escolha SSH para Type (Tipo) . Escolha Personalizar em Destino e insira o intervalo de endereços IP de sua sub-rede privada.

  8. Escolha Add rule (Adicionar regra). Escolha All ICMP - IPv4 (Todos ICMP - IPv4) para Type (Tipo). Escolha Anywhere - IPv4 (Em qualquer lugar - IPv4) em Destination (Destino). Escolha Save rules (Salvar regras).

Etapa 2: inicie uma instância de teste na sub-rede privada

Execute uma instância em sua sub-rede privada. Você deve permitir o acesso SSH da instância NAT e usar o mesmo par de chaves usado para a instância NAT.

Iniciar uma instância de teste na sub-rede privada
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel, escolha Executar instância.

  3. Selecione sua sub-rede privada.

  4. Não atribua um endereço IP público a esta instância.

  5. Certifique-se de que o grupo de segurança para esta instância permita acesso SSH de entrada de sua instância NAT ou do intervalo de endereços IP de sua sub-rede pública e tráfego ICMP de saída.

  6. Selecione o mesmo par de chaves usado para a instância NAT.

Etapa 3: efetuar ping em um site habilitado para ICMP

Para verificar se a instância de teste na sub-rede privada pode usar a instância NAT para se comunicar com a Internet, execute o comando ping.

Testar a conexão com a Internet de sua instância privada
  1. No computador local, configure o encaminhamento de agentes SSH, para poder usar a instância NAT como um servidor bastion.

    Linux and macOS
    ssh-add key.pem
    Windows

    Baixe e instale o Pageant, se ainda não estiver instalado.

    Converter a chave privada no formato .ppk usando o PuTTYgen.

    Inicie o Pageant, clique com o botão direito no ícone do Pageant na barra de tarefas (ele pode estar oculto) e escolha Adicionar chave. Selecione o arquivo .ppk que você criou, insira a senha se necessário e escolha Abrir.

  2. No computador local, conecte-se à sua instância do NAT.

    Linux and macOS
    ssh -A ec2-user@nat-instance-public-ip-address
    Windows

    Conectar-se à sua instância do NAT do usando o PuTTY. Para Autenticação, você deve selecionar Permitir encaminhamento de agentes e deixar a opção Arquivo de chave privada para autenticaçãoem branco.

  3. Na instância NAT, execute o comando ping, especificando um site que está habilitado para ICMP.

    [ec2-user@ip-10-0-4-184]$ ping ietf.org

    Para confirmar que sua instância NAT tem acesso à Internet, verifique se você recebeu uma saída como a seguinte e pressione Ctrl+C para cancelar o comando ping. Caso contrário, verifique se a instância NAT está em uma sub-rede pública (sua tabela de rotas tem uma rota para um gateway da Internet).

    PING ietf.org (104.16.45.99) 56(84) bytes of data. 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=1 ttl=33 time=7.88 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=2 ttl=33 time=8.09 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=3 ttl=33 time=7.97 ms ...
  4. Em sua instância NAT, conecte-se à instância em sua sub-rede privada ao usar o respectivo endereço IP privado.

    [ec2-user@ip-10-0-4-184]$ ssh ec2-user@private-server-private-ip-address
  5. Em sua instância privada, teste se você pode se conectar à Internet ao executar o comando ping.

    [ec2-user@ip-10-0-135-25]$ ping ietf.org

    Para confirmar que sua instância privada tem acesso à Internet por meio da instância NAT, verifique se você recebeu uma saída como a seguinte e pressione Ctrl+C para cancelar o comando ping.

    PING ietf.org (104.16.45.99) 56(84) bytes of data. 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=1 ttl=33 time=8.76 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=2 ttl=33 time=8.26 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=3 ttl=33 time=8.27 ms ...
Solução de problemas

Se o comando ping falhar no servidor na sub-rede privada, use as seguintes etapas para solucionar o problema:

  • Verifique se você usou o comando ping em um site habilitado para ICMP. Caso contrário, seu servidor não poderá receber pacotes de resposta. Para testar isso, execute o mesmo comando ping em um terminal de linha de comando em seu computador.

  • Verifique se o grupo de segurança para sua instância NAT permite tráfego ICMP de entrada de sua sub-rede privada. Caso contrário, sua instância NAT não poderá receber o comando ping de sua instância privada.

  • Verifique se você desabilitou a verificação de origem e destino para sua instância NAT. Para ter mais informações, consulte Desativar as verificações de origem/destino.

  • Verifique se você configurou suas tabelas de rota corretamente. Para ter mais informações, consulte Atualize a tabela de rotas.

Etapa 4: limpar

Se você não precisar mais do servidor de teste na sub-rede privada, encerre a instância para que ela não gere mais cobranças. Para obter mais informações, consulte Terminar a instância no Guia do usuário do Amazon EC2 para instâncias do Linux.

Se você não precisar mais da instância NAT, poderá interrompê-la ou encerrá-la para não gerar mais cobranças. Se você criou uma AMI NAT, pode criar uma nova instância NAT sempre que precisar de uma.