Cloud NAT-Regeln

Mit dem Feature "NAT-Regeln" können Sie Zugriffsregeln erstellen, die festlegen, wie Cloud NAT für die Verbindung mit dem Internet verwendet wird. NAT-Regeln unterstützen Quell-NAT basierend auf der Zieladresse.

Wenn Sie ein NAT-Gateway ohne NAT-Regeln konfigurieren, verwenden die VMs, die dieses NAT-Gateway verwenden, denselben NAT-IP-Adressbereich, um alle Internetadressen zu erreichen. Wenn Sie mehr Kontrolle über Pakete benötigen, die Cloud NAT durchlaufen, können Sie NAT-Regeln hinzufügen. Eine NAT-Regel definiert eine Abgleichsbedingung und eine entsprechende Aktion. Nachdem Sie NAT-Regeln angegeben haben, wird jedes Paket mit jeder NAT-Regel abgeglichen. Wenn ein Paket die in einer Regel festgelegte Bedingung erfüllt, wird die entsprechende Aktion ausgeführt.

Beispielkonfiguration für Cloud NAT-Regel

Das folgende Beispiel zeigt, wie Sie NAT-Regeln verwenden können, wenn das Ziel den Zugriff nur von wenigen IP-Adressen aus zulässt. Wir empfehlen, dass der Traffic zu solchen Zielen von Ihren Google Cloud-VMs in privaten Subnetzen Quell-NAT-Übersetzungen nur mit den zulässigen IP-Adressen durchführt. Ebenso empfehlen wir, diese IP-Adressen nicht für andere Ziele zu verwenden. Beachten Sie folgende Anforderungen für VMs im Subnetz 10.10.10.0/24 im VPC-Netzwerk test:

  • Die VMs müssen die NAT-IP-Adresse 203.0.113.20 verwenden, um Traffic an das Ziel 198.51.100.20/30 zu senden.
  • Die VMs müssen die NAT-IP-Adresse 203.0.113.30 verwenden, um Traffic an das Ziel 198.51.100.30 oder 198.51.100.31 zu senden.
  • Die VMs müssen die NAT-IP-Adresse 203.0.113.40 verwenden, um Traffic an ein anderes Internetziel zu senden.

Für alle anderen Subnetze im VPC-Netzwerk test müssen VMs die NAT-IP-Adresse 203.0.113.10 verwenden, um Traffic an ein beliebiges Ziel zu senden.

Grafik: Cloud NAT-Konfiguration mit zwei Cloud NAT-Gateways (zum Vergrößern klicken)
Cloud NAT-Konfiguration mit zwei Cloud NAT-Gateways (zum Vergrößern klicken)

Sie können für dieses Beispiel NAT-Regeln verwenden, benötigen jedoch zwei NAT-Gateways, da das Subnetz 10.10.10.0/24 NAT-Regeln hat, die sich von den anderen Subnetzen unterscheiden. Gehen Sie so vor, um diese Konfiguration zu erstellen:

  1. Erstellen Sie NAT-Gateway (NAT-GW 1) für das Subnetz S1 mit NAT-IP-Adresse 203.0.113.40 und fügen Sie die folgenden Regeln hinzu:
    1. NAT-Regel 1 in NAT-GW 1: Wenn das Ziel 198.51.100.20/30 ist, verwenden Sie Quell-NAT mit 203.0.113.20.
    2. NAT-Regel 2 in NAT GW 1: Wenn das Ziel 198.51.100.30 oder 198.51.100.31 ist, verwenden Sie Quell-NAT mit 203.0.113.30.
  2. Erstellen Sie NAT-Gateway 2 (NAT GW 2) für alle anderen Subnetze (alle Subnetze außer S1 auflisten) und weisen Sie die NAT-IP-Adresse 203.0.113.10 zu. In diesem Schritt sind keine NAT-Regeln erforderlich.

Spezifikationen für NAT-Regeln

