Routen verwenden

Auf dieser Seite wird beschrieben, wie Sie Routen für VPC-Netzwerke (Virtual Private Cloud) in Google Cloud erstellen und verwalten. Dabei wird davon ausgegangen, dass Sie mit den verschiedenen Typen von Google Cloud-Routen und deren Eigenschaften vertraut sind. Diese werden unter Routen beschrieben.

Jedes neue Netzwerk beinhaltet zwei Routentypen, die vom System generiert werden: eine Standardroute, die Sie entfernen oder ersetzen können, und eine Subnetzroute für jedes Subnetz. Eine Subnetzroute lässt sich nur entfernen, wenn Sie das zugehörige Subnetz selbst löschen.

Neben den vom System generierten Routen können Sie auch andere benutzerdefinierte statische Routen erstellen.

Routen für ein VPC-Netzwerk auflisten

Mit der Google Cloud CLI oder der API können Sie Details zu den folgenden Routentypen auflisten:

Weder die gcloud CLI-Befehle noch die API-Methoden zeigen die folgenden Routentypen:

Verwenden Sie die Google Cloud Console, um die vollständige Routenansicht aufzurufen. Informationen zum Auflisten und Beschreiben richtlinienbasierter Routen finden Sie unter Richtlinienbasierte Routen verwenden.

Console

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

    Zur Seite „Routes“

  2. Führen Sie auf dem Tab Aktive Routen folgende Schritte aus:

    • Wählen Sie ein VPC-Netzwerk aus.
    • Wählen Sie eine Region aus.
  3. Klicken Sie auf Ansehen.

  4. Sie können nach Eigenschaften wie Routentyp, Ziel-IP-Bereich und Typ des nächsten Hops filtern.

  5. Optional: Klicken Sie auf die Ein/Aus-Schaltfläche Unterdrückte Routen anzeigen, um unterdrückte Routen zu sehen. Wenn Sie den Grund für die Unterdrückung einer Route sehen möchten, bewegen Sie den Mauszeiger auf das Symbol in der Spalte Status.

gcloud

Verwenden Sie die gcloud compute routes-Befehle, um Details zu Routen aufzulisten und aufzurufen. Es werden Subnetz- und statische Routen aus dem lokalen VPC-Netzwerk und allen Peering-VPC-Netzwerken angezeigt. Andere Routentypen werden nicht angezeigt. Verwenden Sie die Google Cloud Console, um alle Routen aufzurufen.

So listen Sie Routen auf:

gcloud compute routes list \
    --filter="network=NETWORK_NAME" \
    --project=PROJECT_ID

So rufen Sie Details zu einer Route ab:

gcloud compute routes describe ROUTE_NAME \
    --format="flattened()" \
    --project=PROJECT_ID

Ersetzen Sie Folgendes:

  • NETWORK_NAME: der Name des VPC-Netzwerks.
  • PROJECT_ID: die ID des Projekts, das Ihr VPC-Netzwerk enthält.
  • ROUTE_NAME: der Name der Route.

API

Mit den Methoden routes.list und routes.get können Sie Routen auflisten und Details dazu aufrufen. Es werden Subnetz- und statische Routen aus dem lokalen VPC-Netzwerk und allen Peering-VPC-Netzwerken angezeigt. Andere Routentypen werden nicht angezeigt. Verwenden Sie die Google Cloud Console, um alle Routen aufzurufen.

So listen Sie Routen auf:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes?filter=network="NETWORK_URL

So rufen Sie Details zu einer Route ab:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes/ROUTE_NAME

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Projekts, das Ihr VPC-Netzwerk enthält.
  • NETWORK_URL: die URL des VPC-Netzwerks.
  • ROUTE_NAME: der Name der Route.

Anwendbare Routen für eine VM-Netzwerkschnittstelle auflisten

Mit der Google Cloud Console können Sie die für die Netzwerkschnittstelle einer VM anwendbaren Routen aufrufen. In dieser Ansicht wird die Liste der Routen eingegrenzt, die Sie für ausgehenden Traffic verwenden können.

Rufen Sie anwendbare Routen für eine bestimmte Netzwerkschnittstelle einer VM wie im Folgenden beschrieben auf.

