Vista geral do DNS interno


Quando cria instâncias do Compute Engine, o DNS interno cria automaticamente um nome DNS para a instância. Este nome DNS facilita a comunicação interna de instância para instância através da resolução de endereços IP internos. As redes de nuvem privada virtual Google Cloud usam o serviço DNS interno para permitir que as instâncias de computação na mesma rede acedam umas às outras através de nomes DNS internos.

Google Cloud cria, atualiza e remove automaticamente os seguintes tipos de registos de DNS à medida que gere as suas instâncias:

  • Os registos de endereços DNS, ou registos A, são criados para instâncias numa zona DNS para .internal.
  • Os registos PTR para instâncias, usados para a procura de DNS inverso, são criados nas zonas inversas correspondentes.

Por exemplo, quando elimina uma instância, Google Cloud remove automaticamente os registos A e PTR associados ao respetivo nome DNS interno. Se criar uma instância com o mesmo nome, Google Cloud cria novos registos para a substituição.

Limitações

  • O Compute Engine cria registos A e PTR de nomes DNS internos apenas para o endereço IPv4 interno principal da interface de rede nic0 de uma instância. Consequentemente, o tipo de pilha da interface de rede nic0 tem de ser apenas IPv4 ou de pilha dupla. O DNS interno não suporta interfaces de rede apenas IPv6.

  • O Compute Engine não cria registos de DNS internos para o seguinte:

    • O endereço IPv4 interno principal de uma interface de rede diferente de nic0.
    • Um endereço IPv4 externo de qualquer interface de rede.
    • Um endereço IPv4 interno de um intervalo de IPs de alias de qualquer interface de rede.
    • Um intervalo de endereços IPv6 interno ou externo de qualquer interface de rede.
  • A resolução de nomes DNS internos requer que a VM cliente e a VM associada ao registo DNS interno:

    • Na mesma rede VPC.
    • No mesmo projeto (exceto em determinados cenários de VPC partilhada).

    Para mais informações sobre cenários de VPC partilhada, consulte o artigo Nomes de DNS interno e VPC partilhada.

Nomes DNS internos zonais e globais

Google Cloud tem dois tipos de nomes DNS internos:

  • DNS zonal: os nomes das instâncias têm de ser exclusivos em cada zona, mas pode reutilizar nomes de instâncias em várias zonas. Por exemplo, pode ter várias instâncias com o nome instance-1, desde que as instâncias estejam em zonas diferentes.
  • DNS global: os nomes das instâncias têm de ser exclusivos em cada projeto. Com o DNS global, não pode reutilizar nomes de instâncias no projeto.

A Google recomenda vivamente a utilização do DNS zonal, uma vez que oferece uma maior fiabilidade ao isolar as falhas no registo de DNS em zonas individuais. Em caso de indisponibilidade, o DNS global tem os seguintes problemas:

  • O nome da instância tem de ser exclusivo em todo o projeto. Como resultado, não pode criar novas instâncias em nenhuma região com falhas no plano de controlo onde tem ou teve anteriormente recursos do projeto.Não pode verificar os nomes DNS dos recursos existentes na região indisponível. Google Cloud
  • Determinadas funcionalidades do Compute Engine não estão disponíveis, como a escala automática de grupos de instâncias geridas (GIGs). Como resultado, as suas aplicações que usam o dimensionamento automático para processar corretamente os aumentos da carga de trabalho não conseguem ser dimensionadas.

O tipo de DNS interno predefinido é definido quando ativa a API Compute Engine.

  • O tipo de DNS interno predefinido é o DNS zonal.
  • Se a sua organização ou projeto autónomo ativou a API Compute Engine antes de 6 de setembro de 2018, o tipo de DNS interno predefinido é definido como DNS global.

Os nomes de domínio totalmente qualificados para nomes DNS internos são descritos na tabela seguinte.