Beachten Sie die folgenden Spezifikationen, bevor Sie mit NAT-Regeln arbeiten:

  • Eine Regelnummer identifiziert eine NAT-Regel eindeutig. Zwei Regeln können nicht dieselbe Regelnummer haben.
  • Jede NAT-Konfiguration hat eine Standardregel:
    • Die Standardregel wird angewendet, wenn in derselben NAT-Konfiguration keine andere NAT-Regel übereinstimmt.
    • Die Regelnummer der Standardregel ist 65001.
  • Cloud NAT-Regeln werden nur unterstützt, wenn der Wert der Option für die NAT-IP-Zuweisung MANUAL_ONLY ist.
  • Ziel-IP-CIDRs in der Übereinstimmungsbedingung dürfen sich nicht über NAT-Regeln überschneiden. Es darf höchstens eine Regel geben, die mit einem bestimmten Paket übereinstimmen kann.
  • NAT-IP-Adressen in NAT-Regeln dürfen sich nicht überschneiden.
  • Eine Regel muss entweder eine nicht leere Active- oder eine nicht leere Drain-IP-Adresse haben. Wenn die Regel eine leere Active-IP-Adresse hat, werden neue Verbindungen, die der NAT-Regel entsprechen, beendet.
  • NAT-Regeln können einem NAT-Gateway nicht hinzugefügt werden, für das die endpunktunabhängige Zuordnung aktiviert ist. Sie können die endpunktunabhängige Zuordnung nicht für ein NAT-Gateway aktivieren, das NAT-Regeln enthält.

Darüber hinaus erhalten alle VMs Ports, die ihnen aus dem Wert für die Mindestanzahl an Ports pro VM für jede Cloud NAT-Regel zugewiesen wurden. Wenn die einer VM zugewiesenen Ports aus einer NAT-Regel erschöpft sind, werden neue Verbindungen beendet, die der NAT-Regel entsprechen.

Beispiel: Sie konfigurieren 4.096 Ports pro VM mit 16 VMs und 2 NAT-Regeln (rule1 mit 1 IP-Adresse und rule2 mit 2 IP-Adressen) neben der Standardregel (default) mit 2 IP-Adressen. Alle 16 VMs erhalten 4.096 Ports in jedem NAT-Regelbundle. In diesem Beispiel treten in default oder rule2 keine Probleme für alle ihre VMs auf, aber rule1 kann keine Ports für alle zugehörigen VMs zuweisen. Daher kann Traffic von VMs, die rule1 durchlaufen müssen, verworfen werden und es kann Anzeichen dafür geben, dass es keine Ressourcen mehr gibt, da der Traffic nicht die Standardregel verwendet.

Regelausdruckssprache

NAT-Regeln werden in der Common Expression Language-Syntax geschrieben.

Ein Ausdruck erfordert zwei Komponenten:

  • Attribute, die in Regelausdrücken geprüft werden können.
  • Vorgänge, die für die Attribute als Teil eines Ausdrucks ausgeführt werden können.

Der folgende Ausdruck verwendet beispielsweise die Attribute destination.ip und 198.51.100.0/24 im Vorgang inIpRange(). In diesem Fall gibt der Ausdruck "true" zurück, wenn sich destination.ip im IP-Adressbereich 198.51.100.0/24 befindet.

inIpRange(destination.ip, '198.51.100.0/24')

NAT-Regeln unterstützen nur die folgenden Attribute und Vorgänge:

Attribute

Attribute stellen Informationen aus einem ausgehenden Paket dar, z. B. die Ziel-IP-Adresse.

Attributname Beschreibung
destination.ip Ziel-IP-Adresse des Pakets

Vorgänge

In der folgenden Referenz werden die Operatoren beschrieben, die Sie mit Attributen zum Definieren von Regelausdrücken verwenden können.

Aktion Beschreibung
inIpRange(string, string) -> bool inIpRange(X, Y) gibt "true" zurück, wenn der IP-CIDR-Bereich Y die IP-Adresse X enthält.
|| Logischer Operator. x || yy wird als "true" zurückgegeben, wenn x oder y wahr ist.
== Gleichheitsoperator. x == y gibt "true" zurück, wenn x gleich y ist.

Beispielausdrücke

Passen Sie den Traffic mit der Ziel-IP-Adresse 198.51.100.20 an.

"destination.ip == '198.51.100.20'"

Ordnen Sie Traffic der Ziel-IP-Adresse 198.51.100.10/30 oder 198.51.100.20 zu.

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

Nächste Schritte