Console

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

    Zu Seite „VM-Instanzen“

  2. Suchen Sie nach einer VM-Instanz in der Liste. Wählen Sie am Ende der Zeile im Menü Weitere Aktionen die Option Netzwerkdetails anzeigen aus.

  3. Wenn eine Instanz mehrere Netzwerkschnittstellen hat, wählen Sie im Abschnitt Details zur Netzwerkschnittstelle die Netzwerkschnittstelle aus, die Sie aufrufen möchten.

  4. Klicken Sie im Abschnitt Firewall- und Routendetails auf den Tab Routen, um alle Routen aufzulisten, die für die Netzwerkschnittstelle gelten. Diese sind nach Routennamen sortiert.

Statische Routen hinzufügen und entfernen

Sie können Ihrem VPC-Netzwerk lokal statische Routen und richtlinienbasierte Routen hinzufügen oder daraus entfernen. In diesem Abschnitt wird beschrieben, wie Sie lokale statische Routen hinzufügen und löschen. Weitere Informationen zum Hinzufügen und Entfernen von richtlinienbasierten Routen finden Sie unter Richtlinienbasierte Routen verwenden.

Subnetzrouten werden automatisch hinzugefügt und gelöscht, wenn Sie ein Subnetz hinzufügen oder löschen. Weitere Informationen zum Hinzufügen und Entfernen von Subnetzen finden Sie unter Mit Subnetzen arbeiten.

Alle Routen in einem VPC-Netzwerk, die über VPC-Netzwerk-Peering verbunden sind, müssen in dem VPC-Netzwerk bearbeitet werden, das diese Routen exportiert. Weitere Informationen finden Sie unter Optionen für den Routenaustausch.

Bevor Sie eine statische Route hinzufügen

Beachten Sie Folgendes, bevor Sie eine statische Route hinzufügen:

  • Informieren Sie sich über die verschiedenen Typen von nächsten Hops, die statische Routen verwenden können. Informationen zu den verschiedenen Typen von statischen Routen für nächste Hops, einschließlich der Unterstützung für IPv6-Ziele, finden Sie unter Nächste Hops und Features.
  • Sofern Sie keine Hybridsubnetze verwenden, darf eine statische Route keinen Zielbereich haben, der mit dem Zielbereich einer Subnetz- oder einer Peering-Subnetzroute übereinstimmt oder spezifischer als dieser ist. Weitere Informationen finden Sie unter Interaktionen mit benutzerdefinierten statischen Routen in der Routenübersicht und unter Interaktionen mit Subnetzrouten und statischen Routen in der Dokumentation zum VPC-Netzwerk-Peering.
  • Erstellen Sie bei Verwendung eines VPC-Netzwerks im automatischen Modus keine statischen Routen, deren Ziele in den Bereich 10.128.0.0/9 fallen, um Konflikte zu vermeiden. Ausführliche Informationen finden Sie unter IPv4-Bereiche im automatischen Modus.
  • Ziele für benutzerdefinierte statische Routen dürfen sich nicht mit einem internen zugewiesenen Bereich überschneiden.
  • Machen Sie sich mit Instanzen als nächste Hops vertraut, bevor Sie eine benutzerdefinierte statische Route erstellen, die eine VM als nächsten Hop verwendet. Wenn Sie eine nächste Hop-Instanz auswählen, prüft Google Cloud nur zum Zeitpunkt der Erstellung der Route, ob eine VM vorhanden ist.
  • Wenn Sie eine Route mit einem Netzwerk-Tag erstellen, kann sie nur von VMs mit diesem Tag empfangen werden. Die getaggte VMs empfangen jedoch weiterhin auch alle Routen ohne Netzwerk-Tag.

Statische Route hinzufügen

Fügen Sie eine statische Route zu einem Netzwerk hinzu. Weitere Informationen zu den verschiedenen Typen von statischen Routen als nächste Hops, einschließlich der Unterstützung für IPv6-Ziele, finden Sie unter Nächste Hops und Features.

