Regras do Cloud NAT

Esta página oferece uma visão geral das regras do Cloud NAT para NAT público. Essas regras permitem definir como o Cloud NAT é usado para se conectar à Internet.

As regras do Cloud NAT para Public NAT são compatíveis com a conversão de endereços de rede de origem (SNAT) com base no endereço de origem (prévia) ou de destino.

Regras NAT

Por padrão, quando você configura um gateway do Cloud NAT para o Public NAT, os pacotes traduzidos por esse gateway usam o mesmo conjunto de endereços IP NAT para alcançar todos os endereços da Internet. Se você precisar de mais controle sobre os pacotes traduzidos pelo Cloud NAT, adicione regras NAT.

A regra NAT define uma condição de correspondência e uma ação correspondente. Depois de especificar as regras NAT, cada pacote será correspondido com cada regra NAT. Se um pacote corresponder à condição definida em uma regra, a ação relativa a essa correspondência ocorrerá.

As regras de NAT para o Public NAT são compatíveis com a correspondência de endereços de origem e destino:

  • Em regras baseadas na origem (pré-lançamento), os pacotes são correspondidos pelo endereço IP de origem. Somente endereços de origem IPv4 são compatíveis.
  • Em regras baseadas em destino, os pacotes são correspondidos pelo endereço IP de destino. Somente endereços de destino IPv4 são aceitos.

Não é permitido combinar condições com base na origem e no destino em uma única regra de NAT. Para mais informações, consulte Especificações de regras de NAT.

Exemplo de configuração de regras do Cloud NAT

O exemplo a seguir ilustra como usar regras NAT quando o destino permite o acesso de apenas alguns endereços IP. Recomendamos que o tráfego para esses destinos das VMs do Google Cloud em sub-redes particulares seja fornecido pela SNAT com apenas os endereços IP permitidos. Além disso, recomendamos que você não use esses endereços IP para outros destinos.

Considere os seguintes requisitos para VMs em Subnet-1 (10.10.10.0/24), que estão na região A da rede VPC test:

  • As VMs precisam usar o endereço IP NAT 203.0.113.20 para enviar o tráfego para o destino 198.51.100.20/30.
  • As VMs precisam usar o endereço IP NAT 203.0.113.30 para enviar o tráfego para o destino 198.51.100.30 ou 198.51.100.31.
  • As VMs precisam usar o endereço IP NAT 203.0.113.40 para enviar tráfego para qualquer outro destino da Internet.

Essa rede VPC também contém duas sub-redes adicionais na mesma região. Essas VMs precisam usar o endereço IP NAT 203.0.113.10 para enviar o tráfego para qualquer destino.

Configuração do Cloud NAT com dois gateways NAT do Cloud.
Configuração do Cloud NAT com dois gateways NAT do Cloud (clique para ampliar)

É possível usar regras NAT neste exemplo, mas são necessários dois gateways NAT porque Subnet-1 (10.10.10.0/24) tem regras NAT diferentes das outras sub-redes. Para criar esta configuração, siga estes passos:

  1. Crie um gateway chamado Cloud NAT Gateway 1 para Subnet-1 com o endereço IP NAT 203.0.113.40 e adicione as seguintes regras:
    1. Regra NAT 1 em Cloud NAT Gateway 1: quando o destino for 198.51.100.20/30, use 203.0.113.20 para NAT.
    2. Regra NAT 2 em Cloud NAT Gateway 1: quando o destino for 198.51.100.30 ou 198.51.100.31, use 203.0.113.30 para NAT.
  2. Crie um gateway chamado Cloud NAT Gateway 2 para as outras sub-redes da região e atribua o endereço IP NAT como 203.0.113.10. Nenhuma regra NAT é necessária nesta etapa.

Especificações de regras NAT

  • O Cloud NAT é compatível com regras baseadas em origem e destino. Cada regra define uma condição com base no endereço de origem ou de destino, mas não em ambos.
  • Uma prioridade de regra identifica exclusivamente uma regra NAT, de 0 (prioridade mais alta) a 65.000 (prioridade mais baixa). Duas regras não podem ter a mesma prioridade.
  • Cada configuração NAT tem uma regra padrão:
    • A regra padrão é aplicada quando nenhuma outra regra NAT corresponde à mesma configuração NAT.
    • A prioridade da regra padrão é 65001.
    • Para regras baseadas em origem e destino, o intervalo CIDR de IP da regra padrão é 0.0.0.0/0.
  • As regras do Cloud NAT são compatíveis somente quando o valor da opção de alocação de IP NAT é MANUAL_ONLY.
  • Todos os endereços IP configurados em uma determinada regra precisam ser do mesmo nível.

    Não é possível usar uma combinação de endereços IP de nível Premium e Padrão na mesma regra (incluindo a regra padrão).

  • Os intervalos de CIDR de IP nas condições de correspondência não podem se sobrepor em regras NAT. No máximo, uma regra pode ser aplicada a um determinado pacote. Se um pacote corresponder a uma regra baseada na origem e no destino, o Cloud NAT vai aplicar a regra com maior prioridade.

    Não é possível criar uma regra NAT com 0.0.0.0/0 como o intervalo de origem ou destino porque ele é usado pela regra padrão.

  • Os endereços IP NAT entre regras NAT não podem se sobrepor.

  • As regras precisam ter um endereço IP Active ou Drain não vazio. Se a regra tiver um endereço IP Active vazio, novas conexões que correspondem à regra NAT serão descartadas.

  • As regras NAT não podem ser adicionadas a um gateway NAT que tenha o Mapeamento independente de endpoint ativado. Não é possível ativar o mapeamento independente de endpoint em um gateway NAT que tenha regras NAT.

