Usar Public NAT com Compute Engine

Esta página mostra uma demonstração de um gateway do Public NAT que fornece serviços de conversão de endereços de rede para uma instância de VM do Compute Engine. Antes de começar, leia as Informações gerais do Public NAT.

Pré-requisitos

É necessário fazer o seguinte antes de configurar o Public NAT.

Acessar permissões do IAM

O papel roles/compute.networkAdmin concede permissões para criar um gateway NAT no Cloud Router, reservar e atribuir endereços IP de NAT e especificar sub-redes (sub-redes) cujo tráfego deve usar a conversão de endereços de rede pelo gateway NAT.

Configurar o Google Cloud

Antes de começar, configure os seguintes itens em Google Cloud.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.

  5. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Install the Google Cloud CLI.

  10. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Exemplo

    Confira a seguir um exemplo completo que demonstra um gateway de amostra do Private NAT e uma VM de exemplo do Compute Engine que usa o gateway do Private NAT.

    Etapa 1: criar uma rede e sub-rede da VPC

    Se você já tiver uma rede e uma sub-rede, pule esta etapa.

    Console

    1. No console Google Cloud , acesse a página Redes VPC.

      Acessar a página "Redes VPC"

    2. Clique em Criar rede VPC.

    3. Informe um Nome de custom-network1.

    4. Em Sub-redes, defina o Modo de criação da sub-rede como Personalizado.

    5. Em Nova sub-rede, insira um Nome de subnet-us-east-192.

    6. Em Região, selecione us-east4.

    7. Digite um intervalo de endereço IP 192.168.1.0/24.

    8. Clique em Concluído e em Criar.

    gcloud

    1. Crie uma nova rede VPC de modo personalizado no seu projeto.

      gcloud compute networks create custom-network1 \
          --subnet-mode custom
    2. Especifique o prefixo de sub-rede da primeira região. Neste exemplo, atribuímos 192.168.1.0/24 à região us-east4.

      gcloud compute networks subnets create subnet-us-east-192 \
         --network custom-network1 \
         --region us-east4 \
         --range 192.168.1.0/24

    Terraform

    É possível usar um módulo do Terraform para criar uma rede e uma sub-rede de nuvem privada virtual (VPC) personalizada.

    module "test-vpc-module" {
      source       = "terraform-google-modules/network/google"
      version      = "~> 10.0"
      project_id   = var.project_id # Replace this with your project ID in quotes
      network_name = "custom-network1"
      mtu          = 1460
    
      subnets = [
        {
          subnet_name   = "subnet-us-east-192"
          subnet_ip     = "192.168.1.0/24"
          subnet_region = "us-east4"
        }
      ]
    }

    Etapa 2: criar uma instância de VM sem endereço IP externo

    Console

    1. No Google Cloud console, acesse a página Instâncias de VM:

      Acessar a página "Instâncias de VM"

    2. Clique em Criar instância.

    3. Especifique um Nome de nat-test-1 para sua instância.

    4. Defina a Região como us-east4.

    5. Defina a Zona como us-east4-c.

    6. Clique no link Gerenciamento, segurança, discos, rede, locatário individual.

    7. Clique na guia Rede.

    8. Em Interfaces de rede, clique em Editar na interface padrão da VM.

      1. Defina o Rede para custom-network1.
      2. Defina o Sub-rede para subnet-us-east-192.
      3. Defina IP externo como None.
      4. Clique em Concluído.
    9. Para criar e iniciar a instância, clique em Criar.

    gcloud

    gcloud compute instances create nat-test-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --network custom-network1 \
        --subnet subnet-us-east-192 \
        --zone us-east4-c \
        --no-address

    Terraform

    É possível usar um recurso do Terraform para criar uma instância de VM.

    resource "google_compute_instance" "default" {
      project      = var.project_id
      zone         = "us-east4-c"
      name         = "nat-test-1"
      machine_type = "e2-medium"
      boot_disk {
        initialize_params {
          image = "debian-cloud/debian-9"
        }
      }
      network_interface {
        network    = "custom-network1"
        subnetwork = var.subnet # Replace with a reference or self link to your subnet, in quotes
      }
    }

    Etapa 3: criar uma regra de firewall que permita conexões SSH

    Console

    1. No console Google Cloud , acesse a página Políticas de firewall.

      Acessar a página "Políticas de firewall"

    2. Clique em Criar regra de firewall.

    3. Informe um Nome de allow-ssh.

    4. Especifique uma rede de custom-network1.

    5. Defina a Direção do tráfego como Entrada.

    6. Defina a Ação se houver correspondência como Permitir.

    7. Defina Destinos como Todas as instâncias na rede.

    8. Defina Filtro de origem como Intervalos IPv4.

    9. Defina Intervalos de IPs de origem como 35.235.240.0/20.

    10. Defina Protocolos e portas como Protocolos e portas especificados.

    11. Marque a caixa de seleção tcp e insira a porta 22.

    12. Clique em Criar

    gcloud

    gcloud compute firewall-rules create allow-ssh \
        --network custom-network1 \
        --source-ranges 35.235.240.0/20 \
        --allow tcp:22

    Terraform

    Use um recurso do Terraform para criar uma regra de firewall.

    resource "google_compute_firewall" "rules" {
      project = var.project_id
      name    = "allow-ssh"
      network = var.network # Replace with a reference or self link to your network, in quotes
    
      allow {
        protocol = "tcp"
        ports    = ["22"]
      }
      source_ranges = ["35.235.240.0/20"]
    }

    Etapa 4: criar permissões SSH de IAP para sua instância de teste

    Em uma etapa posterior, use o Identity-Aware Proxy (IAP) para se conectar à sua instância de teste.

    Console

    1. No console Google Cloud , acesse a página Identity-Aware Proxy.

      Acessar a página Identity-Aware Proxy

    2. Selecione a guia Recursos SSH e TCP.

    3. Para atualizar as permissões dos membros nos recursos, marque a caixa de seleção ao lado de Todos os recursos do túnel > us-east4-c > nat-test-1.

    4. No painel à direita, clique em Adicionar membro.

    5. Para conceder aos usuários, grupos ou contas de serviço acesso aos recursos, no campo Novos membros, especifique os endereços de e-mail.

      Se você estiver apenas testando esse recurso, poderá inserir seu próprio endereço de e-mail.

    6. Para conceder aos membros acesso aos recursos por meio do recurso de encaminhamento TCP do Cloud IAP, na lista suspensa Papel, selecione Cloud IAP > Usuário do túnel protegido pelo IAP.

    7. Clique em Salvar.

    gcloud

    Esse comando concede acesso SSH usando o IAP para todas as instâncias de VM no projeto. Se você quiser conceder acesso SSH com o IAP a uma VM individual, use as instruções do console Google Cloud .

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=MEMBER_INFO \
        --role=roles/iap.tunnelResourceAccessor

    Substitua:

    • PROJECT_ID: ID do projeto
    • MEMBER_INFO: uma lista separada por vírgulas de pares de type:email dos membros. Exemplos:
      • Para um único usuário: user:test-user@example.com
      • Para um grupo: group:admins@example.com
      • Para uma conta de serviço: serviceAccount:test123@example.domain.com

    Terraform

    É possível usar um recurso do Terraform para criar permissões SSH de IAP para sua instância de teste.

    resource "google_project_iam_member" "project" {
      project = var.project_id
      role    = "roles/iap.tunnelResourceAccessor"
      member  = "serviceAccount:test123@example.domain.com"
    }

    Etapa 5: faça login em nat-test-1 e confirme que não é possível acessar a Internet

    Console

    1. No Google Cloud console, acesse a página Instâncias de VM:

      Acessar a página "Instâncias de VM"

    2. Para nat-test-1, na coluna Conectar, clique na seta suspensa SSH e selecione Abrir na janela do navegador.

    3. No prompt de comando da VM, insira curl example.com e pressione Enter.

      Você não deve obter nenhum resultado. Se fizer isso, você pode ter criado nat-test-1 com um endereço IP externo ou pode haver algum outro problema. Para resolver esse problema, consulte as VMs podem acessar a Internet inesperadamente sem o Cloud NAT.

      Para finalizar o comando, talvez seja necessário inserir Ctrl+C.

    gcloud

    1. Adicione uma chave SSH do Compute Engine ao seu host local.

      ssh-add ~/.ssh/google_compute_engine
      
    2. Conecte-se a nat-test-1 e execute um comando:

      gcloud compute ssh nat-test-1 \
          --zone us-east4-c \
          --command "curl example.com" \
          --tunnel-through-iap

      Você não deve obter nenhum resultado. Se fizer isso, você pode ter criado nat-test-1 com um endereço IP externo ou pode haver algum outro problema. Para resolver esse problema, consulte as VMs podem acessar a Internet inesperadamente sem o Cloud NAT.

      Para finalizar o comando, talvez seja necessário inserir Ctrl+C.

    Etapa 6: criar uma configuração NAT usando o Cloud Router

    É necessário criar o Cloud Router na mesma região que as instâncias que usam o Public NAT. O Cloud Router é usado apenas para colocar informações NAT nas VMs. Ele não é usado como parte do gateway NAT real.

    Essa configuração permite que todas as instâncias da região usem o Public NAT para todos os intervalos de IP alias e primário. Ela também aloca automaticamente os endereços IP externos para o gateway NAT. Para mais opções, consulte a documentação da CLI do Google Cloud.

    Console

    1. No console Google Cloud , acesse a página do Cloud NAT.

      Acesse a página do Cloud NAT

    2. Clique em Primeiros passos ou Criar gateway NAT.

    3. Digite um nome de gateway de nat-config.

    4. Defina a Rede VPC para custom-network1.

    5. Defina a Região como us-east4.

    6. Em Cloud Router, selecione Criar novo roteador.

      1. Informe um Nome de nat-router.
      2. Clique em Criar
    7. Clique em Criar.

    gcloud

    1. Criar um Cloud Router

      gcloud compute routers create nat-router \
          --network custom-network1 \
          --region us-east4
    2. Adicionar uma configuração ao roteador

      gcloud compute routers nats create nat-config \
          --router-region us-east4 \
          --router nat-router \
          --nat-all-subnet-ip-ranges \
          --auto-allocate-nat-external-ips

    Terraform

    É possível usar um recurso do Terraform para criar um Cloud Router.

    resource "google_compute_router" "router" {
      project = var.project_id
      name    = "nat-router"
      network = var.network
      region  = "us-east4"
    }

    É possível usar um módulo do Terraform para criar uma configuração de NAT.

    module "cloud-nat" {
      source  = "terraform-google-modules/cloud-nat/google"
      version = "~> 5.0"
    
      project_id                         = var.project_id
      region                             = "us-east4"
      router                             = google_compute_router.router.name
      name                               = "nat-config"
      source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
    }

    Etapa 7: tentar se conectar à Internet novamente

    Pode levar até três minutos para que a configuração de NAT seja propagada para a VM. Portanto, aguarde pelo menos um minuto antes de tentar acessar a Internet novamente.

    Console

    1. No Google Cloud console, acesse a página Instâncias de VM:

      Acessar a página "Instâncias de VM"

    2. Para nat-test-1, na coluna Conectar, clique na seta suspensa SSH e selecione Abrir na janela do navegador.

    3. No prompt de comando da VM, insira curl example.com e pressione Enter.

    gcloud

    Conecte-se a nat-test-1 e execute um comando:

    gcloud compute ssh nat-test-1 \
        --zone us-east4-c \
        --command "curl example.com" \
        --tunnel-through-iap
    

    Você verá a saída que contém o seguinte conteúdo:

    
    <html>
    <head>
    <title>Example Domain</title>
    ...
    ...
    ...
    </head>
    
    <body>
    <div>
        <h1>Example Domain</h1>
        <p>This domain is established to be used for illustrative examples in documents. You can use this
        domain in examples without prior coordination or asking for permission.</p>
        <p><a href="http://www.iana.org/domains/example">More information...</a></p>
    </div>
    </body>
    </html>
    

    A seguir