Console

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

    Zur Seite „Routes“

  2. Klicken Sie auf den Tab Routenverwaltung.

  3. Klicken Sie auf Route erstellen.

  4. Geben Sie einen Namen und eine Beschreibung für die Route an.

  5. Wählen Sie in der Liste Netzwerk ein vorhandenes Netzwerk für die Route aus.

  6. Wählen Sie in der Liste Routentyp die Option Statische Route aus.

  7. Wählen Sie in der Liste IP-Version die erforderliche IP-Version aus:

    • Wählen Sie zum Erstellen einer statischen IPv4-Route IPv4 aus.
    • Wählen Sie zum Erstellen einer statischen IPv6-Route IPv6 aus.
  8. Geben Sie einen Ziel-IP-Bereich an. Das breitestmögliche Ziel ist 0.0.0.0/0 für IPv4 oder ::/0 für IPv6.

  9. Geben Sie eine Priorität für die Route an. Die Priorität kann zwischen 0 (der höchsten Priorität) und 65535 (niedrigste Priorität) liegen.

  10. Damit die Route nur auf ausgewählte Instanzen mit übereinstimmenden Netzwerktags angewendet werden kann, geben Sie diese Tags im Feld Instanztags an. Lassen Sie das Feld leer, damit die Route für alle Instanzen im Netzwerk gilt.

  11. Wählen Sie einen nächsten Hop für die Route aus:

    • Standard-Internetgateway: Stellt Pakete an das Internet sowie an Google APIs und Google-Dienste bereit.
    • Instanz angeben: Stellt Pakete an die Netzwerkschnittstelle einer VM-Instanz bereit. Geben Sie die VM-Instanz nach Name und Zone an. Wenn das Routenziel eine IPv6-Adresse ist, muss die VM-Instanz Dual-Stack sein.
    • IP-Adresse einer Instanz angeben: Geben Sie die IP-Adresse einer vorhandenen Instanz im VPC-Netzwerk an. Für statische IPv6-Routen (Vorabversion) muss die Instanz Dual-Stack sein. Wichtige Einschränkungen für gültige IP-Adressen für den nächsten Hop finden Sie unter Nächste Hops für statische Routen.
    • VPN-Tunnel angeben: Pakete werden mit statischem Routing an einen vorhandenen klassischen VPN-Tunnel gesendet.
    • Weiterleitungsregel eines internen Passthrough-Network Load Balancers angeben: Stellt Pakete an einen internen Passthrough-Network Load Balancer bereit, der durch seinen internen Namen und die Region der Weiterleitungsregel angegeben wird. Die Weiterleitungsregel kann eine IPv4- oder IPv6-Adresse (Vorabversion) haben. Die IP-Version der angegebenen Weiterleitungsregel muss mit der IP-Version der von Ihnen erstellten statischen Route übereinstimmen.
  12. Klicken Sie auf Erstellen.

gcloud

Verwenden Sie folgenden gcloud CLI-Befehl, um eine neue benutzerdefinierte statische Route zu erstellen:

gcloud compute routes create ROUTE_NAME \
    --network=NETWORK \
    --destination-range=DESTINATION_RANGE \
    --priority=PRIORITY \
    NEXT_HOP_SPECIFICATION

Ersetzen Sie Folgendes:

  • ROUTE_NAME: der Name der Route
  • NETWORK: der Name des VPC-Netzwerks, das die Route enthält
  • DESTINATION_RANGE: die IPv4- oder IPv6-Zieladressen, auf die diese Route angewendet wird Das breitestmögliche Ziel ist 0.0.0.0/0 für IPv4 oder ::/0 für IPv6.
  • PRIORITY: die Priorität der Route, die von 0 (die höchste Priorität) bis 65535 (die niedrigste Priorität) lauten kann
  • NEXT_HOP_SPECIFICATION: der nächste Hop für die statische Route. Verwenden Sie einen der folgenden Parameter oder eine Kombination aus Parametern:

    • --next-hop-gateway=default-internet-gateway: Pakete an das Internet sowie an Google APIs und Google-Dienste senden.
    • --next-hop-instance=INSTANCE_NAME und --next-hop-instance-zone=ZONE: Pakete an die Netzwerkschnittstelle einer vorhandenen VM-Instanz senden. Geben Sie die VM-Instanz nach Name und Zone an. Wenn das Routenziel eine IPv6-Adresse ist, muss die VM-Instanz Dual-Stack sein.
    • --next-hop-address=ADDRESS: Geben Sie eine IP-Adresse einer vorhandenen Instanz im VPC-Netzwerk an. Für statische IPv6-Routen (Vorabversion) muss die Instanz Dual-Stack sein. Wichtige Einschränkungen für gültige IP-Adressen für den nächsten Hop finden Sie unter Nächste Hops und Funktionen.
    • --next-hop-vpn-tunnel=VPN_TUNNEL_NAME und --next-hop-vpn-tunnel-region=REGION Pakete an einen vorhandenen Klassischen VPN-Tunnel unter Verwendung von statischem Routing senden.
    • --next-hop-ilb=FORWARDING_RULE und --next-hop-ilb-region=REGION: Pakete an einen internen Passthrough-Network Load Balancer senden. Geben Sie die Weiterleitungsregel anhand ihres Namens (oder ihrer IPv4- oder IPv6-Adresse (Vorabversion)) und ihrer Region an. Die IP-Version der von Ihnen angegebenen Weiterleitungsregel muss mit der IP-Version der von Ihnen erstellten statischen Route übereinstimmen.

    Wenn die benutzerdefinierte statische Route nur für VMs gelten soll, die nach Netzwerk-Tag ausgewählt werden, fügen Sie das Flag --tags hinzu und geben Sie ein oder mehrere Netzwerk-Tags an. Weitere Informationen zum Zusammenspiel von Netzwerktags und benutzerdefinierten statischen Routen finden Sie unter Anwendbare Routen in der Routenübersicht. Sie können Tags bei jeder benutzerdefinierten statischen Route verwenden.

