Internes DNS

Virtual Private Cloud-Netzwerke in Google Cloud haben einen internen DNS-Dienst, über den Instanzen im selben Netzwerk mithilfe interner DNS-Namen aufeinander zugreifen können. Interne A-Einträge für VM-Instanzen werden in einer DNS-Zone für .internal erstellt. PTR-Einträge für VM-Instanzen werden in entsprechenden Reverse-Zonen erstellt. Wenn Sie Instanzen verwalten, werden diese DNS-Einträge automatisch von Google Cloud erstellt, aktualisiert und entfernt.

Wenn Sie beispielsweise eine Instanz löschen, entfernt Google Cloud automatisch die zugehörigen A- und PTR-Einträge für den DNS-Namen .internal. Wenn Sie dann eine Instanz mit demselben Namen anlegen, erstellt Google Cloud einen Eintrag für den Ersatz.

Informationen zum internen DNS

Interne DNS-Namen haben folgende Spezifikationen:

  • Der interne DNS-Name einer VM-Instanz wird nur in die primäre interne IP-Adresse aufgelöst. Interne DNS-Namen können nicht für die Verbindung mit den externen IP-Adressen einer Instanz verwendet werden.

  • Interne DNS-Namen können nicht für die Auflösung in sekundäre Alias-IPs konfiguriert werden.

  • Interne DNS-Namen können nur von anderen VMs aufgelöst werden, die sich in demselben Projekt befinden und dieselbe VPC oder ein Legacy-Netzwerk verwenden. Es ist nicht möglich, internes DNS für den Kontakt mit Instanzen in anderen VPC-Netzwerken zu verwenden, auch wenn sie sich im selben Projekt befinden.

PTR-Einträge und internes DNS

Der interne DNS-Dienst von Google Cloud erstellt automatisch PTR-Einträge für VMs in den folgenden Reverse-Zonen:

  • 10.in-addr.arpa.
  • 168.192.in-addr.arpa.
  • 16.172.in-addr.arpa., 17.172.in-addr.arpa., ... bis 31.172.in-addr.arpa.

Internes DNS und Cloud DNS

Internes DNS und Cloud DNS sind unterschiedliche Angebote. Interne DNS-Namen werden von Google Cloud automatisch erstellt. Wenn Sie für Ihre VM-Instanzen benutzerdefinierte DNS-Namen erstellen möchten, können Sie eine private Cloud DNS-Zone verwenden.

Informationen zum Erstellen von benutzerdefinierten PTR-Einträgen, die die automatisch erstellten Namen interner DNS-PTR-Einträge überschreiben, finden Sie unter PTR-Einträge in privaten Zonen verwenden.

Benutzerdefinierte Hostnamen

Beim Erstellen einer VM können Sie einen benutzerdefinierten Hostnamen für die VM angeben. Benutzerdefinierte Hostnamen, die auf diese Weise zugewiesen sind, werden nicht vom internen DNS aufgelöst. Bei benutzerdefinierten Hostnamen müssen Sie in der entsprechenden Zone einen entsprechenden DNS-Eintrag erstellen, z. B. mit Cloud DNS. Weitere Informationen finden Sie unter VM-Instanz mit einem benutzerdefinierten Hostnamen erstellen.

Typen von internen DNS-Namen

Google Cloud verfügt über zwei Arten von internen DNS-Namen. Der standardmäßige interne DNS-Typ wird anhand des Zeitpunktes der Aktivierung der Compute Engine API festgelegt.

