Visão geral de endereços e portas do Cloud NAT

Esta página descreve como os gateways do Cloud NAT usam endereços IP externos e como eles alocam portas de origem para instâncias de máquina virtual (VM) do Compute Engine e nós do Google Kubernetes Engine (GKE) que usam gateways.

Antes de analisar essas informações, familiarize-se com a visão geral do Cloud NAT.

Endereços de IP NAT

Um endereço IP NAT é um endereço IP externo regional, que pode ser roteado na Internet. Uma VM sem um endereço IP externo, em uma sub-rede veiculada por um gateway do Cloud NAT, usa um endereço IP NAT quando envia pacotes para um destino na Internet.

Para atribuir endereços IP NAT a um gateway do Cloud NAT, use um dos seguintes métodos:

  • Alocação automática de endereço IP NAT. Quando você seleciona essa opção ou escolhe padrões do Google Cloud, o Cloud NAT adiciona endereços IP externos regionais ao seu gateway com base no número de VMs que usam o gateway e no número de portas reservadas para cada VM. Ele também remove automaticamente um endereço IP NAT quando ele não precisar mais de nenhuma porta de origem nesse endereço IP NAT.

    • Quando um gateway do Cloud NAT adiciona um endereço IP NAT, ele cria um endereço IP externo regional estático (reservado). Os endereços IP NAT adicionados automaticamente podem ser visualizados na lista de endereços IP externos estáticos. Esses endereços contam para cotas por projeto.
    • Com a alocação automática, não é possível prever o próximo endereço IP que está alocado. Se você depende do conjunto de endereços IP possíveis do NAT (por exemplo, para criar uma lista de permissões), use a atribuição manual de endereços IP NAT.
    • Se você mudar para a atribuição de endereço IP NAT manual mais tarde, os endereços IP externos regionais reservados automaticamente serão excluídos. Para mais informações, consulte Como alternar o método de atribuição.
  • Atribuição manual de endereços IP NAT. Quando você seleciona essa opção, cria e atribui manualmente endereços IP externos regionais estáticos (reservados) ao seu gateway do Cloud NAT. Aumente ou diminua o número de endereços IP NAT atribuídos manualmente editando o gateway do Cloud NAT.

    • Ao usar a atribuição de endereços IP NAT manual, é necessário calcular o número de endereços IP externos regionais necessários para o gateway do Cloud NAT. Se o gateway ficar sem endereços IP NAT, o Cloud NAT descartará pacotes. Os pacotes descartados são registrados quando você usa o registro do Cloud NAT para ativar a geração de registros de erro.
    • Para exemplos de cálculo, consulte o exemplo de reserva de porta.

Para ver o número máximo de endereços IP NAT alocados automaticamente ou atribuídos manualmente, consulte Limites do Cloud NAT.

Mutação do método de atribuição

É possível alternar um gateway do Cloud NAT da alocação automática do endereço IP do NAT para a atribuição de endereço IP NAT manual. No entanto, os endereços IP NAT não podem ser preservados. Embora os endereços IP NAT alocados automaticamente sejam estáticos, eles não podem ser movidos para uma atribuição de endereço IP NAT manual. Por exemplo, não é possível começar a usar um gateway do Cloud NAT com endereços IP NAT alocados automaticamente e depois usar esses mesmos endereços quando alternar o gateway NAT para endereços IP NAT atribuídos manualmente.

O conjunto de endereços IP externos regionais que o Cloud NAT usa para a alocação automática de endereços IP NAT é diferente do conjunto de endereços IP externos regionais que podem ser escolhidos manualmente.

Como drenar endereços IP de NAT

Ao configurar um gateway do Cloud NAT com atribuição de endereço IP NAT manual, é possível escolher o que acontece quando é necessário reduzir o número de endereços IP NAT usados pelo gateway:

  • Se você remover um endereço IP NAT atribuído manualmente, as conexões NAT estabelecidas serão interrompidas imediatamente.

  • É possível escolher drenar um endereço IP NAT atribuído manualmente. A drenagem instrui o gateway do Cloud NAT a parar de usar o endereço IP NAT para novas conexões, mas continuar usando-o para conexões estabelecidas. As conexões estabelecidas podem ser fechadas normalmente em vez de serem abruptamente encerradas. Para obter instruções, consulte Drenar endereços IP externos associados ao NAT.