Tipo de DNS interno Nome do domínio totalmente qualificado (FQDN)
DNS zonal INSTANCE_NAME.ZONE.c.PROJECT_ID.internal
DNS global (ao nível do projeto) INSTANCE_NAME.c.PROJECT_ID.internal

Substitua o seguinte:

  • INSTANCE_NAME: o nome da instância. Para o DNS zonal, este valor tem de ser exclusivo na zona, mas pode ser repetido em várias zonas. Para o DNS global, o nome da instância tem de ser exclusivo no projeto.
  • ZONE: a zona onde a sua instância está localizada.
  • PROJECT_ID: o projeto ao qual a instância pertence.

Para obter informações sobre como controlar o tipo de nome de DNS interno usado ao nível do projeto ou da instância, consulte o artigo Configurar nomes de DNS para o seu projeto ou instâncias.

Resolução de nomes DNS

As instâncias recebem informações de resolução de DNS interno como parte das respetivas concessões de DHCP. O método de resolução de DNS depende da plataforma do sistema operativo:

  • Linux: por predefinição, o servidor DNS da instância (169.254.169.254:53) resolve os nomes DNS internos.
  • Windows: por predefinição, o gateway predefinido da sub-rede resolve os nomes DNS internos.

Zonas inversas para registos PTR

O serviço DNS interno doGoogle Cloudcria automaticamente registos PTR para instâncias nas seguintes zonas inversas:

  • 10.in-addr.arpa.
  • 168.192.in-addr.arpa.
  • 16.172.in-addr.arpa., 17.172.in-addr.arpa., ... através de 31.172.in-addr.arpa.

Nomes DNS internos e VPC partilhada

A VM do cliente e a VM associada ao registo DNS interno podem estar localizadas em projetos separados, mas têm de usar a mesma rede de VPC partilhada. Por exemplo, o cliente pode estar localizado num projeto de serviço e a VM associada ao registo DNS interno pode estar localizada num projeto de serviço diferente ou no projeto anfitrião.

Os clientes têm de emitir consultas de nomes de domínio totalmente qualificados (FQDN) para registos DNS internos, em vez de se basearem em consultas parciais e domínios de pesquisa DNS. Os domínios de pesquisa DNS são diferentes em cada projeto por motivos como os seguintes:

  • A parte do nome de domínio de cada registo A de DNS interno contém o ID do projeto do projeto que contém a VM. Para uma VM num projeto de serviço cuja nic0 interface de rede usa uma rede de VPC partilhada, o projeto da VM é diferente do projeto que contém a rede.

  • A utilização de nomes DNS internos zonais ou globais (ao nível do projeto) depende da configuração do projeto que contém a VM.

Para mais informações sobre a VPC partilhada, consulte:

Personalizar nomes DNS internos

Algumas organizações ou aplicações podem exigir nomes DNS internos personalizados em vez dos nomes DNS internos predefinidos criados pelo Google Cloud.

Zonas privadas e registos personalizados com o Cloud DNS

Pode usar uma zona privada do Cloud DNS para criar entradas DNS personalizadas para as suas instâncias. Pode configurar registos PTR que lhe permitem substituir o URL DNS interno predefinido da sua instância pelo URL personalizado que fornecer.

Para criar registos PTR personalizados que substituam os nomes PTR de DNS internos criados automaticamente, consulte o artigo Registos PTR para endereços RFC 1918 em zonas privadas. Para obter informações sobre como criar registos PTR para instâncias, consulte o artigo Crie um registo PTR para uma instância.

Nomes de anfitriões personalizados

Pode especificar um nome de anfitrião personalizado para uma instância quando a cria. Os nomes de anfitrião personalizados atribuídos desta forma não são resolvidos pelo DNS interno. Com os nomes de anfitrião personalizados, continua a ter de criar um registo de DNS correspondente na zona adequada (por exemplo, através do Cloud DNS). Para mais informações, consulte o artigo Crie uma instância com um nome de anfitrião personalizado.