Weitere Informationen zur Syntax der gCloud CLI finden Sie in der SDK-Dokumentation.

API

Erstellen Sie eine neue benutzerdefinierte statische Route.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes
{
  "name": "ROUTE_NAME",
  "network": "NETWORK_NAME",
  "destRange": "DESTINATION_RANGE",
  "priority": PRIORITY,
  "NEXT_HOP_SPECIFICATION"
}

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Projekts, in dem Ihre Route erstellt wird.
  • ROUTE_NAME: der Name der Route
  • NETWORK: der Name des VPC-Netzwerks, das die Route enthält.
  • DESTINATION_RANGE: der IPv4- oder IPv6-Zieladressbereich, für den diese Route gilt. Das breitestmögliche Ziel ist 0.0.0.0/0 für IPv4 oder ::/0 für IPv6.
  • PRIORITY: die Priorität der Route, die von 0 (die höchste Priorität) bis 65535 (die niedrigste Priorität) lauten kann
  • NEXT_HOP_SPECIFICATION: der nächste Hop für die statische Route. Einen der folgenden Parameter oder eine Kombination aus Parametern verwenden:
    • nextHopGateway: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/gateways/default-internet-gateway: sendet Pakete an das Internet sowie an Google APIs und Google-Dienste
    • nextHopInstance: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME: sendet Pakete an die Netzwerkschnittstelle einer VM-Instanz. Geben Sie die VM-Instanz nach Name und Zone an. Wenn das Routenziel eine IPv6-Adresse ist, muss die VM-Instanz Dual-Stack sein.
    • nextHopIp: ADDRESS: Geben Sie eine IP-Adresse einer vorhandenen Instanz im VPC-Netzwerk an. Bei statischen IPv6-Routen (Vorabversion) muss die Instanz Dual-Stack sein. Wichtige Einschränkungen für gültige IP-Adressen für den nächsten Hop finden Sie unter Nächste Hops und Funktionen.
    • nextHopVpnTunnel: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/vpnTunnels/VPN_TUNNEL_NAME: sendet Pakete an einen vorhandenen Klassischen VPN-Tunnel mit statischem Routing.
    • nextHopIlb: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE: sendet Pakete an einen internen Passthrough-Network Load Balancer. Geben Sie die Weiterleitungsregel anhand ihres Namens (oder ihrer IPv4- oder IPv6-Adresse (Vorabversion)) und ihrer Region an. Die IP-Version der von Ihnen angegebenen Weiterleitungsregel muss mit der IP-Version der von Ihnen erstellten statischen Route übereinstimmen.

Wenn die benutzerdefinierte statische Route nur für VMs gelten soll, die nach Netzwerk-Tag ausgewählt werden, fügen Sie das Feld tags hinzu und geben Sie ein oder mehrere Netzwerk-Tags an. Weitere Informationen zum Zusammenspiel von Netzwerktags und benutzerdefinierten statischen Routen finden Sie unter Anwendbare Routen in der Routenübersicht. Sie können Tags bei jeder benutzerdefinierten statischen Route verwenden.

Weitere Informationen finden Sie in der Methode routes.insert.

Terraform

Sie können eine statische Route mit einem Terraform-Modul erstellen.

Mit dieser statischen Route wird eine Standardroute zum Internet erstellt.

module "google_compute_route" {
  source       = "terraform-google-modules/network/google//modules/routes"
  version      = "~> 9.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "default"

  routes = [
    {
      name              = "egress-internet"
      description       = "route through IGW to access internet"
      destination_range = "0.0.0.0/0"
      tags              = "egress-inet"
      next_hop_internet = "true"
    }
  ]
}

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

