Public NAT mit Compute Engine verwenden

Auf dieser Seite wird ein Public NAT-Gateway demonstriert, das Dienste zur Netzwerkadressübersetzung für eine Compute Engine-VM-Instanz bereitstellt. Lesen Sie vorab die Public NAT-Übersicht.

Vorbereitung

Führen Sie die folgenden Schritte aus, bevor Sie Public NAT einrichten.

IAM-Berechtigungen abrufen

Die Rolle roles/compute.networkAdmin berechtigt Sie, ein NAT-Gateway in Cloud Router zu erstellen, NAT-IP-Adressen zu reservieren und zuzuweisen sowie Subnetzwerke (Subnetze) anzugeben, deren Traffic eine Netzwerkadressübersetzung vom NAT-Gateway verwenden sollte.

Einrichtung von Google Cloud

Zuvor sollten Sie jedoch die folgenden Elemente in Google Cloudeinrichten.

  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. Verify that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.

  5. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  6. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    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. Verify that billing is enabled for your Google Cloud project.

  9. Install the Google Cloud CLI.

  10. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  11. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  12. Beispiel

    Im Folgenden finden Sie ein End-to-End-Beispiel für ein Public NAT-Gateway sowie eine Compute Engine-VM, die das Public NAT-Gateway verwendet.

    Schritt 1: VPC-Netzwerk und Subnetz erstellen

    Wenn Sie bereits ein Netzwerk und ein Subnetz haben, können Sie diesen Schritt überspringen.

    Console

    1. Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.

      Zur VPC-Netzwerkseite

    2. Klicken Sie auf VPC-Netzwerk erstellen.

    3. Geben Sie als Name custom-network1 ein.

    4. Wählen Sie unter Subnetze für Modus für Subnetzerstellung die Option Benutzerdefiniert aus.

    5. Geben Sie unter Neues Subnetz für Name den Wert subnet-us-east-192 ein.

    6. Wählen Sie unter Region die Option us-east4 aus.

    7. Geben Sie für IP-Adressbereich den Wert 192.168.1.0/24 ein.

    8. Klicken Sie auf Fertig und dann auf Erstellen.

    gcloud

    1. Erstellen Sie in Ihrem Projekt ein neues VPC-Netzwerk im benutzerdefinierten Modus:

      gcloud compute networks create custom-network1 \
          --subnet-mode custom
    2. Geben Sie das Subnetzpräfix für die erste Region an. In diesem Beispiel weisen Sie 192.168.1.0/24 der Region us-east4 zu.

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

    Terraform

    Sie können ein Terraform-Modul verwenden, um ein benutzerdefiniertes VPC-Netzwerk und ein Subnetz zu erstellen.

    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"
        }
      ]
    }

    Schritt 2: VM-Instanz ohne externe IP-Adresse erstellen

    Console

    1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

      Zur Seite „VM-Instanzen“

    2. Klicken Sie auf Instanz erstellen.

    3. Geben Sie als Name für Ihre Instanz nat-test-1 an.

    4. Legen Sie für Region den Wert us-east4 fest.

    5. Legen Sie für Zone den Wert us-east4‑c fest.

    6. Klicken Sie auf den Link Verwaltung, Sicherheit, Laufwerke, Netzwerke, einzelne Mandanten.

    7. Klicken Sie auf den Tab Netzwerk.

    8. Klicken Sie unter Netzwerkschnittstellen bei der Standardschnittstelle der VM auf Bearbeiten .

      1. Legen Sie für Netzwerk den Wert custom-network1 fest.
      2. Legen Sie für Subnetzwerk den Wert subnet-us-east-192 fest.
      3. Legen Sie Externe IP-Adresse auf None (Keine) fest.
      4. Klicken Sie auf Fertig.
    9. Klicken Sie zum Erstellen und Starten der Instanz auf Erstellen.

    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

    Sie können eine Terraform-Ressource verwenden, um eine VM-Instanz zu erstellen.

    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
      }
    }

    Schritt 3: Firewallregel erstellen, die SSH-Verbindungen zulässt

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Firewallrichtlinien auf.

      Zur Seite „Firewallrichtlinien“

    2. Klicken Sie auf Firewallregel erstellen.

    3. Geben Sie als Name allow-ssh ein.

    4. Geben Sie für Netzwerk den Wert custom-network1 ein.

    5. Legen Sie für Traffic-Richtung die Option Eingehender Traffic fest.

    6. Legen Sie für Aktion bei Übereinstimmung die Option Zulassen fest.

    7. Legen Sie für Ziele die Option Alle Instanzen im Netzwerk fest.

    8. Legen Sie für Quellfilter die Option IPv4-Bereiche fest.

    9. Legen Sie für Quell-IP-Bereiche den Wert 35.235.240.0/20 fest.

    10. Legen Sie für Protokolle und Ports die Option Angegebene Protokolle und Ports fest.

    11. Klicken Sie das Kästchen tcp an und geben Sie Port 22 ein.

    12. Klicken Sie auf Erstellen.

    gcloud

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

    Terraform

    Sie können eine Terraform-Ressource verwenden, um eine Firewallregel zu erstellen.

    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"]
    }

    Schritt 4: IAP-SSH-Berechtigungen für Ihre Testinstanz erstellen

    Verwenden Sie in einem späteren Schritt Identity-Aware Proxy (IAP), um eine Verbindung zu Ihrer Testinstanz herzustellen.

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Identity-Aware Proxy auf.

      Zur Seite „Identity-Aware Proxy“

    2. Wählen Sie den Tab SSH- und TCP-Ressourcen aus.

    3. Klicken Sie das Kästchen neben Alle Tunnelressourcen > us-east4‑c > nat-test‑1 an, um die Mitgliederberechtigungen für Ressourcen zu aktualisieren.

    4. Klicken Sie im rechten Bereich auf Mitglied hinzufügen.

    5. Um Nutzern, Gruppen oder Dienstkonten Zugriff auf die Ressourcen zu gewähren, geben Sie im Feld Neue Mitglieder ihre E‑Mail-Adressen ein.

      Wenn Sie diese Funktion lediglich testen, können Sie Ihre eigene E‑Mail-Adresse eingeben.

    6. Wählen Sie in der Drop-down-Liste Rolle die Option Cloud IAP > Nutzer IAP-gesicherter Tunnel aus, um Mitgliedern über die TCP-Weiterleitungsfunktion von Cloud IAP Zugriff auf die Ressourcen zu gewähren.

    7. Klicken Sie auf Speichern.

    gcloud

    Dieser Befehl gewährt SSH-Zugang über IAP für alle VM-Instanzen in Ihrem Projekt. Wenn Sie SSH-Zugang über IAP für eine einzelne VM gewähren möchten, verwenden Sie die Anleitung zur Google Cloud Console.

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

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Ihre Projekt-ID
    • MEMBER_INFO: eine durch Kommas getrennte Liste von type:email-Mitgliedspaaren. Beispiele:
      • Für einen einzelnen Nutzer: user:test-user@example.com
      • Für eine Gruppe: group:admins@example.com
      • Für ein Dienstkonto: serviceAccount:test123@example.domain.com

    Terraform

    Sie können eine Terraform-Ressource verwenden, um IAP-SSH-Berechtigungen für Ihre Testinstanz zu erstellen.

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

    Schritt 5: Bei nat-test-1 anmelden und kontrollieren, dass keine Internetverbindung hergestellt werden kann

    Console

    1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

      Zur Seite „VM-Instanzen“

    2. Klicken Sie für nat-test-1 in der Spalte Verbinden auf den Drop-down-Pfeil SSH und wählen Sie dann Im Browserfenster öffnen aus.

    3. Geben Sie bei der Eingabeaufforderung der VM curl example.com ein und drücken Sie die Eingabetaste.

      Sie sollten kein Ergebnis erhalten. Andernfalls haben Sie möglicherweise nat-test-1 mit einer externen IP-Adresse erstellt oder es gibt ein anderes Problem. Informationen zur Fehlerbehebung finden Sie unter VMs können unerwartet ohne Cloud NAT auf das Internet zugreifen.

      Zum Beenden des Befehls müssen Sie möglicherweise Ctrl+C eingeben.

    gcloud

    1. Fügen Sie Ihrem lokalen Host einen Compute Engine-SSH-Schlüssel hinzu:

      ssh-add ~/.ssh/google_compute_engine
      
    2. Stellen Sie eine Verbindung zu nat-test-1 her und führen Sie einen Befehl aus:

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

      Sie sollten kein Ergebnis erhalten. Andernfalls haben Sie möglicherweise nat-test-1 mit einer externen IP-Adresse erstellt oder es gibt ein anderes Problem. Informationen zur Fehlerbehebung finden Sie unter VMs können unerwartet ohne Cloud NAT auf das Internet zugreifen.

      Zum Beenden des Befehls müssen Sie möglicherweise Ctrl+C eingeben.

    Schritt 6: NAT-Konfiguration mit Cloud Router erstellen

    Sie müssen den Cloud Router in derselben Region erstellen, in der sich auch die Instanzen befinden, die Public NAT verwenden. Cloud Router wird nur zum Platzieren von NAT-Informationen auf den VMs verwendet. Es wird nicht in das eigentliche NAT-Gateway eingebunden.

    Diese Konfiguration ermöglicht allen Instanzen in der Region, Public NAT für alle primären und Alias-IP-Bereiche zu verwenden. Außerdem werden die externen IP-Adressen für das NAT-Gateway automatisch zugeordnet. Weitere Informationen finden Sie in der Dokumentation zur Google Cloud CLI.

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Cloud NAT auf.

      Zur Seite „Cloud NAT“

    2. Klicken Sie auf Erste Schritte oder NAT-Gateway erstellen.

    3. Geben Sie für Name des Gateways den Wert nat-config ein.

    4. Legen Sie für VPC-Netzwerk den Wert custom-network1 fest.

    5. Legen Sie für Region den Wert us-east4 fest.

    6. Wählen Sie für Cloud Router die Option Neuen Router erstellen aus.

      1. Geben Sie als Name nat-router ein.
      2. Klicken Sie auf Erstellen.
    7. Klicken Sie auf Erstellen.

    gcloud

    1. Erstellen Sie einen Cloud Router:

      gcloud compute routers create nat-router \
          --network custom-network1 \
          --region us-east4
    2. Fügen Sie eine Konfiguration zum Router hinzu:

      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

    Sie können eine Terraform-Ressource verwenden, um einen Cloud Router zu erstellen.

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

    Sie können zum Erstellen einer NAT-Konfiguration ein Terraform-Modul verwenden.

    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"
    }

    Schritt 7: Noch einmal versuchen, eine Verbindung zum Internet herzustellen

    Es kann bis zu drei Minuten dauern, bis die NAT-Konfiguration auf die VM übertragen wird. Warten Sie daher mindestens eine Minute, bevor Sie noch einmal versuchen, auf das Internet zuzugreifen.

    Console

    1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

      Zur Seite „VM-Instanzen“

    2. Klicken Sie für nat-test-1 in der Spalte Verbinden auf den Drop-down-Pfeil SSH und wählen Sie dann Im Browserfenster öffnen aus.

    3. Geben Sie bei der Eingabeaufforderung der VM curl example.com ein und drücken Sie die Eingabetaste.

    gcloud

    Stellen Sie eine Verbindung zu nat-test-1 her und führen Sie einen Befehl aus:

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

    Die Ausgabe sollte Folgendes enthalten:

    
    <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>
    

    Nächste Schritte