Panoramica del DNS interno


Quando crei istanze Compute Engine, il DNS interno crea automaticamente un nome DNS per l'istanza. Questo nome DNS facilita la comunicazione interna da istanza a istanza risolvendo gli indirizzi IP interni. Le reti Virtual Private Cloud su Google Cloud utilizzano il servizio DNS interno per consentire alle istanze di Compute nella stessa rete di accedere l'una all'altra utilizzando nomi DNS interni.

Google Cloud crea, aggiorna e rimuove automaticamente i seguenti tipi di record DNS man mano che gestisci le istanze:

  • I record di indirizzo DNS, o record A, vengono creati per le istanze in una zona DNS per .internal.
  • I record PTR per le istanze, utilizzati per la ricerca DNS inversa, vengono creati nelle zone inverse corrispondenti.

Ad esempio, quando elimini un'istanza, Google Cloud rimuove automaticamente i record A e PTR associati per il suo nome DNS interno. Se poi crei un'istanza con lo stesso nome, Google Cloud crea nuovi record per la sostituzione.

Limitazioni

  • Compute Engine crea record A e PTR del nome DNS interno solo per l'indirizzo IPv4 interno principale dell'interfaccia di rete nic0 di un'istanza. Di conseguenza, il tipo di stack dell'interfaccia di rete nic0 deve essere solo IPv4 o dual-stack. Il DNS interno non supporta le interfacce di rete solo IPv6 (anteprima).

  • Compute Engine non crea record DNS interni per quanto segue:

    • L'indirizzo IPv4 interno principale di un'interfaccia di rete diversa da nic0.
    • Un indirizzo IPv4 esterno di qualsiasi interfaccia di rete.
    • Un indirizzo IPv4 interno di un intervallo IP alias di qualsiasi interfaccia di rete.
    • Un intervallo di indirizzi IPv6 interni o esterni di qualsiasi interfaccia di rete.
  • La risoluzione dei nomi DNS interni richiede che la VM client e la VM associata al record DNS interno siano entrambe:

    • Nella stessa rete VPC.
    • Nello stesso progetto (ad eccezione di alcuni scenari VPC condiviso).

    Per maggiori informazioni sugli scenari VPC condiviso, consulta Nomi DNS interni e VPC condiviso.

Nomi DNS interni di zona e globali

Google Cloud ha due tipi di nomi DNS interni:

  • DNS zonale: i nomi delle istanze devono essere univoci all'interno di ogni zona, ma puoi riutilizzare i nomi delle istanze in più zone. Ad esempio, puoi avere diverse istanze denominate instance-1, purché si trovino in zone diverse.
  • DNS globale: i nomi delle istanze devono essere univoci all'interno di ogni progetto. Con il DNS globale, non puoi riutilizzare i nomi delle istanze all'interno del progetto.

Google consiglia vivamente di utilizzare il DNS di zona perché offre maggiore affidabilità isolando gli errori nella registrazione DNS nelle singole zone. In caso di interruzione, il DNS globale presenta i seguenti problemi:

  • Il nome dell'istanza deve essere univoco in tutto il progetto. Di conseguenza, non puoi creare nuove istanze in qualsiasi regione che presenta errori del control plane in cui hai o avevi in precedenza risorse di progetto. Google Cloud Non puoi verificare i nomi DNS delle risorse esistenti nella regione non disponibile.
  • Alcune funzionalità di Compute Engine non sono disponibili, ad esempio la scalabilità automatica dei gruppi di istanze gestite (MIG). Di conseguenza, le tue applicazioni che utilizzano la scalabilità automatica per gestire correttamente gli aumenti del carico di lavoro non sono in grado di scalare.

Il tipo di DNS interno predefinito viene impostato quando abiliti l'API Compute Engine.

  • Il tipo di DNS interno predefinito è il DNS di zona.
  • Se la tua organizzazione o il tuo progetto autonomo ha abilitato l'API Compute Engine prima del 6 settembre 2018, il tipo di DNS interno predefinito è impostato su DNS globale.