Go

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/protobuf/proto"
)

// createRoute creates a route with given name inside given project.
func createRoute(w io.Writer, projectID, name string) error {
	// projectID := "your_project_id"
	// name := "testname"

	ctx := context.Background()
	client, err := compute.NewRoutesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewRoutesRESTClient: %w", err)
	}
	defer client.Close()

	route := &computepb.Route{
		Name:           proto.String(name),
		Network:        proto.String("global/networks/default"),
		DestRange:      proto.String("0.0.0.0/0"),
		NextHopGateway: proto.String("global/gateways/default-internet-gateway"),
	}

	req := &computepb.InsertRouteRequest{
		Project:       projectID,
		RouteResource: route,
	}
	op, err := client.Insert(ctx, req)

	if err != nil {
		return fmt.Errorf("unable to insert a route: %w", err)
	}

	if err := op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Route created\n")

	return nil
}

Java


import com.google.cloud.compute.v1.InsertRouteRequest;
import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.Route;
import com.google.cloud.compute.v1.RoutesClient;
import java.io.IOException;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateRoute {

  public static void main(String[] args)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Cloud project you want to use.
    String projectId = "your-project-id";
    // Route name you want to use.
    String routeName = "your-route-name";
    createRoute(projectId, routeName);
  }

  // Create route for a project.
  public static Operation.Status createRoute(String projectId, String routeName)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (RoutesClient routesClient = RoutesClient.create()) {
      String nextHopGateway =
              String.format("projects/%s/global/gateways/default-internet-gateway", projectId);

      Route route = Route.newBuilder()
              .setName(routeName)
              .setDestRange("10.0.0.0/16")
              .setNetwork("global/networks/default")
              .setNextHopGateway(nextHopGateway)
              .build();

      InsertRouteRequest request = InsertRouteRequest.newBuilder()
              .setProject(projectId)
              .setRequestId(UUID.randomUUID().toString())
              .setRouteResource(route)
              .build();

      return routesClient.insertCallable().futureCall(request)
              .get(30, TimeUnit.SECONDS).getStatus();
    }
  }
}

Python

from __future__ import annotations

import sys
from typing import Any

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def create_route(
    project_id: str,
    network: str,
    route_name: str,
    destination_range: str,
    *,
    next_hop_gateway: str | None = None,
    next_hop_ip: str | None = None,
    next_hop_instance: str | None = None,
    next_hop_vpn_tunnel: str | None = None,
    next_hop_ilb: str | None = None,
) -> compute_v1.Route:
    """
    Create a new route in selected network by providing a destination and next hop name.

    Note: The set of {next_hop_gateway, next_hop_ip, next_hop_instance, next_hop_vpn_tunnel,
        next_hop_ilb} is exclusive, you and only specify one of those parameters.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        network: name of the network the route will be created in. Available name formats:
            * https://www.googleapis.com/compute/v1/projects/{project_id}/global/networks/{network}
            * projects/{project_id}/global/networks/{network}
            * global/networks/{network}
        route_name: name of the new route.
        destination_range: range of destination IPs this route should be applied to. E.g. 10.0.0.0/16.
        next_hop_gateway: name of the gateway the traffic should be directed to.
        next_hop_ip: IP address the traffic should be directed to.
        next_hop_instance: name of the instance the traffic should be directed to. Name format:
            "projects/{project}/zones/{zone}/instances/{instance_name}"
        next_hop_vpn_tunnel: name of the VPN tunnel the traffic should be directed to. Name format:
            "projects/{project}/regions/{region}/vpnTunnels/{vpn_tunnel_name}"
        next_hop_ilb: name of a forwarding rule of the Internal Load Balancer the traffic
            should be directed to. Name format:
            "projects/{project}/regions/{region}/forwardingRules/{forwarding_rule_region}"

    Returns:
        A new compute_v1.Route object.
    """
    excl_args = {
        next_hop_instance,
        next_hop_ilb,
        next_hop_vpn_tunnel,
        next_hop_gateway,
        next_hop_ip,
    }
    args_set = sum(1 if arg is not None else 0 for arg in excl_args)

    if args_set != 1:
        raise RuntimeError("You must specify exactly one next_hop_* parameter.")

    route = compute_v1.Route()
    route.name = route_name
    route.network = network
    route.dest_range = destination_range

    if next_hop_gateway:
        route.next_hop_gateway = next_hop_gateway
    elif next_hop_ip:
        route.next_hop_ip = next_hop_ip
    elif next_hop_instance:
        route.next_hop_instance = next_hop_instance
    elif next_hop_vpn_tunnel:
        route.next_hop_vpn_tunnel = next_hop_vpn_tunnel
    elif next_hop_ilb:
        route.next_hop_ilb = next_hop_ilb

    route_client = compute_v1.RoutesClient()
    operation = route_client.insert(project=project_id, route_resource=route)

    wait_for_extended_operation(operation, "route creation")

    return route_client.get(project=project_id, route=route_name)