Portas

Cada endereço IP NAT em um gateway do Cloud NAT oferece 64.512 portas de origem TCP e 64.512 portas de origem UDP. O TCP e o UDP suportam 65.536 portas por endereço IP, e o Cloud NAT não usa as primeiras 1.024 portas conhecidas (privilegiadas).

Ao criar um gateway do Cloud NAT, você especifica um número mínimo de portas por instância de VM. Quando um gateway do Cloud NAT realiza a conversão de endereços de rede de origem (SNAT) em um pacote enviado por uma VM, ele altera o endereço IP de origem e a porta de origem do NAT do pacote.

Procedimento de reserva de porta

O Cloud NAT usa este procedimento para provisionar o endereço IP de origem NAT e as tuplas de porta de origem de cada VM que o gateway do Cloud NAT veicula. Quando você usa um gateway do Cloud NAT para fornecer serviços de NAT para um cluster particular do Google Kubernetes Engine, o número de endereços IP de origem de NAT e tuplas de porta de origem é atribuído a toda a VM do nó, compartilhada por todos os pods no nó.

  1. Determine os endereços IP internos da VM para os quais NAT deve ser realizado. Os endereços IP internos da VM para os quais um gateway do Cloud NAT deve realizar o NAT são determinados pelos intervalos de endereços IP da sub-rede que o gateway foi configurado para veicular.

    • Se o gateway do Cloud NAT estiver configurado para executar NAT para o intervalo de endereços IP primários da sub-rede usada pela interface de rede da VM, o gateway executará o endereço IP interno primário da VM e qualquer intervalos de IP do alias do intervalo de endereços IP primários da sub-rede.

    • Se o gateway do Cloud NAT estiver configurado para executar NAT para um intervalo de endereços IP secundário da sub-rede usada pela interface de rede da VM, o gateway executará NAT para todos os intervalos de IP do alias do intervalo de endereços IP secundário dessa sub-rede.

  2. Ajuste as portas mínimas por instância de VM, se necessário. Se o gateway executar NAT para intervalos de IP de alias que tenham mais de um endereço (máscara de rede menor que /32), ajuste o número mínimo de portas por VM para o máximo desses dois valores:

    • O mínimo de portas por instância de VM especificado (o padrão é 64)
    • O número 1.024

    Em todas as outras situações, o gateway do Cloud NAT segue para a próxima etapa usando as portas mínimas especificadas por instância de VM como entrada.

  3. Reserve o endereço IP de origem de NAT e as tuplas de porta de origem por VM. O gateway do Cloud NAT usa o número de portas mínimas fornecidas ou ajustadas por instância de VM da etapa anterior para calcular o número de endereços IP de origem de NAT e tuplas de portas de origem para atribuir à VM.

    O Cloud NAT aloca endereços IP de origem de NAT e tuplas de portas de origem usando várias potências de dois, de modo que o número de endereços IP de origem de NAT e tuplas de portas de origem sejam maiores ou iguais ao número mínimo de portas por instância de VM especificado.

    • É possível que o endereço IP de origem de NAT e as tuplas de porta de origem abranjam mais de um endereço IP de NAT se o gateway do Cloud NAT usar dois ou mais endereços IP NAT. Um único endereço IP NAT pode não ter portas de origem disponíveis o suficiente para acomodar o número de endereços IP de origem de NAT e tuplas de origem de origem necessários para uma VM.

    • O gateway do Cloud NAT aloca um número fixo de endereços IP de origem e de tuplas de porta de origem para cada VM. Cada VM pode usar apenas o número alocado de endereços IP de origem e de tuplas de porta de origem, mesmo durante bursts de tráfego.

    • É possível aumentar o número de endereços IP de origem de NAT e de tuplas de portas de origem que o gateway do Cloud NAT aloca para cada VM. Basta aumentar o número mínimo de portas por valor de VM. Por exemplo, pode ser necessário aumentar o número mínimo de portas se as VMs precisarem fazer mais conexões novas para o mesmo destino dentro do atraso de dois minutos antes de reutilizar uma tupla de cinco para uma nova conexão TCP.

Como aumentar o número mínimo de portas por VM