DNS e DHCP internos

As instâncias do Compute Engine estão configuradas para renovar as concessões DHCP a cada 24 horas. Para instâncias ativadas para DNS zonal, a concessão de DHCP expira a cada hora. As instâncias que usam o DNS zonal têm entradas zonais e globais no ficheiro de configuração DHCP.

Por predefinição, a maioria das distribuições Linux armazena informações de DHCP em resolv.conf. A edição manual de resolv.conf faz com que seja revertido para o DHCP predefinido sempre que a alocação de DHCP expira na sua instância. Para fazer modificações estáticas no ficheiro resolv.conf, várias distribuições do Linux permitem que os itens sejam adicionados antes ou depois da política de DHCP.

A forma como modifica a política de DHCP ou o ficheiro de configuração depende da distribuição do Linux que usa. Por exemplo, o Red Hat Enterprise Linux e o Debian usam o ficheiro de configuração /etc/dhcp/dhcpd.conf. No CentOS, usa o utilitário de linha de comandos do Network Manager, nmcli.

Consulte a documentação do seu sistema operativo para obter informações sobre como configurar definições de rede DHCP e DNS personalizadas. Por exemplo, para o Red Hat Enterprise Linux for SAP com HA e serviços de atualização 8.6, use o seguinte link: Configurar manualmente o ficheiro /etc/resolv.conf

Ficheiro de exemplo resolv.conf

Por predefinição, a maioria das distribuições Linux armazena informações de DHCP em resolv.conf. O serviço systemd-resolved também oferece serviços de resolução para DNS. Pode configurar este serviço editando o ficheiro /etc/systemd/resolved.conf e outros ficheiros *.conf no diretório /etc/systemd/resolved.conf.d/. Nas distribuições Linux que armazenam informações DHCP em resolved.conf, pode ver as entradas DNS zonais e globais no ficheiro /etc/systemd/resolved.conf.

Estes ficheiros têm as seguintes restrições:

  • O caminho de pesquisa só pode processar 6 registos e 3 desses registos são fornecidos pelo Compute Engine. th Isto pode fazer com que as funcionalidades do Compute Engine deixem de funcionar, como o acesso a instâncias através dos respetivos nomes de instâncias.
  • A edição manual resolv.conf faz com que seja revertida para o DHCP predefinido sempre que a alocação de DHCP de 24 horas expirar na sua instância. Em instâncias que usam DNS zonal, a concessão de DHCP expira a cada hora. Para fazer modificações estáticas no ficheiro resolv.conf, várias distribuições do Linux permitem que os itens sejam adicionados antes ou depois da política de DHCP.

Configuração de DNS zonal

Ficheiro resolv.conf zonal de exemplo:

# 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

Substitua o seguinte:

  • ZONE: a zona onde a sua instância está localizada
  • PROJECT_ID: o projeto ao qual a instância pertence

Ficheiro dhcp.lease zonal de exemplo:

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

Substitua o seguinte:

  • INSTANCE_NAME: o nome da instância
  • ZONE: a zona onde a sua instância está localizada
  • PROJECT_ID: o projeto ao qual a instância pertence

Configuração de DNS global

Ficheiro resolv.conf global de exemplo:

# 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

Substitua PROJECT_ID pelo projeto ao qual a instância pertence.

Ficheiro dhcp.lease global de exemplo:

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

Substitua o seguinte:

  • INSTANCE_NAME: o nome da instância
  • PROJECT_ID: o projeto ao qual a instância pertence

Ficheiro de exemplo dhclient.conf

Alguns sistemas operativos, como o Debian 9, usam o ficheiro dhclient.conf em vez do ficheiro resolv.conf.

Ficheiro de exemplo /etc/dhcp/dhclient.conf:

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

Neste exemplo, mydomain.com é o novo domínio de pesquisa e 172.16.1.1 é o IP do seu servidor DNS.

O que se segue?