IPv4-Standardroute hinzufügen

Die statische IPv4-Standardroute (0.0.0.0/0) mit dem Wert default-internet-gateway für next-hop-gateway wird automatisch für jedes VPC-Netzwerk konfiguriert. Führen Sie die folgenden Schritte aus, um diese Route bei Bedarf neu zu erstellen.

Console

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

    Zur Seite „Routes“

  2. Klicken Sie auf den Tab Routenverwaltung.

  3. Klicken Sie auf Route erstellen.

  4. Geben Sie einen Namen und eine Beschreibung für die Route an.

  5. Wählen Sie ein vorhandenes Netzwerk für die Route aus.

  6. Geben Sie als Ziel-IP-Bereich 0.0.0.0/0 ein.

  7. Geben Sie eine Priorität für die Route an. Die Priorität kann zwischen 0 (der höchsten Priorität) und 65535 (niedrigste Priorität) liegen.

  8. Wählen Sie für Nächster Hop die Option Standard-Internetgateway aus.

  9. Klicken Sie auf Erstellen.

gcloud

Erstellen Sie die IPv4-Standardroute für ein Netzwerk neu.

gcloud compute routes create ROUTE_NAME \
    --destination-range=0.0.0.0/0 \
    --network=NETWORK \
    --next-hop-gateway=default-internet-gateway

Ersetzen Sie Folgendes:

  • ROUTE_NAME: ein Name für die Route
  • NETWORK: der Name des VPC-Netzwerks, das die Route enthält

API

Erstellen Sie die IPv4-Standardroute für ein Netzwerk neu.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes
{
  "destRange": "0.0.0.0/0",
  "name": "ROUTE_NAME",
  "network": "NETWORK_NAME",
  "nextHopGateway": "projects/PROJECT_ID/global/gateways/default-internet-gateway"
}

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Projekts, in dem Ihre Route erstellt wird.
  • ROUTE_NAME: ein Name für die Route
  • NETWORK_NAME: der Name des VPC-Netzwerks, das die Route enthält

IPv6-Standardroute hinzufügen

Die statische IPv6-Standardroute (::/0) bei der next-hop-gateway festgelegt auf default-internet-gateway ist, wird automatisch für das VPC-Netzwerk konfiguriert, wenn Sie ein Dual-Stack-Subnetz mit dem externen IP-Zugriffstyp erstellen. Sie können die Route löschen, um den gesamten IPv6-Traffic von VMs zum Internet zu blockieren. Sie können die Route bei Bedarf neu erstellen.

Console

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

    Zur Seite „Routes“

  2. Klicken Sie auf den Tab Routenverwaltung.

  3. Klicken Sie auf Route erstellen.

  4. Geben Sie einen Namen und eine Beschreibung für die Route an.

  5. Wählen Sie ein vorhandenes Netzwerk für die Route aus.

  6. Geben Sie als Ziel-IP-Bereich ::/0 ein.

  7. Geben Sie eine Priorität für die Route an. Die Priorität kann zwischen 0 (der höchsten Priorität) und 65535 (niedrigste Priorität) liegen.

  8. Wählen Sie für Nächster Hop die Option Standard-Internetgateway aus.

  9. Klicken Sie auf Erstellen.

gcloud

Erstellen Sie die IPv6-Standardroute für ein Netzwerk neu.

gcloud compute routes create ROUTE_NAME \
    --destination-range=::/0 \
    --network=NETWORK \
    --next-hop-gateway=default-internet-gateway

Dabei gilt:

  • ROUTE_NAME: ein Name für die Route.
  • NETWORK: der Name des VPC-Netzwerks, das die Route enthält.

API