Quando você aumenta o número mínimo de portas por VM em um gateway do Cloud NAT, não há interrupção no tráfego. No entanto, você precisa garantir que o gateway tenha um número suficiente de endereços IP de NAT se você estiver usando a atribuição manual de endereços IP de NAT:

  • Ao usar a atribuição manual de endereços IP de NAT, você precisa calcular o número de endereços IP de origem de NAT necessários. Antes de aumentar o número mínimo de portas por VM, atribua pelo menos esses endereços IP de NAT ao gateway do Cloud NAT.

  • Ao usar a alocação automática de endereços IP de NAT, aumentar o número mínimo de portas por VM faz com que o gateway do Cloud NAT adquira e aloque mais endereços IP externos regionais automaticamente.

Como reduzir o número mínimo de portas por VM

Quando você reduz a quantidade de portas mínimas por VM em um gateway do Cloud NAT, não há diminuição da conexão. As conexões NAT estabelecidas são quebradas imediatamente e os clientes precisam estabelecer novas conexões TCP.

Portas e conexões

O número de endereços IP de origem NAT e tuplas de portas de origem que um gateway do Cloud NAT reserva para uma VM limita o número de conexões que a VM pode fazer para um destino único:

  • Um destino único significa uma tupla 3 única, que consiste em um endereço IP de destino, uma porta de destino e um protocolo IP (como TCP ou UDP).

  • Uma conexão significa uma tupla 5 única composta pelo endereço IP de origem NAT e pela tupla da porta de origem combinada com um destino único de três tuplas. Como o protocolo UDP é sem conexão, o conceito de conexão é reduzido a uma tupla 5 associada a um datagrama UDP exclusivo.

Imagine que um gateway do Cloud NAT calcule 1.024 para o número fixo de portas de uma VM, seguindo o procedimento de reserva de porta. O gateway do Cloud NAT reserva 1.024 combinações únicas de endereço IP de origem NAT e tuplas da porta de origem para a VM. O gateway do Cloud NAT pode processar 1.024 conexões simultâneas para cada 3 tuplas de destino único. No entanto, o Cloud NAT considera que as conexões fechadas são inutilizáveis por 120 segundos após o encerramento da conexão, o que pode afetar o número de conexões em uso por vez.

Exemplos:

  • O gateway suporta 1.024 conexões simultâneas com o endereço IP de destino 203.0.113.99 na porta 80 usando o protocolo TCP.

  • O gateway suporta outras 1.024 conexões simultâneas com o mesmo endereço IP de destino na porta 443, também usando o protocolo TCP.

  • O gateway suporta outras 1.024 conexões simultâneas com um endereço IP de destino diferente na porta 80, também usando o protocolo TCP.

Reutilização de porta simultânea e mapeamento independente de endpoint

Contanto que pelo menos uma parte das informações nas três tuplas de destino seja modificada (o endereço IP de destino, a porta de destino, o protocolo), o mesmo endereço de origem NAT e tupla da porta de origem podem ser reutilizados simultaneamente para outras conexões.

Como o Cloud NAT usa Mapeamento independente de endpoint, conforme definido na Seção 2.3 do RFC 5128, o número de conexões simultâneas que uma VM cliente pode fazer para um destino exclusivo de três tuplas poderá ser reduzido se o Cloud NAT atribuir o mesmo endereço IP de origem NAT e tupla de porta de origem a mais de um endereço IP interno e Porta de origem temporária de uma VM cliente. A chance disso acontecer aumenta se a VM cliente tiver um grande número de endereços IP de origem interna e fizer um grande número de conexões com o mesmo destino de três tuplas. Na primeira vez que uma VM cliente envia um endereço IP interno e uma porta de origem temporária, o Cloud NAT cria um mapeamento independente de endpoint de muitos para um entre os seguintes itens:

  • Endereço IP interno e tupla da porta de origem temporária
  • Um endereço IP de origem NAT único e uma tupla de porta de origem

Por exemplo, quando uma VM cliente envia um pacote do seu endereço IP interno 10.0.0.2 usando a porta de origem temporária 10001, o Cloud NAT atribui 10.0.0.2:10001 a um endereço IP de origem NAT e uma tupla de porta de origem a ser usada para todas as conexões subsequentes de 10.0.0.2:10001 para qualquer destino com três tuplas.