Interner DNS-Typ Vollständig qualifizierter Domainname (Fully Qualified Domain Name – FQDN) Standardtyp des Projekts
Zonales DNS [INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal Standardeinstellung für alle Organisationen oder eigenständigen Projekte, bei denen die Compute Engine API nach dem 06. September 2018 aktiviert wurde.
Globales (projektweites) DNS [INSTANCE_NAME].c.[PROJECT_ID].internal Standardeinstellung für alle Organisationen oder eigenständigen Projekte, bei denen die Compute Engine API vor dem 6. September 2018 aktiviert wurde.

Dabei gilt:

  • [INSTANCE_NAME] ist der Name der Instanz.
  • [ZONE] ist die Zone, in der sich Ihre Instanz befindet.
  • [PROJECT_ID] ist das Projekt, zu dem die Instanz gehört.

Wie Sie steuern, welche Art von internem DNS-Namen auf Projekt- oder Instanzebene verwendet wird, erfahren Sie unter DNS-Namen für Ihr Projekt oder Ihre Instanzen konfigurieren.

Interne DNS-Namen und freigegebene VPC

Sie können einen internen DNS-Namen verwenden, um auf die interne IP-Adresse einer Instanz zu verweisen. Dies ist auch dann möglich, wenn sich diese IP-Adresse in einem freigegebenen VPC-Netzwerk in einem Hostprojekt befindet. Bei einer freigegebenen VPC ist der Projekt-ID-Teil des zonalen oder eines globalen (projektweiten) internen DNS-Namens die ID des Dienstprojekts.

Internen DNS-Namen für eine Instanz ermitteln

Mit dem folgenden Verfahren können Sie den internen DNS-Namen lesen, der einer Instanz zugewiesen ist. Den internen DNS-Namen finden Sie auf dem Metadatenserver.

  1. Stellen Sie eine Verbindung zur Instanz her.
  2. Rufen Sie den Hostnamen über die Metadaten der Instanz auf:

    curl "http://metadata.google.internal/computeMetadata/v1/instance/hostname" \
    -H "Metadata-Flavor: Google"
    

Das Format des Hostnamens gibt den Typ des internen DNS-Namens an, der von der VM verwendet wird.

Über das interne DNS auf VMs zugreifen

Der Metadatenserver ist auch der Namensserver-Resolver für DNS-Abfragen, die von der VM ausgegeben werden. Der Metadatenserver löst alle DNS-Abfragen auf, sowohl in interne DNS-Namen als auch in externe DNS-Namen. Bei externen DNS-Abfragen leitet der Metadatenserver Anfragen an die öffentlichen Nameserver von Google weiter.

Im folgenden Beispiel wird mit ping eine Instanz kontaktiert, die ein zonales DNS verwendet. Diese Methode funktioniert nur, wenn Sie eine Firewallregel erstellt haben, die eingehenden ICMP-Traffic an die Instanz zulässt.

$ ping [INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal -c 1

PING [INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal (10.240.0.17) 56(84) bytes of data.
64 bytes from [INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal (10.240.0.17): icmp_seq=1 ttl=64 time=0.136 ms

Dabei gilt:

  • [INSTANCE_NAME] ist der Name der Instanz.
  • [ZONE] ist die Zone, in der sich die Instanz befindet.
  • [PROJECT_ID] ist das Projekt, zu dem die Instanz gehört.

Internes DNS und resolv.conf

Standardmäßig speichern die meisten Linux-Distributionen DHCP-Informationen in resolv.conf. Compute Engine-Instanzen sind so konfiguriert, dass DHCP-Freigaben alle 24 Stunden erneuert werden. Bei Instanzen, die für ein zonales DNS aktiviert sind, läuft die DHCP-Freigabe stündlich ab. Durch die DHCP-Erneuerung wird diese Datei überschrieben und alle vorgenommenen Änderungen werden gegebenenfalls rückgängig gemacht. Instanzen mit einem zonalen DNS enthalten in der Datei resolv.conf sowohl zonale als auch globale Einträge.

Zonales DNS

Beispiel für die zonale Datei resolv.conf:

# Local domain name. Computed from your project name.
domain [ZONE].c.[PROJECT_ID].internal
# Search list for hostname lookup. Starting with entries that represent
# your project and ending with google.internal to facilitate metadata server requests.
search [ZONE].c.[PROJECT_ID].internal. c.[PROJECT_ID].internal. google.internal.
# Address of the DNS server to resolve project specific, and global domain names.
nameserver 169.254.169.254

Dabei gilt:

  • [ZONE] ist die Zone, in der sich Ihre Instanz befindet.
  • [PROJECT_ID] ist das Projekt, zu dem die Instanz gehört.

Beispiel für die zonale Datei dhcp.lease:

lease {
  # What interface we are using for the network
  interface "eth0";
  fixed-address 10.128.0.9;
  option subnet-mask 255.255.255.255;
  option routers 10.128.0.1;
  # Lease timeout, older VM instances will have this value set to infinite.
  option dhcp-lease-time 3600;
  option dhcp-message-type 5;
  option domain-name-servers 169.254.169.254;
  option dhcp-server-identifier 169.254.169.254;
  option interface-mtu 1460;
  # Search path options that are copied into the resolv.conf
  option domain-search "[ZONE].c.[PROJECT_ID].internal.", "c.[PROJECT_ID].internal.", "google.internal.";
  option ntp-servers 169.254.169.254;
  option rfc3442-classless-static-routes 32,10,128,0,1,0,0,0,0,0,10,128,0,1;
  option host-name "[INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal";
  option domain-name "[ZONE].c.[PROJECT_ID].internal";
  renew 4 2017/11/16 02:15:52;
  rebind 4 2017/11/16 02:43:59;
  expire 4 2017/11/16 02:51:29;
}

Dabei gilt:

  • [INSTANCE_NAME] ist der Name der Instanz.
  • [ZONE] ist die Zone, in der sich Ihre Instanz befindet.
  • [PROJECT_ID] ist das Projekt, zu dem die Instanz gehört.

Globales DNS

Beispiel für die globale Datei resolv.conf:

# Local domain name. Computed from your project name.
domain c.[PROJECT_ID].internal
# Search list for hostname lookup. Starting with entries that represent
# your project and ending with google.internal to facilitate metadata server requests.
search c.[PROJECT_ID].internal google.internal.
# Address of the DNS server to resolve project specific, and global domain names.
nameserver 169.254.169.254

Dabei gilt: [PROJECT_ID] ist das Projekt, zu dem die Instanz gehört.

Beispiel für die globale Datei dhcp.lease:

lease {
  # What interface we are using for the network
  interface "eth0";
  fixed-address 10.128.0.8;
  option subnet-mask 255.255.255.255;
  option routers 10.128.0.1;
  # Lease timeout, older VM instances will have this value set to infinite.
  option dhcp-lease-time 86400;
  option dhcp-message-type 5;
  option domain-name-servers 169.254.169.254;
  option dhcp-server-identifier 169.254.169.254;
  option interface-mtu 1460;
  # Search path options that are copied into the resolv.conf
  option domain-search "c.[PROJECT_ID].internal.", "google.internal.";
  option ntp-servers 169.254.169.254;
  option rfc3442-classless-static-routes 32,10,128,0,1,0,0,0,0,0,10,128,0,1;
  option host-name "[INSTANCE_NAME].c.[PROJECT_ID].internal";
  option domain-name "c.[PROJECT_ID].internal";
  renew 4 2017/11/16 12:07:00;
  rebind 4 2017/11/16 22:44:53;
  expire 5 2017/11/17 01:44:53;
}

Dabei gilt:

  • [INSTANCE_NAME] ist der Name der Instanz.
  • [PROJECT_ID] ist das Projekt, zu dem die Instanz gehört.

Diese Dateien sind mit folgenden Einschränkungen verbunden:

  • Der Suchpfad kann nur sechs Einträge verarbeiten, von denen drei standardmäßig von Compute Engine bereitgestellt werden. Wenn Sie dem Suchpfad Einträge hinzufügen, sodass dieser insgesamt mehr als sechs Einträge enthält, werden Suchregeln nach dem sechsten Eintrag von Ihrem Betriebssystem nicht angewendet. Dies kann dazu führen, dass die Compute Engine-Funktionen nicht mehr funktionieren, wie beispielsweise der Zugriff auf Instanzen über ihre Instanznamen.
  • Wenn resolv.conf manuell bearbeitet wird, wird das Standard-DHCP nach Ablauf der 24-Stunden-DHCP-Freigabe wiederhergestellt. Bei Instanzen mit zonalem DNS läuft die DHCP-Freigabe jede Stunde ab. Um statische Änderungen in der Datei resolv.conf vorzunehmen, können mehrere Linux-Distributionen zulassen, dass der DHCP-Richtlinie Elemente vorangestellt oder an diese angehängt werden.

Debian 9

Beispieldatei /etc/dhcp/dhclient.conf:

# Configuration file for /sbin/dhclient.
#
...
append domain-search "mydomain.com";
prepend domain-name-servers 172.16.1.1;

Dabei ist mydomain.com die neue Suchdomain und 172.16.1.1 die IP-Adresse Ihres DNS-Servers.

Zonale DNS-Namen

Zonale DNS-Namen umfassen den Namen der Instanz, die Zone, in der sich die Instanz befindet, und das Projekt, zu dem die Instanz gehört. Globale DNS-Namen umfassen nicht die Zone, in der sich die Instanz befindet. Zonale DNS-Namen an einem Standort funktionieren unabhängig von anderen Standorten, sodass Sie mehr fehlertolerante multiregionale Anwendungen mit verbesserter Verfügbarkeit erstellen können.

Bestehende Projekte und Organisationen können zwar weiterhin globale DNS-Namen verwenden. Es wird jedoch empfohlen, zu zonalen DNS-Namen zu migrieren.

DNS-Namen für Projekte oder Instanzen konfigurieren

Aktivieren Sie zonale DNS- und globale DNS-Suchpfade auf Ihren Instanzen. Legen Sie hierfür in Projekt- oder Instanzmetadaten die Variable VmDnsSetting fest. Wenn Sie die Variable VmDnsSetting für Metadaten einer bestimmten Instanz festlegen, werden alle Variablen vom Typ VmDnsSetting außer Kraft gesetzt, die aus Projektmetadaten für diese Instanz übernommen wurden.

Die Variable VmDnsSetting unterstützt die folgenden Einstellungen:

  • Legen Sie VmDnsSetting=ZonalOnly fest, damit Ihre Instanzen nur über ihre zonalen DNS-Namen adressierbar sind. Die Instanzen behalten weiterhin sowohl den zonalen als auch den globalen Suchpfad bei, ihre globalen DNS-Namen funktionieren jedoch nicht mehr. Andere Instanzen können Instanzen mit dieser Einstellung nur mit ihren zonalen DNS-Namen, nicht aber mit ihren globalen DNS-Namen oder Suchpfaden adressieren. Dies ist die bevorzugte Option, sofern sie von Ihren Anwendungen unterstützt wird. Dies ist die Standardeinstellung für Instanzen in eigenständigen Projekten sowie in einer Organisation erstellten Projekten, bei denen die Compute Engine API nach dem 06. September 2018 aktiviert wurde. Wenn ein Projekt zu einer Organisation migriert wird, bleibt der Standard-DNS-Name für dieses Projekt erhalten.
  • Legen Sie VmDnsSetting=ZonalPreferred fest, um zonale DNS-Suchpfade zu aktivieren und gleichzeitig den globalen DNS-Namen beizubehalten. Instanzen mit dieser Einstellung können sich gegenseitig entweder anhand ihrer zonalen oder globalen DNS-Namen adressieren. Sie können auch weiterhin Instanzen adressieren, die nur für globale DNS-Namen konfiguriert sind.
  • Legen Sie VmDnsSetting=GlobalOnly so fest, dass Instanzen nur globale Namen als Domainnamen und Suchpfadeinträge verwenden. Verwenden Sie diesen Wert, um Instanzen aus einer projektübergreifenden zonalen DNS-Einstellung auszuschließen oder um Instanzen so wiederherzustellen, dass nur globale DNS-Namen verwendet werden. Dies ist die Standardeinstellung für Instanzen in eigenständigen Projekten sowie in einer Organisation erstellten Projekten, bei denen die Compute Engine API vor dem 06. September 2018 aktiviert wurde. Wenn ein Projekt zu einer Organisation migriert wird, bleibt der Standard-DNS-Name für dieses Projekt erhalten.

Informationen zum Festlegen von Werten für Projekt- oder Instanzmetadaten finden Sie unter Benutzerdefinierte Metadaten festlegen.

Nachdem Sie die Variable VmDnsSetting für eine Instanz konfiguriert haben, aktualisieren Sie die DHCP-Freigabe für die Instanz. Dazu können Sie die Instanz neu starten, auf den Ablauf der Freigabe warten oder einen der folgenden Befehle ausführen:

  • Linux-Instanzen: sudo dhclient -v -r
  • Windows Server-Instanzen: ipconfig /renew

Vorhandene Anwendungen zu zonalen DNS-Namen migrieren

Vorhandene Projekte können zwar weiterhin globale DNS-Namen verwenden, es wird jedoch empfohlen, die vorhandenen Instanzen und Anwendungen zu zonalen DNS-Namen zu migrieren, um von den Vorteilen des zonalen DNS zu profitieren. Die Migration können Sie im Allgemeinen so vornehmen:

  1. Prüfen Sie Ihre Anwendungen und aktualisieren Sie sie, um Kompatibilitätsprobleme bei ausschließlich zonalen Einstellungen zu beheben:
    • Anwendungen, die Instanzen über den Instanznamen oder globale vollständig qualifizierte Domainnamen adressieren: Instanznamen und globale Instanznamen werden in einer ausschließlich zonalen Umgebung nicht immer aufgelöst. Aktualisieren Sie diese Namen, um als Best Practice vollständig qualifizierte zonale Domainnamen zu verwenden.
    • Anwendungen, die ein bestimmtes globales Format für vollständig qualifizierte Domainnamen annehmen: Die Annahme eines Domainnamensformats stellt im Anwendungsdesign in der Regel ein grundlegendes Problem dar. Google empfiehlt, Ihre Anwendungen so zu gestalten, dass sie unabhängig vom Format des Domainnamens funktionieren.
    • Anwendungen, die keine Änderungen der Domainnamen erwarten: Manche Anwendungen erwarten keine Änderungen der Domainnamen und erfordern einen vollständigen Neustart, bevor die neuen Namen übernommen werden. Aktualisieren Sie Ihre Anwendungen nach Möglichkeit, um Änderungen am Domainnamen der Instanz zu erkennen und zu verwalten.
  2. Konfigurieren Sie Instanzen in Ihrem internen VPC-Netzwerk, um die Einstellung VmDnsSetting=ZonalPreferred zu verwenden, die sowohl globale als auch zonale DNS-Namen nutzt. In dieser Übergangsphase können Instanzen weiterhin globale Namen verwenden, bis Ihre Anwendungen in der Lage sind, nur zonale Namen zu verwenden:
    1. Aktivieren Sie VmDnsSetting=ZonalPreferred auf einer Instanz. Hierfür legen Sie den Wert in den benutzerdefinierten Metadaten fest.
    2. Aktualisieren Sie die DHCP-Freigabe für diese Instanz, damit sie zonale DNS-Namen verwendet:
      • Linux-Instanzen: sudo dhclient -v -r
      • Windows Server-Instanzen: ipconfig /renew
    3. Testen Sie die Anwendungen auf der Instanz, um zu prüfen, ob sie wie erwartet funktionieren. Anwendungen, die keine Änderungen am Domainnamen erwarten, müssen möglicherweise komplett neu gestartet werden, damit sie die neuen Namen verwenden.
    4. Wiederholen Sie diesen Vorgang, um VmDnsSetting=ZonalPreferred zu aktivieren und die DHCP-Freigabe für die verbleibenden Instanzen in Ihrem VPC-Netzwerk zu aktualisieren, bis alle wie erwartet funktionieren und nur die zonalen DNS-Namen verwenden. Alternativ können Sie VmDnsSetting=ZonalPreferred in den Projektmetadaten festlegen, um jede Instanz im Projekt für die Verwendung zonaler DNS-Namen zu konfigurieren.
  3. Sobald Ihre Anwendungen ordnungsgemäß ausgeführt werden und nur zonale Domainnamen mit der Einstellung VmDnsSetting=ZonalPreferred verwenden, können Sie globale Namen in diesem VPC-Netzwerk deaktivieren. Konfigurieren Sie Instanzen in Ihrem internen VPC-Netzwerk, um die Einstellung VmDnsSetting=ZonalOnly zu verwenden, die nur die zonalen DNS-Namen nutzt.
    1. Aktivieren Sie VmDnsSetting=ZonalOnly auf einer Instanz. Hierfür legen Sie den Wert in den benutzerdefinierten Metadaten fest.
    2. Aktualisieren Sie die DHCP-Freigabe für diese Instanz, damit sie zonale DNS-Namen verwendet:
      • Linux-Instanzen: sudo dhclient -v -r
      • Windows Server-Instanzen: ipconfig /renew
    3. Testen Sie die Anwendungen für diese Instanz, um sicherzustellen, dass sie wie erwartet funktionieren.
    4. Wiederholen Sie diesen Vorgang, um VmDnsSetting=ZonalOnly zu aktivieren und die DHCP-Freigabe für die verbleibenden Instanzen in Ihrem VPC-Netzwerk zu aktualisieren, bis alle wie erwartet funktionieren und nur die zonalen DNS-Namen verwenden.
  4. Wiederholen Sie diesen Vorgang in jedem Ihrer Virtual Private Cloud-Netzwerke, bis alle Instanzen in Ihrem Projekt die Einstellung VmDnsSetting=ZonalOnly verwenden. Sie können VmDnsSetting=ZonalOnly in den Metadaten auf Projektebene festlegen, damit diese Einstellung automatisch auf alle in diesem Projekt erstellten Instanzen angewendet wird.

Zonales DNS in einem Projekt oder auf Instanzen deaktivieren

Um ein zonales DNS für eine bestimmte Instanz zu deaktivieren, legen Sie in den Metadaten dieser Instanz VmDnsSetting=GlobalOnly fest. Um ein zonales DNS für das gesamte Projekt zu deaktivieren, legen Sie in den Projektmetadaten VmDnsSetting=GlobalOnly fest und achten Sie darauf, dass keine der Instanzen mit dem Wert VmDnsSetting konfiguriert ist. Informationen zum Festlegen von Werten für Projekt- oder Instanzmetadaten finden Sie unter Benutzerdefinierte Metadaten festlegen.

Wenn Sie erzwingen möchten, dass die DHCP-Freigabe sofort aktualisiert wird, verwenden Sie einen der folgenden Befehle:

  • Container-Optimized OS (Google Kubernetes Engine): sudo systemctl restart systemd-networkd
  • Instanzen für flexible Debian-/App Engine-Umgebungen: sudo dhclient -r -v eth0 && sudo rm /var/lib/dhcp/dhclient.* ; sudo dhclient -v eth0
  • Ubuntu 15.04 und höher: sudo dhclient -r -v ens4 && sudo rm /var/lib/dhcp/dhclient.* ; sudo dhclient -v ens4
  • Ubuntu unter 15.04: sudo dhclient -r -v eth0 && sudo rm /var/lib/dhcp/dhclient.* ; sudo dhclient -v eth0
  • Windows: ipconfig /renew

Einige Betriebssysteme ändern ihre DNS-Konfigurationen nicht vollständig, selbst nachdem die DHCP-Freigabe erneuert wurde. Starten Sie in diesem Fall das Netzwerk der VM-Instanz neu, um die DNS-Konfigurationsänderung zu erzwingen:

  • Ubuntu: sudo ifdown --exclude=lo -a && sudo ifup --exclude=lo -a
  • CentOS: sudo /etc/init.d/network restart
  • CoreOS: sudo systemctl restart systemd-networkd
  • Container-Optimized OS: sudo systemctl restart systemd-networkd

Wenn Sie Ihre Anwendung in Containern, in Google Kubernetes Engine oder in einer flexiblen App Engine-Umgebung ausführen, wird die DNS-Konfiguration in Ihren Containereinstellungen möglicherweise erst aktualisiert, wenn Sie die Container neu starten. Wenn Sie das zonale DNS für diese Containeranwendungen deaktivieren möchten, legen Sie für Ihre Projekte und Instanzen VmDnsSetting=GlobalOnly fest und starten Sie die Container neu, damit die DNS-Einstellungen in den ursprünglichen Zustand zurückgesetzt werden.

Weitere Informationen

  • Weitere Informationen zu Google Cloud-VPC-Netzwerken finden Sie in der VPC-Übersicht.
  • Informationen zum Erstellen und Ändern von VPC-Netzwerken finden Sie unter VPC verwenden.