Configurando o Serviço de Nomes

Use o BIND para configurar e administrar serviços de nome DNS no Oracle Linux, incluindo configuração do servidor de nomes, arquivos de zona, registros de recursos e pesquisas de DNS.

Este capítulo descreve como utilizar o Berkeley Internet Name Domain (BIND) para configurar um servidor de nomes DNS (Domain Name System).

Sobre DNS e BIND

DNS é um serviço baseado em rede que resolve nomes de domínio para endereços IP. Para uma rede pequena e isolada, você pode usar entradas no arquivo /etc/hosts para fornecer o mapeamento de nome para endereço. No entanto, a maioria das redes que estão conectadas à Internet usam DNS.

Dica

Os exemplos neste tópico usam nomes de host de placeholder em example.com. Substitua-os por nomes de host e domínio do seu próprio ambiente.

O DNS é um banco de dados hierárquico e distribuído.

Considere o nome de domínio totalmente qualificado (FQDN) wiki.us.example.com. Neste exemplo, o domínio de nível superior é com, example é um subdomínio de com, us é um subdomínio de example e wiki é o nome do host.

Cada um desses domínios é agrupado em zonas para fins administrativos. Um servidor DNS, ou servidor de nomes, armazena as informações necessárias para resolver os domínios do componente dentro de uma zona. Além disso, o servidor DNS de uma zona armazena ponteiros para os outros servidores DNS responsáveis por resolver cada subdomínio.

Se um cliente externo solicitar que seu servidor de nomes local resolva um FQDN, como wiki.us.example.com para um endereço IP para o qual esse servidor não tenha autoridade, o servidor consultará um servidor de nomes root para obter o endereço de um servidor de nomes que tenha autoridade para o domínio .com. Este servidor então fornece o endereço IP de outro servidor de nome autorizado para o domínio example.com, que por sua vez fornece o endereço IP do servidor de nome autorizado para us.example.com e assim por diante.

O processo de consulta termina com o endereço IP do FQDN sendo fornecido ao cliente externo que fez a solicitação. Este processo é conhecido como uma consulta recursiva, em que o servidor de nomes local lida com cada referência de um servidor de nomes externo para outro servidor de nomes em nome do resolvedor.

As consultas iterativas dependem do resolvedor ser capaz de lidar com a referência de cada servidor de nomes externo para rastrear o servidor de nomes que é autorizado para o FQDN. A maioria dos resolvedores usa consultas recursivas e, portanto, não pode usar servidores de nomes que suportem apenas consultas iterativas.

A maioria das versões do Oracle Linux fornece a implementação BIND do DNS. O pacote bind inclui o daemon do servidor DNS (named), ferramentas para trabalhar com DNS, como rndc, e alguns arquivos de configuração, incluindo o seguinte:

/etc/named.conf

Contém configurações para named e lista o local e as características dos arquivos de zona do domínio. Os arquivos de zona geralmente são armazenados em /var/named.

/etc/named.rfc1912.zones

Contém várias seções de zona para resolver nomes e endereços de loopback locais.

/var/named/named.ca

Contém uma lista dos servidores DNS autorizados raiz.

Tipos de Servidores de Nomes

É possível configurar vários tipos de servidores de nome usando o BIND, incluindo o seguinte:

Servidor de nome mestre

Autorizado para um ou mais domínios, um servidor de nome primário mantém seus dados de zona em vários arquivos de banco de dados e pode transferir essas informações periodicamente para qualquer servidor de nome de backup que também estão configurados na zona. Uma organização pode manter os dois servidores de nome principais a seguir para uma zona: um servidor principal fora do firewall para fornecer informações restritas sobre a zona para hosts e serviços acessíveis publicamente e um servidor principal oculto ou stealth dentro do firewall que contém detalhes de hosts e serviços internos.

Servidor de nomes secundário ou de backup

Agindo como um backup para um servidor de nome principal, um servidor de nome de backup mantém uma cópia dos dados da zona, que é atualizada periodicamente a partir da cópia do servidor principal.

Servidor de nomes Stub

Um servidor de nome principal para uma zona também pode ser configurado como um servidor de nome de stub que mantém informações sobre os servidores de nome principal e de backup das zonas filhas.

Servidor de nomes somente cache

Executa consultas em nome de um cliente e armazena as respostas em um cache após retornar os resultados ao cliente. Este servidor não é autorizado para nenhum domínio e as informações que ele registra são limitadas aos resultados de consultas armazenadas em cache.