Erstellen Sie die IPv6-Standardroute für ein Netzwerk neu.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes
{
  "destRange": "::/0",
  "name": "ROUTE_NAME",
  "network": "NETWORK_NAME",
  "nextHopGateway": "projects/PROJECT_ID/global/gateways/default-internet-gateway"
}

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Projekts, in dem Ihre Route erstellt wird.
  • ROUTE_NAME: ein Name für die Route
  • NETWORK_NAME: der Name des VPC-Netzwerks, das die Route enthält

Statische Route ändern

Sie können eine statische Route nach dem Erstellen nicht mehr bearbeiten oder aktualisieren. Zum Ändern einer statischen Route müssen Sie sie löschen und eine Ersatzroute erstellen.

Statische Route löschen

So löschen Sie eine Route:

Console

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

    Zur Seite „Routes“

  2. Klicken Sie auf den Tab Routenverwaltung.

  3. Klicken Sie auf das Kästchen neben der Regel, die Sie löschen möchten.

  4. Klicken Sie auf Löschen.

  5. Klicken Sie zur Bestätigung noch einmal auf Löschen.

gcloud

Verwenden Sie folgenden gcloud CLI-Befehl, um eine benutzerdefinierte statische Route zu löschen:

gcloud compute routes delete ROUTE_NAME

Ersetzen Sie ROUTE_NAME durch den Namen der Route, die Sie löschen möchten.

API

Verwenden Sie die Methode routes.delete, um eine benutzerdefinierte statische Route aus Ihrem VPC-Netzwerk zu entfernen:

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes/ROUTE_NAME

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Projekts, in dem sich Ihre Route befindet.
  • ROUTE_NAME: der Name der zu löschenden Route.

Go

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
)

// deleteRoute deletes a route by name in given project.
func deleteRoute(w io.Writer, projectID, name string) error {
	// projectID := "your_project_id"
	// name := "testname"

	ctx := context.Background()
	client, err := compute.NewRoutesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewRoutesRESTClient: %w", err)
	}
	defer client.Close()

	req := &computepb.DeleteRouteRequest{
		Project: projectID,
		Route:   name,
	}
	op, err := client.Delete(ctx, req)

	if err != nil {
		return fmt.Errorf("unable to delete a route: %w", err)
	}

	if err := op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Route deleted\n")

	return nil
}

Java


import com.google.cloud.compute.v1.DeleteRouteRequest;
import com.google.cloud.compute.v1.RoutesClient;
import java.io.IOException;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class DeleteRoute {

  public static void main(String[] args)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Cloud project you want to use.
    String projectId = "your-project-id";
    // Route name you want to delete.
    String routeName = "your-route-name";

    deleteRoute(projectId, routeName);
  }

  // Deletes a route from a project.
  public static void deleteRoute(String projectId, String routeName)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (RoutesClient routesClient = RoutesClient.create()) {
      DeleteRouteRequest request = DeleteRouteRequest.newBuilder()
              .setProject(projectId)
              .setRoute(routeName)
              .setRequestId(UUID.randomUUID().toString())
              .build();
      routesClient.deleteCallable().futureCall(request).get(30, TimeUnit.SECONDS);
    }
  }
}

Python

from __future__ import annotations

import sys
from typing import Any

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def delete_route(project_id: str, route_name: str) -> None:
    """
    Delete a route in project.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        route_name: name of the route to delete.
    """

    route_client = compute_v1.RoutesClient()
    operation = route_client.delete(project=project_id, route=route_name)

    wait_for_extended_operation(operation, "route deletion")

Weitergabe von Routenänderungen

Wenn Sie eine statische Route hinzufügen oder löschen, wird die Route an alle Regionen und VM-Instanzen in Ihrem VPC-Netzwerk weitergegeben. Der Status PENDING oder RUNNING für den Routenvorgang zeigt an, dass die Routenänderung in die Warteschlange gestellt wurde.

Nach dem Einreihen in die Warteschlange ändert sich der Status des Routenvorgangs in DONE. Es kann weitere 30 Sekunden dauern, bis alle VM-Instanzen in Ihrem VPC-Netzwerk und Ihren VPC-Netzwerk-Peering-Netzwerken eine neue Route verwenden oder eine alte Route nicht mehr verwenden.

Wenn Sie mehrere statische Routen gleichzeitig hinzufügen oder entfernen, können die Änderungen in beliebiger Reihenfolge angewendet werden. Es gibt keine Garantie dafür, dass Routenänderungen in der Reihenfolge verarbeitet werden, in der sie gesendet wurden. Die Änderungen können auf verschiedenen Instanzen zu verschiedenen Zeiten erkannt werden.