Se a mesma VM usar uma porta de origem temporária diferente para enviar um pacote, por exemplo, 10.0.0.2:20002, o Cloud NAT também atribui um endereço IP de origem NAT e uma tupla de porta de origem para todas as conexões subsequentes a partir de 10.0.0.2:20002 para qualquer destino de três tuplas. É possível que o Cloud NAT atribua o mesmo endereço IP de origem NAT e tupla da porta de origem a ambos os endereços IP internos e a tuplas temporárias da porta de origem. Em determinadas situações, isso causa um conflito independente de endpoint.

Para um exemplo mais detalhado, consulte Exemplo de conflito no mapeamento independente de endpoint.

Como reduzir conflitos independentes de endpoint

Reduza as chances de conflitos independentes de endpoint usando as seguintes técnicas:

  • Desative o mapeamento independente de endpoint. Isso permite que a nova conexão a partir de um determinado endereço IP e porta de origem use uma porta e um endereço IP de origem de NAT diferentes dos usados anteriormente. A desativação ou a ativação do mapeamento independente de endpoint não interrompe as conexões estabelecidas.

  • Aumente o número mínimo de portas por instância de VM para que o procedimento de reserva de porta possa atribuir mais endereços IP de origem NAT e tuplas de portas de origem a cada VM cliente. Isso diminui a probabilidade de dois ou mais endereços IP de cliente e tuplas de porta de origem temporária receberem o mesmo endereço IP de origem NAT e tupla de porta de origem.

  • Configure as instâncias de VM para usar um conjunto maior de portas de origem temporárias:

    • Em VMs do Linux, defina ip_local_port_range como o número máximo de portas de origem temporárias (64.512) com este comando:

      echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
      
    • Nas VMs do Windows, é possível definir o número de portas TCP e UDP de origem temporária como o máximo possível (64.512) com estes comandos:

      netsh int ipv4 set dynamicport tcp start=1024 num=64512
      netsh int ipv4 set dynamicport udp start=1024 num=64512
    • Nos nós do GKE, é possível automatizar essa configuração usando um DaemonSet privilegiado.

  • Para clusters do GKE, desative o NAT de origem executado em cada nó para pacotes enviados a destinos de interesse. Isso pode ser feito de duas maneiras:

Atraso para a reutilização da porta de origem TCP

Depois que um gateway do Cloud NAT fecha uma conexão TCP, o Google Cloud impõe um atraso de dois minutos antes que o gateway possa reutilizar o mesmo endereço IP de origem NAT e tupla de porta de origem com o mesmo destino (endereço IP de destino, porta de destino e protocolo).

Não é possível reduzir esse atraso. No entanto, é possível realizar uma das seguintes ações:

  • Aumente o número mínimo de portas por instância de VM para que o procedimento de reserva de porta atribua à VM mais endereços IP de origem NAT e tuplas de porta de origem.

  • Se uma VM precisa abrir e fechar rapidamente conexões TCP com o mesmo endereço IP de destino e porta de destino usando o mesmo protocolo, atribua um endereço IP externo à VM e use regras de firewall para limitar as conexões de entrada não solicitadas em vez de usar o Cloud NAT.

Portas de origem e segurança

Se você depender da ordem aleatória da porta de origem como medida de segurança, considere o seguinte:

Exemplos

Os exemplos a seguir demonstram como o Cloud NAT reserva endereços IP de origem NAT e portas de origem para uma VM e como ela realiza NAT para pacotes enviados à Internet.

Reserva de porta

Os exemplos a seguir demonstram os aplicativos do procedimento de reserva de porta.

Suponha que você esteja configurando um gateway do Cloud NAT para fornecer NAT para o intervalo de endereços IP primários de uma sub-rede e as VMs que usam essa sub-rede não tenham intervalos de IP de alias do intervalo de endereços IP primários da sub-rede. Arredonde para baixo o resultado de qualquer operação de divisão para o número inteiro mais próximo. ⌊⌋ é a função floor (maior inteiro), ou seja, descarta qualquer resultado fracionário da divisão.

  • Se você configurar o gateway do Cloud NAT com um único endereço IP NAT usando atribuição manual e definir o número mínimo de portas por instância de VM para 64, o gateway pode fornecer serviços NAT para até 1.008 VMs:

    ⌊(1 endereço IP NAT) × (64.512 portas por endereço) / (64 portas por VM) ⌋ = 1.008 VMs

  • Se precisar aceitar mais de 1.008 VMs, atribua um segundo endereço IP NAT ao gateway do Cloud NAT. Com dois endereços IP NAT, mantendo o número mínimo de portas por VM em 64, é possível suportar 2.016 VMs:

    ⌊(2 endereços IP NAT) × (64.512 portas por endereço) / (64 portas por VM) ⌋ = 2.016 VMs

  • Se você definir o número mínimo de portas por VM como 4.096, cada endereço IP NAT será compatível com 15 VMs. Esse cálculo é arredondado para o número inteiro mais próximo:

    ⌊(1 endereços IP NAT) × (64.512 portas por endereço) / (4.096 portas por VM) ⌋ = 15 VMs