Encaminhando servidor de nomes

Encaminha todas as consultas para outro servidor de nomes e armazena em cache os resultados, o que reduz o processamento local, o acesso externo e o tráfego de rede.

Na prática, um servidor de nomes pode ser uma combinação de vários desses tipos em configurações complexas.

Instalando e Configurando um Servidor de Nomes

Instale o BIND, configure as definições do resolvedor local, atualize /etc/named.conf e inicie o serviço DNS.

Por padrão, você pode usar a instalação BIND para configurar um servidor de nomes somente de armazenamento em cache usando as definições de configuração fornecidas no arquivo /etc/named.conf e nos arquivos que ele inclui. O procedimento a seguir pressupõe que você use as configurações padrão ou configure novos arquivos de configuração e zona named.

Para configurar um servidor de nomes, execute os passos a seguir.

  1. Instale os pacotes BIND.
    sudo dnf install bind bind-utils
  2. Se o NetworkManager estiver ativado em um sistema Oracle Linux 8, edite /etc/sysconfig/network-scripts/ifcfg-interface e adicione a entrada a seguir.
    DNS1=127.0.0.1

    Essa linha faz com que NetworkManager adicione a seguinte entrada ao /etc/resolv.conf quando o serviço de rede for iniciado:

    nameserver 127.0.0.1

    Esta entrada aponta o resolvedor no servidor de nomes local.

    No Oracle Linux 9 e no Oracle Linux 10, configure o endereço do servidor DNS no perfil de conexão NetworkManager ativo em vez de editar arquivos ifcfg-* legados.

  3. Se o NetworkManager estiver desativado em um sistema Oracle Linux 8 ou 9, edite /etc/resolv.conf para incluir a entrada nameserver 127.0.0.1.
  4. Edite /etc/named.conf para definir as configurações do servidor que cada versão exige.

    A configuração instalada com BIND permite apenas consultas de localhost:

    options {
      listen-on port 53 { 127.0.0.1; };
      listen-on-v6 port 53 { ::1; };
      allow-query { localhost; };
      recursion yes;
    };

    Ajuste as diretivas a seguir para corresponder ao design da sua rede. O Oracle Linux 10 usa essas definições por padrão, e a mesma orientação é válida para o Oracle Linux 8 e 9:

    • Atualize listen-on para que named escute em todas as interfaces que atendem a solicitações de DNS do cliente, por exemplo:
      listen-on port 53 { 127.0.0.1; 192.168.1.10; 10.0.3.100; };
    • Amplie allow-query para abranger as redes do cliente que devem ser resolvidas por meio do servidor, por exemplo:
      allow-query { localhost; localnets; };
    • Defina allow-query-cache para os intervalos de endereços que podem acessar dados armazenados em cache:
      allow-query-cache { localhost; 192.168.1.0/24; };
    • Conceda acesso de consulta recursiva com allow-recursion, por exemplo:
      allow-recursion { localhost; 10.0.3.0/16; };

    Para obter descrições detalhadas de parâmetros, consulte Configurando o daemon nomeado.

  5. Salve /etc/named.conf e verifique a sintaxe.
    sudo named-checkconf
  6. Se necessário, edite os arquivos de zona para refletir seu ambiente.
  7. Configure o firewall do sistema para aceitar conexões TCP de entrada para a porta 53 e datagramas UDP de entrada na porta 53.

    Aplique as alterações permanentemente, se necessário.

    sudo firewall-cmd --zone=zone --add-port=53/tcp --add-port=53/udp
    sudo firewall-cmd --permanent --zone=zone --add-port=53/tcp --add-port=53/udp

    Para obter mais informações sobre como proteger o firewall, consulte Configurando Firewalls de Filtragem de Pacotes.

  8. Inicie ou reinicie os serviços DNS.
    sudo systemctl enable --now named
    sudo systemctl restart NetworkManager

Como Trabalhar com Arquivos de Configuração do DNS

Os domínios são agrupados em zonas que são configuradas através de arquivos de zona. Os arquivos de zona armazenam informações sobre domínios no banco de dados DNS. Cada arquivo de zona contém diretivas e registros de recursos. Diretivas opcionais aplicam configurações a uma zona ou instruem um servidor de nomes a executar determinadas tarefas. Registros de recursos especificam parâmetros de zona e definem informações sobre os sistemas ou hosts em uma zona.