Além disso, todas as VMs recebem portas atribuídas a elas a partir do valor das portas mínimas por VM para cada regra do Cloud NAT. Se as portas alocadas a uma VM de uma regra NAT estiverem esgotadas, as novas conexões que correspondem à regra NAT serão descartadas.

Por exemplo, se você configurar 4.096 portas por VM e tiver 16 VMs e 2 regras NAT (rule1 com 1 endereço IP e rule2 com 2 endereços IP), junto com a regra padrão (default) com 2 endereços IP, todas as 16 VMs receberão 4.096 portas em cada pacote de regras NAT. Neste exemplo, não há problemas em default ou rule2 para todas as VMs, mas rule1 não pode alocar portas para todas as VMs. Portanto, o tráfego de VMs que precisam passar por rule1 pode ser descartado e mostrar sinais de estar sem recursos porque o tráfego não usa a regra padrão.

Linguagem de expressão de regras

As regras NAT são escritas usando a sintaxe da Common Expression Language.

Uma expressão requer dois componentes:

  • Atributos que podem ser inspecionados em expressões de regra.
  • Operações que podem ser executadas nos atributos como parte de uma expressão.

Por exemplo, a expressão a seguir usa os atributos destination.ip e 198.51.100.0/24 na operação inIpRange(). Nesse caso, a expressão retornará como verdadeiro se destination.ip estiver dentro do intervalo de endereços IP de 198.51.100.0/24.

inIpRange(destination.ip, '198.51.100.0/24')

As regras NAT são compatíveis apenas com os seguintes atributos e operações:

Atributos

Os atributos representam informações de um pacote de saída, como o endereço IP de origem e de destino.

Nome do atributo Descrição
source.ip Endereço IP de origem do pacote
destination.ip Endereço IP de destino do pacote

Operações

A referência a seguir descreve os operadores que podem ser usados com atributos para definir expressões de regra.

Operação Descrição
inIpRange(string, string) -> bool inIpRange(x, y) retorna true se o intervalo IP CIDR y contiver o endereço IP x.
|| Operador lógico. x || y retorna true se x ou y for true.
== Operador de igualdade. x == y retorna true se x for igual a y.

Exemplos de expressões

É possível fazer a correspondência de pacotes com base no endereço de origem ou de destino, mas não em ambos.

Exemplos de correspondência com base na origem

Corresponda a pacotes com o endereço IP de origem 10.0.0.25:

"source.ip == '10.0.0.25'"

Faça a correspondência de pacotes com o endereço IP de origem 10.0.0.25 ou 10.0.0.26:

"source.ip == '10.0.0.25' || source.ip == '10.0.0.26'"

Corresponda a pacotes com o intervalo de endereços IP de origem 10.0.2.0/24:

"inIpRange(source.ip, '10.0.2.0/24')"

Faça a correspondência de pacotes com o endereço IP de origem 10.0.0.25 ou o intervalo de endereços IP de origem 10.0.2.0/24:

"source.ip == '10.0.0.25' || inIpRange(source.ip, '10.0.2.0/24')"

Exemplos de correspondência com base no destino

Corresponder pacotes com o endereço IP de destino 198.51.100.20:

"destination.ip == '198.51.100.20'"

Corresponda a pacotes com o endereço IP de destino 198.51.100.20 ou 198.51.100.21:

"destination.ip == '198.51.100.20' || destination.ip == '198.51.100.21'"

Corresponda a pacotes com o intervalo de endereços IP de destino 198.51.100.10/30:

"inIpRange(destination.ip, '198.51.100.10/30')"

Corresponder pacotes com o endereço IP de destino 198.51.100.20 ou o intervalo de endereços IP de destino 198.51.100.10/30:

"destination.ip == '198.51.100.20' || inIpRange(destination.ip, '198.51.100.10/30')"

A seguir