Regras do Cloud NAT

O recurso de regras NAT permite criar regras de acesso que definem como o Cloud NAT é usado para se conectar à Internet. As regras NAT são compatíveis com NAT de origem com base no endereço de destino.

Quando você configura um gateway NAT sem regras NAT, as VMs que usam 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 que passam 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á.

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 NAT 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 NAT de origem com 203.0.113.20.
    2. Regra NAT 2 em Cloud NAT Gateway 1: quando o destino for 198.51.100.30 ou 198.51.100.31, use NAT de origem com 203.0.113.30.
  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

Antes de trabalhar com regras NAT, observe as seguintes especificações:

  • Um número de regra identifica exclusivamente uma regra NAT. Duas regras não podem ter o mesmo número de regra.
  • Cada configuração NAT tem uma regra padrão:
    • A regra padrão é aplicada quando nenhuma outra regra NAT corresponde à mesma configuração NAT.
    • O número da regra padrão é 65001.
    • O intervalo CIDR de IP de destino 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 de destino na condição de correspondência não podem se sobrepor em regras NAT. Somente uma regra pode corresponder a qualquer pacote.

    Não é possível criar uma regra NAT com um intervalo de CIDR de IP de destino de 0.0.0.0/0, porque esse intervalo é usado na 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 destino.

Nome do atributo Descrição
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 verdadeiro se o intervalo IP CIDR Y contiver o endereço IP X.
|| Operador lógico. x y retorna verdadeiro se x ou y for verdadeiro.
== Operador igual. x == y retorna verdadeiro se x for igual a y.

Exemplos de expressões

Corresponder ao tráfego com o endereço IP de destino 198.51.100.20.

"destination.ip == '198.51.100.20'"

Faça a correspondência do tráfego com o endereço IP de destino 198.51.100.10/30 ou 198.51.100.20.

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

A seguir