Exemplos de arquivos de configuração BIND podem ser encontrados no arquivo /usr/share/doc/bind/sample/etc.

Configurando o Daemon nomeado

O arquivo de configuração principal do serviço named é /etc/named.conf. Informações detalhadas de configuração estão disponíveis na página do manual named.conf(5) e no Manual de Referência do Administrador do BIND 9. O exemplo a seguir vem do arquivo /etc/named.conf padrão que é instalado com o pacote bind e que configura um servidor de nome somente para armazenamento em cache:

options {
    listen-on port 53 { 127.0.0.1; };
    listen-on-v6 port 53 { ::1; };
    directory       "/var/named";
    dump-file       "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    secroots-file   "/var/named/data/named.secroots";
    recursing-file  "/var/named/data/named.recursing";
    allow-query { localnets; };
    recursion yes;

    dnssec-enable yes;
    dnssec-validation yes;

    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";

    managed-keys-directory "/var/named/dynamic";

   pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";

    /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
    include "/etc/crypto-policies/back-ends/bind.config";

};

logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
};

zone "." IN {
    type hint;
    file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

A instrução options define as opções de configuração do servidor global e define padrões para outras instruções.

listen-on

É a porta na qual named faz listening das consultas.

directory

Especifica o diretório padrão para arquivos de zona se um nome de caminho relativo for especificado.

dump-file

Especifica onde named despeja seu cache se ele falhar.

statistics-file

Especifica o arquivo de saída para o comando rndc stats.

memstatistics-file

Especifica o arquivo de saída para estatísticas de uso da memória named.

allow-query

Especifica quais endereços IP podem consultar o servidor. localnets especifica todas as redes anexadas localmente.

recursion

Especifica se o servidor de nomes executa consultas recursivas.

dnssec-enable

Especifica se o DNS seguro deve ser usado (DNSSEC).

dnssec-validation

Especifica se o servidor de nome validaria respostas de zonas ativadas para DNSSEC.

dnssec-lookaside

Especifica se a Validação de Lado de Vista DNSSEC (DLV) deve ser ativada usando a chave no /etc/named.iscdlv.key definida por bindkeys-file.

A seção logging ativa o log de mensagens para /var/named/data/named.run. O parâmetro severity controla o nível de log e o valor dynamic significa que esse nível pode ser controlado usando o comando rndc trace.

A seção zone especifica o conjunto inicial de servidores raiz usando uma zona de dica. Esta zona especifica que named consulte /var/named/named.ca para obter os endereços IP de servidores autorizados para o domínio raiz (.).

É possível adicionar definições ao arquivo de configuração que são apropriadas ao ambiente de rede. O exemplo a seguir define configurações para o serviço e as definições de nível superior para zonas:

include "/etc/rndc.key";

controls {
    inet 127.0.0.1 allow { localhost; } keys { "rndc-key"; }
};

zone "us.example.com" {
    type master;
    file "master-data";
    allow-update { key "rndc-key"; };
    notify yes;
};

zone "example.com" IN {
    type slave;
    file "sec/slave-data";
    allow-update { key "rndc-key"; };
    masters {10.1.32.1;};
};

zone "2.168.192.in-addr.arpa" IN {
    type master;
    file "reverse-192.168.2";
    allow-update { key “rndc-key”; };
    notify yes;
};

A instrução include permite que arquivos externos sejam referenciados para que dados confidenciais, como hashes de chaves, possam ser colocados em um arquivo separado com permissões restritas.

A instrução controls define as informações de acesso e os requisitos de segurança necessários para usar o comando rndc com o servidor named:

inet

Especifica quais hosts podem executar rndc para controlar o nome. Neste exemplo, rndc deve ser executado no host local (127.0.0.1).

keys

Especifica os nomes das chaves que podem ser usadas. O exemplo especifica o uso da chave chamada rndc-key, que é definida em /etc/rndc.key. As chaves autenticam várias ações por named e são o método principal de controlar o acesso e a administração remotos.

As instruções zone definem a função do servidor em zonas diferentes.

As seguintes opções de zona são usadas:

type

Especifica que este sistema é o servidor de nome principal para a zona us.example.com e um servidor de backup para example.com. 2.168.192.in-addr.arpa é uma zona inversa para resolver endereços IP para nomes de host. Consulte Sobre Registros de Recursos para Resolução de Nome Reverso.

file

Especifica o caminho para o arquivo de zona relativo a /var/named. O arquivo de zona para us.example.com é armazenado em /var/named/master-data e os dados de zona transferidos para example.com são armazenados em cache em /var/named/sec/slave-data.

allow-update

Especifica que uma chave compartilhada deve existir nos servidores de nome primário e de backup para que uma transferência de zona ocorra do primário para o backup. Veja a seguir um exemplo de registro de uma chave no arquivo /etc/rndc.key:

key "rndc-key" {
    algorithm hmac-md5;
    secret "XQX8NmM41+RfbbSdcqOejg==";
};

Você pode usar o comando rndc-confgen -a para gerar um arquivo de chave.

notify

Especifica se os servidores de nome de backup devem ser notificados quando as informações da zona forem atualizadas.

masters

Especifica o servidor de nome principal para um servidor de nome de backup.

Para obter mais informações, consulte a página do manual named.conf(5) e a documentação do BIND em /usr/share/doc/bind-version/arm.

Sobre registros de recursos em arquivos de zona

Um registro de recurso em um arquivo de zona contém os seguintes campos, alguns dos quais são opcionais, dependendo do tipo de registro:

Nome

Nome do domínio ou endereço IP.

TTL (tempo de vida)

O tempo máximo que um servidor de nomes armazena em cache um registro antes de verificar se há um mais recente disponível.

Classe

Sempre IN para a Internet.

Tipo

Tipo de registro, por exemplo:

A (endereço)

Endereço IPv4 correspondente a um host.

AAAA (endereço)

Endereço IPv6 correspondente a um host.

CNAME (nome canônico)

Nome do alias correspondente a um nome de host.

MX (troca de e-mail)

Destino do e-mail endereçado ao domínio.

NS (servidor de nomes)

Nome de domínio totalmente qualificado de um servidor de nome autorizado para um domínio.

PTR (ponteiro)

Nome do host que corresponde a um endereço IP para pesquisas de endereço a nome (resolução de nome reverso).

SOA (início de autoridade)

Informações autorizadas sobre uma zona, como o servidor de nome principal, o endereço de email do administrador do domínio e o número de série do domínio. Todos os registros após um registro SOA estão relacionados à zona que ele define até o próximo registro SOA.

Dados

Informações que o registro armazena, como um endereço IP em um registro A, ou um nome de host em um registro CNAME ou PTR.

O exemplo a seguir mostra o conteúdo de um arquivo de zona típico, como /var/named/master-data:

$TTL 86400        ; 1 day
@ IN SOA dns.us.example.com. root.us.example.com. (
            57 ; serial
            28800 ; refresh (8 hours)
            7200 ; retry (2 hours)
            2419200 ; expire (4 weeks)
            86400 ; minimum (1 day)
            )
              IN  NS      dns.us.example.com.

dns           IN  A       192.168.2.1
us.example.com  IN  A       192.168.2.1
svr01         IN  A       192.168.2.2
www           IN  CNAME   svr01
host01        IN  A       192.168.2.101
host02        IN  A       192.168.2.102
host03        IN  A       192.168.2.103
...

Um comentário em uma linha é precedido por um ponto e vírgula (;).

A diretiva $TTL define o valor padrão de tempo de vida útil para todos os registros de recursos na zona. Cada registro de recurso pode definir seu próprio valor de tempo de vida, que substitui a configuração global.

O registro SOA é obrigatório e inclui as seguintes informações:

us.example.com

O nome do domínio.

dns.us.example.com.

O nome de domínio totalmente qualificado do servidor de nomes, incluindo um período final (.) para o domínio raiz.

root.us.example.com.

O endereço de e-mail do administrador do domínio.

número de série

Um contador que, se incrementado, diz a named para recarregar o arquivo de zona.

atualizar

O horário após o qual um servidor de nome principal notifica os servidores de nome de backup que eles devem atualizar seu banco de dados.

repetir

Se uma atualização falhar, o tempo que um servidor de nome de backup deve aguardar antes de tentar outra atualização.

expirar

O tempo máximo decorrido que um servidor de nomes de backup tem para concluir uma atualização antes que seus registros de zona não sejam mais considerados autorizados e ele interromperá a resposta às consultas.

mínimo

O tempo mínimo durante o qual outros servidores devem armazenar em cache as informações obtidas desta zona.

Um registro NS declara um servidor de nomes autorizado para o domínio.

Cada registro A especifica o endereço IP que corresponde a um nome de host no domínio.

O registro CNAME cria o alias www para svr01.

Para obter mais informações, consulte a documentação do BIND em /usr/share/doc/bind-version/arm.

Sobre Registros de Recursos para Resolução de Nome Inverso

A resolução de encaminhamento retorna um endereço IP para um nome de domínio especificado. A resolução de nome reverso retorna um nome de domínio para um endereço IP especificado. O DNS implementa a resolução de nome reverso usando os domínios in-addr.arpa e ip6.arpa especiais para IPv4 e IPv6.

As características de um domínio in-addr.arpa ou ip6.arpa da zona geralmente são definidas em /etc/named.conf, por exemplo:

zone "2.168.192.in-addr.arpa" IN {
    type master;
    file "reverse-192.168.2";
    allow-update { key “rndc-key”; };
    notify yes;
};

O nome da zona consiste em in-addr.arpa, precedido pela parte de rede do endereço IP do domínio, com seus quads pontilhados gravados em ordem inversa.

Se a rede não tiver um tamanho de prefixo que seja um múltiplo de 8, consulte RFC 2317 para o formato que você precisa usar.

Os registros PTR nos domínios in-addr.arpa ou ip6.arpa definem nomes de host que correspondem à parte do host do endereço IP. O exemplo a seguir é obtido do arquivo de zona /var/named/reverse-192.168.2:

$TTL 86400        ;
@ IN SOA dns.us.example.com. root.us.example.com. (
            57 ;
            28800 ;
            7200 ;
            2419200 ;
            86400 ;
            )
              IN  NS      dns.us.example.com.

1             IN  PTR     dns.us.example.com.
1             IN  PTR     us.example.com.
2             IN  PTR     svr01.us.example.com.
101           IN  PTR     host01.us.example.com.
102           IN  PTR     host02.us.example.com.
103           IN  PTR     host03.us.example.com.
...

Para obter mais informações, consulte a documentação do BIND em /usr/share/doc/bind-version/arm.

Administrando o Serviço de Nomes

O comando rndc permite administrar o serviço named. O serviço é administrado localmente. Se o serviço estiver configurado na seção controls do arquivo /etc/named.conf, você também poderá usar a linha de comando para gerenciar o named remotamente. Para evitar acesso não autorizado ao serviço, rndc deve ser configurado para fazer listening na porta selecionada (por padrão, porta 953), e ambas nomeadas e rndc devem ter acesso à mesma chave. Para gerar uma chave adequada, use o comando rndc-confgen:

sudo rndc-confgen -a

O comando cria o arquivo /etc/rndc.key.

Verifique o status do serviço named da seguinte forma:

sudo rndc status
number of zones: 3
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/1000
tcp clients: 0/100
server is up and running

Se você alterar o arquivo de configuração ou os arquivos de zona named, o comando rndc reload instruirá named a recarregar os arquivos:

sudo rndc reload

Para obter mais informações, consulte as páginas do manual named(8), rndc(8) e rndc-confgen(8).

Executando Pesquisas de DNS

O utilitário host é recomendado para executar pesquisas de DNS. Sem argumentos, o comando exibe um resumo de seus argumentos e opções de linha de comando.

Por exemplo, procure o endereço IP de host01:

host host01

Execute uma pesquisa inversa para o nome de domínio que corresponde a um endereço IP:

sudo host 192.168.2.101

Consulte o DNS para o endereço IP que corresponde a um domínio:

sudo host dns.example.com

Use as opções -v e -t para exibir informações detalhadas sobre registros de um determinado tipo:

sudo host -v -t MX  www.example.com
Trying "www.example.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49643
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;www.example.com.			IN	MX

;; ANSWER SECTION:
www.example.com.		135	IN	CNAME	www.example.com.acme.net.
www.example.com.acme.net. 1240 IN	CNAME	d4077.c.miscacme.net.

;; AUTHORITY SECTION:
c.miscacme.net.	2000	IN	SOA	m0e.miscacme.net. hostmaster.misc.com. ...

Received 163 bytes from 10.0.0.1#53 in 40 ms

A opção -a, que é equivalente às opções -v, -t e ANY, exibe todos os registros disponíveis para uma zona, por exemplo:

sudo host -a www.us.example.com
Trying "www.us.example.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40030
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.us.example.com.			IN	ANY

;; ANSWER SECTION:
www.us.example.com.		263	IN	CNAME	www.us.example.acme.net.

Received 72 bytes from 10.0.0.1#53 in 32 ms

Para obter mais informações, consulte a página do manual host(1).