Wenn Sie Routenänderungen vornehmen müssen, die voneinander abhängig sind, müssen Sie diese Änderungen nacheinander vornehmen, indem Sie nachfolgende Änderungen nur dann ausführen, wenn der Status der vorherigen Änderung DONE lautet und weitere 30 Sekunden vergangen sind.

IP-Weiterleitung für Instanzen aktivieren

Die IP-Weiterleitung ist standardmäßig deaktiviert und Google Cloud führt eine strenge Quelladressprüfung durch. Abhängig von der effektiven Konfiguration der Firewall für ausgehenden Traffic kann eine VM Pakete mit den folgenden Quellen ausgeben:

  • Die primäre interne IPv4-Adresse der Netzwerkschnittstelle einer Instanz (NIC).
  • Jeder konfigurierte Alias-IP-Bereich auf der NIC einer Instanz.
  • Wenn für das Subnetz ein IPv6-Adressbereich konfiguriert ist und die Instanz Dual-Stack ist, sind alle IPv6-Adressen, die der NIC zugewiesen sind.
  • Eine interne oder externe IP-Adresse, die mit einer Weiterleitungsregel verbunden ist, für Passthrough-Load-Balancing oder Protokollweiterleitung, wenn die Instanz ein Backend für einen internen Passthrough-Network Load Balancer oder einen externen Passthrough-Network Load Balancer ist oder von einer Zielinstanz referenziert wird.

Damit eine VM als nächster Hop für eine Route verwendet werden kann, muss die VM Pakete weiterleiten, deren Quellen mit keiner der IP-Adressen und keinem der IP-Bereiche in der vorherigen Liste übereinstimmen. Um Pakete mit beliebigen Quelladressen weiterzuleiten, müssen Sie die IP-Weiterleitung aktivieren:

  • Wenn Sie eine VM erstellen oder aktualisieren, aktivieren Sie die IP-Weiterleitung. Folgen Sie dazu der Anleitung in diesem Abschnitt. Die Aktivierung der IP-Weiterleitung gilt für alle NICs auf der VM.
  • Zusätzlich zu den Schritten in diesem Abschnitt müssen Sie die IP-Weiterleitung innerhalb des VM-Gastbetriebssystems aktivieren. Legen Sie dazu unter Linux den Wert eines oder beide der folgenden Kernelparameter auf 1 fest: net.ipv4.ip_forward (für IPv4) oder net.ipv6.conf.all.forwarding (für IPv6).

Führen Sie die folgenden Schritte aus, um die IP-Weiterleitung beim Erstellen einer VM zu aktivieren.

Console

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

    Zu Seite „VM-Instanzen“

  2. Klicken Sie auf Instanz erstellen.

  3. Maximieren Sie im Bereich Erweiterte Optionen die Option Netzwerk, Laufwerke, Sicherheit, Verwaltung, einzelne Mandanten.

  4. Maximieren Sie den Bereich Netzwerk.

  5. Klicken Sie im Bereich IP-Weiterleitung das Kästchen Aktivieren an.

gcloud

Fügen Sie beim Erstellen einer Instanz das Flag --can-ip-forward an den Befehl an:

gcloud compute instances create ... --can-ip-forward

API

Verwenden Sie beim Erstellen einer Instanz das Feld canIpForward, um die IP-Weiterleitung zu aktivieren:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
  "canIpForward": true,
  ...other fields
}

Ersetzen Sie Folgendes:

  • PROJECT_ID ist die ID des Projekts, das die Instanz enthält.
  • ZONE: die Google Cloud-Zone, die die Instanz enthält

Weitere Informationen finden Sie im Artikel zur Methode instances.insert.

Terraform

Sie können die Terraform-Ressource verwenden, um eine VM-Instanz mit aktivierter IP-Weiterleitung zu erstellen.

In diesem Beispiel sind den Terraform-Argumenten Werte zugewiesen, die Sie ändern können.

resource "google_compute_instance" "default" {
  project      = var.project_id # Replace this with your project ID in quotes
  zone         = "southamerica-east1-b"
  name         = "instance-next-hop"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    network = "default"
  }
  can_ip_forward = true
}

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

Nachdem Sie die IP-Weiterleitung aktiviert haben, fahren Sie mit dem VM-Erstellungsprozess fort.

Wenn Sie die IP-Weiterleitung auf einer vorhandenen VM aktivieren möchten, aktualisieren Sie das Instanzattribut canIpForward.

Nächste Schritte