Conflito de mapeamento independente de endpoint

O exemplo a seguir ilustra como o mapeamento independente de endpoint pode reduzir o número de conexões simultâneas de uma VM cliente para o mesmo destino de três tuplas, mesmo quando há um número suficiente de endereços IP de origem NAT gratuitos e tuplas da porta de origem para a VM cliente.

Suponha que você tenha configurado um gateway do Cloud NAT para fornecer NAT ao intervalo de endereços IP primários de uma sub-rede. Você criou uma VM cliente com uma interface de rede com um endereço IP interno primário que é 10.0.0.2 nessa sub-rede. A VM de exemplo não tem um endereço IP externo atribuído à interface de rede dele.

  1. A VM abre uma conexão com estas características:

    • Endereço IP interno e porta de origem: 10.0.0.2:10001
    • Três tuplas de destino: 203.0.113.1:80 usando TCP
    • O Cloud NAT usa o seguinte endereço IP de origem NAT e a tupla da porta de origem: 192.0.2.10:30009
  2. A VM abre uma conexão com estas características:

    • Endereço IP interno e porta de origem: 10.0.0.2:10002
    • Três tuplas de destino: 203.0.113.2:80 usando TCP
    • O Cloud NAT também pode optar por usar o mesmo endereço IP de origem NAT e tupla de porta de origem 192.0.2.10:30009 para essa conexão. É possível usar o mesmo endereço IP de origem NAT e a tupla de porta de origem para um endereço IP de cliente diferente e uma porta de origem temporária.
  3. Enquanto a primeira e a segunda conexões estão ativas, o Cloud NAT não pode abrir uma terceira conexão TCP com estas características:

    • Mesmo endereço IP interno de porta de origem que a primeira conexão: 10.0.0.2:10001
    • Mesmas três tuplas de destino da segunda conexão: 203.0.113.2:80 usando TCP

    Essa terceira tentativa de conexão é descartada com um erro de conflito independente de endpoint. Isso porque o mapeamento independente de endpoint estabelecido pela primeira conexão exige que todas as conexões de 10.0.0.2:10001 usem o mesmo endereço IP de origem NAT e tupla de porta de origem, 192.0.2.10:30009, mas 192.0.2.10:30009 já está sendo usado pela segunda conexão TCP com 203.0.113.2:80.

  4. Para descartar a ambiguidade, uma tentativa de conexão subsequente neste exemplo é bem-sucedida, desde que uma das seguintes condições seja verdadeira:

    • A primeira conexão TCP foi encerrada. Isso remove o mapeamento independente de endpoint entre 10.0.0.2:10001 e 192.0.2.10:30009, para que a terceira conexão possa ser mapeada para um endereço IP de origem NAT e tupla de porta de origem para se comunicar com 203.0.113.2:80 usando TCP.
    • A segunda conexão TCP foi encerrada. Isso libera 10.0.0.2:10001 para usar o endereço IP de origem NAT e a porta de origem 192.0.2.10:30009 para se comunicar com 203.0.113.2:80 usando TCP.
    • A terceira tentativa de conexão seleciona uma porta de origem temporária (interna) diferente. Neste exemplo, um mapeamento independente de endpoint estabeleceu um mapeamento de muitos para um para endereços IP de origem de NAT internos e portas de origem 10.0.0.2:10001 e 10.0.0.2:10002 para usar 192.0.2.10:30009 ao se comunicar com 203.0.113.2:80 usando TCP. Se a terceira tentativa de conexão usar uma porta de origem temporária diferente de 10001 e 10002, há uma chance de que um endereço IP de origem NAT e uma porta de origem diferentes possam ser usados para se comunicar com 203.0.113.2:80 usando TCP.
    • Como desativar a dependência do endpoint. Isso permite que a nova conexão de 10.0.0.2:10001 não precise usar 192.0.2.10:30009, permitindo que ela use uma porta e um endereço IP de origem de NAT diferentes.

