Öffentliche NAT mit Compute Engine verwenden

Auf dieser Seite wird ein öffentliches NAT-Gateway veranschaulicht, das Dienste zur Netzwerkadressübersetzung für eine Compute Engine-VM-Instanz bereitstellt. Vorher lesen Sie zuerst die Übersicht über öffentliche NAT.

Vorbereitung

Führen Sie die folgenden Schritte aus, bevor Sie eine öffentliche 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.

Google Cloud einrichten

Zuvor sollten Sie jedoch die folgenden Elemente in Google Cloud einrichten.

  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. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

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

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init

Beispiel

Im Folgenden finden Sie ein End-to-End-Beispiel, das ein öffentliches NAT-Gateway und eine Compute Engine-VM zeigt, die das öffentliche 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 Namen custom-network1 ein.

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

  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 einen IP-Adressbereich von 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 ordnen 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 (Virtual Private Cloud) zu erstellen und Subnetz.

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 9.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, Netzwerk, 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 der Firewall-Richtlinien auf.

    Zur Seite „Firewallrichtlinien“

  2. Klicken Sie auf Firewallregel erstellen.

  3. Geben Sie als Namen allow-ssh ein.

  4. Geben Sie als Netzwerk den Wert custom-network1 ein.

  5. Legen Sie für Traffic-Richtung den Wert Ingress fest.

  6. Legen Sie für Aktion bei Übereinstimmung den Wert Zulassen fest.

  7. Legen Sie für Ziele den Wert Alle Instanzen im Netzwerk fest.

  8. Legen Sie unter 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 den Wert 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 angeben

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. Klicken Sie auf den Tab SSH- und TCP-Ressourcen.

  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 Anweisungen der Google Cloud Console.

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

Dabei gilt:

  • 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 bestätigen, dass keine Verbindung zum Internet 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. Sie haben 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. Sie haben 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 wie die Instanzen erstellen die öffentliche NAT verwenden. Cloud Router wird nur zum Platzieren von NAT verwendet auf die VMs übertragen. Es wird nicht in das eigentliche NAT-Gateway eingebunden.

Mit dieser Konfiguration können alle Instanzen in der Region öffentliche NAT verwenden für alle primären und Alias-IP-Bereiche. Außerdem werden die externen IP-Adressen für das NAT-Gateway automatisch zugeordnet. Weitere Informationen finden Sie in der Dokumentation zum Google Cloud CLI.

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud NAT.

    Zur Seite „Cloud NAT“

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

  3. Geben Sie als Name des Gateways 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 Namen 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 folgenden Inhalt 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