I nomi di dominio completi per i nomi DNS interni sono descritti nella tabella seguente.

Tipo di DNS interno Nome di dominio completo (FQDN)
DNS di zona INSTANCE_NAME.ZONE.c.PROJECT_ID.internal
DNS globale (a livello di progetto) INSTANCE_NAME.c.PROJECT_ID.internal

Sostituisci quanto segue:

  • INSTANCE_NAME: il nome dell'istanza Per il DNS zonale, questo valore deve essere univoco all'interno della zona, ma può essere ripetuto in più zone. Per il DNS globale, il nome dell'istanza deve essere univoco nel progetto.
  • ZONE: la zona in cui si trova l'istanza.
  • PROJECT_ID: il progetto a cui appartiene l'istanza.

Per informazioni su come controllare il tipo di nome DNS interno utilizzato a livello di progetto o istanza, consulta Configurare i nomi DNS per il progetto o le istanze.

Risoluzione del nome DNS

Le istanze ricevono le informazioni di risoluzione DNS interna nell'ambito dei lease DHCP. Il metodo di risoluzione DNS dipende dalla piattaforma del sistema operativo:

  • Linux: per impostazione predefinita, il server DNS dell'istanza (169.254.169.254:53) risolve i nomi DNS interni.
  • Windows: per impostazione predefinita, il gateway predefinito della subnet risolve i nomi DNS interni.

Zone inverse per i record PTR

Il servizio DNS interno diGoogle Cloudcrea automaticamente record PTR per le istanze nelle seguenti zone reverse:

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

Nomi DNS interni e VPC condiviso

La VM client e la VM associata al record DNS interno possono trovarsi in progetti separati, ma devono utilizzare la stessa rete VPC condiviso. Ad esempio, il client può trovarsi in un progetto di servizio e la VM associata al record DNS interno può trovarsi in un progetto di servizio diverso o nel progetto host.

I client devono eseguire query del nome di dominio completo (FQDN) per i record DNS interni anziché basarsi su query parziali e domini di ricerca DNS. I domini di ricerca DNS sono diversi in ogni progetto per motivi quali:

  • La parte del nome di dominio di ogni record A DNS interno contiene l'ID progetto del progetto che contiene la VM. Per una VM in un progetto di servizio la cui interfaccia di rete nic0 utilizza una rete VPC condiviso, il progetto della VM è diverso da quello contenente la rete.

  • L'utilizzo di nomi DNS interni a livello di zona o globali (a livello di progetto) dipende dalla configurazione del progetto che contiene la VM.

Per ulteriori informazioni sul VPC condiviso, consulta:

Personalizzazione dei nomi DNS interni

Alcune organizzazioni o applicazioni potrebbero richiedere nomi DNS interni personalizzati anziché i nomi DNS interni predefiniti creati da Google Cloud.

Zone private e record personalizzati con Cloud DNS

Puoi utilizzare una zona privata Cloud DNS per creare voci DNS personalizzate per le tue istanze. Puoi configurare i record PTR che ti consentono di sostituire l'URL DNS interno predefinito per la tua istanza con l'URL personalizzato che fornisci.

Per creare record PTR personalizzati che sostituiscono i nomi PTR DNS interni creati automaticamente, consulta Record PTR per indirizzi RFC 1918 in zone private. Per informazioni sulla creazione di record PTR per le istanze, vedi Crea un record PTR per un'istanza.

Nomi host personalizzati

Puoi specificare un nome host personalizzato per un'istanza al momento della creazione. I nomi host personalizzati assegnati in questo modo non vengono risolti dal DNS interno. Con i nomi host personalizzati, devi comunque creare un record DNS corrispondente nella zona appropriata (ad esempio utilizzando Cloud DNS). Per saperne di più, consulta Creare un'istanza con un nome host personalizzato.

DNS e DHCP interni