Para técnicas que podem ser usadas para evitar conflitos, consulte Como reduzir conflitos independentes de endpoint.

Fluxo NAT

Neste exemplo, uma VM com endereço IP primário 10.240.0.4, sem um endereço IP externo, precisa fazer o download de uma atualização a partir do endereço IP externo 203.0.113.1. Você configurou o gateway nat-gw-us-east da seguinte maneira:

  • Mínimo de portas por instância: 64
  • Dois endereços IP NAT atribuídos manualmente: 192.0.2.50 e 192.0.2.60
  • NAT fornecido para o intervalo de endereços IP primários de subnet-1.
Exemplo de tradução do Cloud NAT (clique para ampliar).
Exemplo de tradução do Cloud NAT (clique para ampliar)

O Cloud NAT segue o procedimento de reserva de porta para reservar o seguinte endereço IP de origem e as tuplas de origem da NAT para cada uma das VMs na rede. Por exemplo, o gateway do Cloud NAT reserva 64 portas de origem para a VM com endereço IP interno 10.240.0.4. O endereço IP NAT 192.0.2.50 tem 64 portas não reservadas. Portanto, o gateway reserva o seguinte conjunto de 64 endereços IP de origem NAT e tuplas de porta de origem para essa VM:

  • 192.0.2.50:34000 até 192.0.2.50:34063

Quando a VM envia um pacote para o servidor de atualização 203.0.113.1 na porta de destino 80, usando o protocolo TCP, ocorre o seguinte:

  • A VM envia um pacote de solicitação com estes atributos:

    • Endereço IP de origem NAT: 10.240.0.4, o endereço IP interno primário da VM
    • Porta de origem: 24000, a porta de origem temporária escolhida pelo sistema operacional da VM
    • Endereço de destino: 203.0.113.1, o endereço IP externo do servidor de atualização
    • Porta de destino: 80, a porta de destino do tráfego HTTP para o servidor de atualizações
    • Protocolo: TCP
  • O gateway nat-gw-us-east executa a SNAT na saída, reescrevendo o endereço IP de origem e a porta de origem do pacote da solicitação. O pacote modificado será enviado à Internet se a rede VPC tiver uma rota para o destino 203.0.113.1, cujo próximo salto é o gateway de Internet padrão. Uma rota padrão geralmente atende a esse requisito.

    • Endereço IP de origem NAT: 192.0.2.50, de um dos endereços IP de origem NAT reservados da VM e das tuplas da porta de origem
    • Porta de origem: 34022, uma porta de origem não utilizada de uma das tuplas de porta de origem reservadas da VM
    • Endereço de destino: 203.0.113.1, inalterado
    • Porta de destino: 80, inalterada
    • Protocolo: TCP, inalterado
  • Quando o servidor de atualização envia um pacote de resposta, esse pacote chega ao gateway nat-gw-us-east com estes atributos:

    • Endereço IP de origem NAT: 203.0.113.1, o endereço IP externo do servidor de atualização
    • Porta de origem: 80, a resposta HTTP do servidor de atualização
    • Endereço de destino: 192.0.2.50, que corresponde ao endereço IP de origem da NAT original do pacote de solicitação
    • Porta de destino: 34022, que corresponde à porta de origem do pacote de solicitação
    • Protocolo: TCP, inalterado
  • O gateway nat-gw-us-east executa a conversão de endereços de rede de destino (DNAT, na sigla em inglês) no pacote de resposta, reescrevendo o endereço de destino e a porta de destino do pacote de resposta para que o pacote seja entregue à VM:

    • Endereço IP de origem NAT: 203.0.113.1, inalterado
    • Porta de origem: 80, inalterada
    • Endereço de destino: 10.240.0.4, o endereço IP interno primário da VM
    • Porta de destino: 24000, que corresponde à porta de origem temporária original do pacote de solicitação
    • Protocolo: TCP, inalterado

A seguir