Le istanze Compute Engine sono configurate per rinnovare i lease DHCP ogni 24 ore. Per le istanze abilitate per DNS di zona, il lease DHCP scade ogni ora. Le istanze che utilizzano il DNS di zona hanno voci sia di zona che globali nel file di configurazione DHCP.

Per impostazione predefinita, la maggior parte delle distribuzioni Linux memorizza le informazioni DHCP in resolv.conf. La modifica manuale di resolv.conf comporta il ripristino del DHCP predefinito ogni volta che il lease DHCP scade nell'istanza. Per apportare modifiche statiche nel file resolv.conf, diverse distribuzioni Linux consentono di anteporre o aggiungere elementi al criterio DHCP.

La modalità di modifica del criterio DHCP o del file di configurazione dipende dalla distribuzione di Linux che utilizzi. Ad esempio, Red Hat Enterprise Linux e Debian utilizzano il file di configurazione /etc/dhcp/dhcpd.conf. Su CentOS, utilizza l'utilità da riga di comando Network Manager, nmcli.

Per informazioni su come configurare le impostazioni di rete DHCP e DNS personalizzate, consulta la documentazione del sistema operativo. Ad esempio, per Red Hat Enterprise Linux for SAP with HA and Update Services 8.6, utilizza il seguente link: Configurazione manuale del file /etc/resolv.conf

File resolv.conf di esempio

Per impostazione predefinita, la maggior parte delle distribuzioni Linux memorizza le informazioni DHCP in resolv.conf. Il servizio systemd-resolved fornisce anche servizi di resolver per il DNS. Puoi configurare questo servizio modificando il file /etc/systemd/resolved.conf e altri file *.conf nella directory /etc/systemd/resolved.conf.d/. Nelle distribuzioni Linux che archiviano le informazioni DHCP in resolved.conf, puoi visualizzare le voci DNS globali e di zona nel file /etc/systemd/resolved.conf.

Questi file presentano le seguenti limitazioni:

  • Il percorso di ricerca può gestire solo 6 record e 3 di questi sono forniti da Compute Engine. Se aggiungi voci al percorso di ricerca in modo che il numero totale di voci sia maggiore di 6, le regole di ricerca dopo la sesta voce non vengono applicate dal sistema operativo. Ciò può causare l'interruzione del funzionamento delle funzionalità di Compute Engine, ad esempio l'accesso alle istanze utilizzando i relativi nomi.
  • La modifica manuale di resolv.conf comporta il ripristino del DHCP predefinito ogni volta che il lease DHCP di 24 ore scade nell'istanza. Nelle istanze che utilizzano DNS di zona, il lease DHCP scade ogni ora. Per apportare modifiche statiche nel file resolv.conf, diverse distribuzioni Linux consentono di anteporre o aggiungere elementi al criterio DHCP.

Configurazione DNS di zona

File resolv.conf zonale di esempio:

# 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

Sostituisci quanto segue:

  • ZONE: la zona in cui si trova l'istanza
  • PROJECT_ID: il progetto a cui appartiene l'istanza

File dhcp.lease zonale di esempio:

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

Sostituisci quanto segue:

  • INSTANCE_NAME: il nome dell'istanza
  • ZONE: la zona in cui si trova l'istanza
  • PROJECT_ID: il progetto a cui appartiene l'istanza

Configurazione DNS globale

File resolv.conf globale di esempio:

# 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

Sostituisci PROJECT_ID con il progetto a cui appartiene l'istanza.

File dhcp.lease globale di esempio:

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

Sostituisci quanto segue:

  • INSTANCE_NAME: il nome dell'istanza
  • PROJECT_ID: il progetto a cui appartiene l'istanza

File dhclient.conf di esempio

Alcuni sistemi operativi, come Debian 9, utilizzano il file dhclient.conf anziché il file resolv.conf.

File /etc/dhcp/dhclient.conf di esempio:

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

In questo esempio, mydomain.com è il nuovo dominio di ricerca e 172.16.1.1 è l'IP del tuo server DNS.

Passaggi successivi