Post

Configuração de Zonas DNS no BIND: Diretas e Reversas

Configuração de Zonas DNS no BIND: Diretas e Reversas

Este é o terceiro artigo de nossa série sobre implementação e configuração do DNS BIND no Oracle Linux 9. No primeiro artigo, abordamos os conceitos fundamentais do DNS e a preparação do ambiente. No segundo artigo, realizamos a instalação e configuração básica do servidor DNS. Agora, vamos avançar para a configuração de zonas DNS.

Introdução

As zonas DNS são o coração de qualquer servidor DNS autoritativo. Elas contêm os registros que mapeiam nomes de domínio para endereços IP e outros recursos, permitindo que o servidor responda a consultas com informações autoritativas sobre os domínios que gerencia.

Neste artigo, vamos explorar em detalhes como criar e configurar zonas DNS no BIND, tanto zonas diretas (forward zones) quanto zonas reversas (reverse zones). Abordaremos a estrutura e sintaxe dos arquivos de zona, os diferentes tipos de registros DNS e como verificar e testar a configuração.

Ao final deste tutorial, você terá um servidor DNS completamente funcional, capaz de resolver nomes para IPs (resolução direta) e IPs para nomes (resolução reversa) para seus domínios.

Conceitos Fundamentais de Zonas DNS

Antes de mergulharmos na configuração prática, vamos revisar alguns conceitos fundamentais sobre zonas DNS.

Tipos de Zonas

Como mencionamos no primeiro artigo da série, existem diferentes tipos de zonas:

  1. Zonas Diretas (Forward Zones): Mapeiam nomes de domínio para endereços IP e outros recursos
  2. Zonas Reversas (Reverse Zones): Mapeiam endereços IP para nomes de domínio
  3. Zonas Stub: Contêm apenas os registros NS para os servidores autoritativos de uma zona
  4. Zonas Hint: Contêm informações sobre os servidores raiz do DNS

Neste artigo, focaremos nas zonas diretas e reversas, que são as mais comuns e essenciais.

Tipos de Registros DNS

Os registros DNS (Resource Records) são as unidades básicas de informação em uma zona DNS. Cada registro tem um tipo que define seu propósito e formato. Revisaremos os tipos mais comuns:

  • SOA (Start of Authority): Define parâmetros globais para a zona
  • NS (Name Server): Define servidores de nomes autoritativos para a zona
  • A: Mapeia um nome para um endereço IPv4
  • AAAA: Mapeia um nome para um endereço IPv6
  • CNAME (Canonical Name): Cria um alias para outro nome de domínio
  • MX (Mail Exchange): Define servidores de email para o domínio
  • PTR (Pointer): Usado em zonas reversas para mapear IPs para nomes
  • TXT (Text): Armazena texto arbitrário, frequentemente usado para verificações e políticas
  • SRV (Service): Define localização de serviços específicos

Estrutura de um Arquivo de Zona

Um arquivo de zona típico segue esta estrutura:

  1. Diretivas de Controle: Como $TTL (Time To Live) e $ORIGIN
  2. Registro SOA: Define parâmetros globais para a zona
  3. Registros NS: Definem os servidores de nomes autoritativos
  4. Registros MX: Definem os servidores de email (opcional)
  5. Outros Registros: A, AAAA, CNAME, TXT, etc.
+-----------------------------------------------------+
| ; Comentários começam com ponto e vírgula          |
+-----------------------------------------------------+
| $TTL 86400          ; Diretiva: TTL Padrão          |
| $ORIGIN example.com.  ; Diretiva: Domínio Base        |
+-----------------------------------------------------+
| @  IN SOA ns1.example.com. admin.example.com. (     |
|                 2025051901  ; Serial                |
|                 10800       ; Refresh               |
|                 3600        ; Retry                 |
|                 604800      ; Expire                |
|                 86400       ; Minimum TTL           |
|                 )           ; Registro SOA (Obrigatório)|
+-----------------------------------------------------+
|    IN NS   ns1.example.com. ; Registros NS          |
|    IN NS   ns2.example.com. ; (Servidores de Nomes) |
+-----------------------------------------------------+
|    IN MX   10 mail.example.com. ; Registros MX      |
|    IN MX   20 mail2.example.com. ; (Servidores Email)|
+-----------------------------------------------------+
| www IN A    192.168.200.10  ; Registros A (IPv4)    |
| ns1 IN A    192.168.200.49  ;                       |
+-----------------------------------------------------+
| www IN AAAA 2001:db8::10    ; Registros AAAA (IPv6) |
+-----------------------------------------------------+
| ftp IN CNAME www            ; Registros CNAME (Alias)|
+-----------------------------------------------------+
| @   IN TXT  "v=spf1..."     ; Registros TXT (Texto) |
+-----------------------------------------------------+
| ... outros registros (SRV, PTR em reversa, etc.)    |
+-----------------------------------------------------+

Figura 1: Estrutura típica de um arquivo de zona DNS

Planejamento de Zonas

Antes de começar a criar zonas, é importante planejar cuidadosamente quais zonas você precisará e quais registros cada uma conterá.

Exemplo de Planejamento

Para este tutorial, vamos usar o seguinte cenário:

  • Domínio Principal: example.com
  • Rede Interna: 192.168.200.0/24
  • Rede DMZ: 172.16.0.0/24
  • Rede Pública: 203.0.113.0/24 (exemplo de endereço público)
  • Rede IPv6: 2001:db8::/64 (exemplo de endereço IPv6)

Com base neste cenário, precisaremos das seguintes zonas:

  1. Zona Direta: example.com
  2. Zona Reversa IPv4 (Interna): 200.168.192.in-addr.arpa
  3. Zona Reversa IPv4 (DMZ): 0.16.172.in-addr.arpa
  4. Zona Reversa IPv4 (Pública): 113.0.203.in-addr.arpa
  5. Zona Reversa IPv6: 8.b.d.0.1.0.0.2.ip6.arpa

Configuração de Zonas Diretas

Vamos começar configurando uma zona direta para o domínio example.com.

+-----------------------+      Consulta Direta      +-----------------------+
| Nome: www.example.com | ------------------------> | IP: 192.168.200.10    |
+-----------------------+                           +-----------------------+
          ^                                                   |
          | Mapeamento (Registro A/AAAA)                      |
          +---------------------------------------------------+

+-----------------------+      Consulta Reversa     +-----------------------+
| Nome: www.example.com | <------------------------ | IP: 192.168.200.10    |
+-----------------------+                           +-----------------------+
          |                                                   ^          
          | Mapeamento (Registro PTR em zona reversa)         |
          +---------------------------------------------------+
          (Zona: 200.168.192.in-addr.arpa)

Figura 2: Comparação entre resolução direta e reversa

Definição da Zona no named.conf

Primeiro, precisamos definir a zona no arquivo de configuração principal do BIND. Edite o arquivo /etc/named.conf:

1
sudo vi /etc/named.conf

Adicione a definição da zona ao final do arquivo, antes das inclusões de arquivos padrão:

1
2
3
4
5
6
7
8
9
// ================================================================================
// Forward Zones
// ================================================================================
zone "example.com" IN {
    type master;
    file "zones/example.com.zone";
    allow-transfer { dns_servers; };
    allow-update { none; };
};

Esta configuração define:

  • O nome da zona: “example.com”
  • O tipo da zona: “master” (primária)
  • O arquivo que contém os registros da zona: “zones/example.com.zone”
  • Quem pode solicitar transferências de zona: apenas os servidores definidos na ACL “dns_servers”
  • Quem pode atualizar a zona dinamicamente: ninguém

Criação do Arquivo de Zona

Agora, vamos criar o arquivo de zona para example.com:

1
sudo vi /var/named/zones/example.com.zone

Adicione o seguinte conteúdo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
; Zone file for example.com
$TTL 86400      ; 1 day default TTL
$ORIGIN example.com.

; SOA Record
@       IN SOA  ns1.example.com. admin.example.com. (
                    2025051901  ; Serial
                    10800       ; Refresh (3 hours)
                    3600        ; Retry (1 hour)
                    604800      ; Expire (1 week)
                    86400       ; Minimum TTL (1 day)
                    )

; NS Records
        IN NS   ns1.example.com.
        IN NS   ns2.example.com.

; MX Records
        IN MX   10 mail.example.com.
        IN MX   20 mail2.example.com.

; A Records for Name Servers
ns1     IN A    192.168.200.49
ns2     IN A    192.168.200.50

; A Records for Mail Servers
mail    IN A    192.168.200.20
mail2   IN A    192.168.200.21

; A Records for Web Servers
www     IN A    192.168.200.10
        IN A    192.168.200.11  ; Round-robin DNS for load balancing

; AAAA Records (IPv6)
ns1     IN AAAA 2001:db8::49
ns2     IN AAAA 2001:db8::50
www     IN AAAA 2001:db8::10
mail    IN AAAA 2001:db8::20

; CNAME Records
ftp     IN CNAME www
webmail IN CNAME mail

; TXT Records
@       IN TXT  "v=spf1 mx ip4:192.168.200.0/24 -all"
_dmarc  IN TXT  "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"

; SRV Records
_ldap._tcp      IN SRV  0 1 389 ldap.example.com.
_kerberos._udp  IN SRV  0 1 88  kdc.example.com.

Explicação do Arquivo de Zona

Vamos analisar cada seção do arquivo de zona:

Diretivas de Controle

1
2
$TTL 86400      ; 1 day default TTL
$ORIGIN example.com.
  • $TTL: Define o Time To Live padrão para registros que não especificam um TTL próprio
  • $ORIGIN: Define o domínio base para nomes relativos no arquivo

Registro SOA (Start of Authority)

1
2
3
4
5
6
7
@       IN SOA  ns1.example.com. admin.example.com. (
                    2025051901  ; Serial
                    10800       ; Refresh (3 hours)
                    3600        ; Retry (1 hour)
                    604800      ; Expire (1 week)
                    86400       ; Minimum TTL (1 day)
                    )

O registro SOA contém informações administrativas sobre a zona:

  • @: Representa o domínio base ($ORIGIN)
  • ns1.example.com.: O servidor DNS primário para a zona
  • admin.example.com.: O endereço de email do administrador (com @ substituído por .)
  • Serial: Número de versão do arquivo de zona, geralmente no formato YYYYMMDDnn
  • Refresh: Intervalo em que servidores secundários verificam atualizações
  • Retry: Intervalo para nova tentativa após falha de atualização
  • Expire: Tempo após o qual a zona é considerada inválida se não for atualizada
  • Minimum TTL: TTL mínimo para registros negativos (NXDOMAIN)

Nota: É crucial incrementar o número serial sempre que você fizer alterações no arquivo de zona. Isso garante que servidores secundários detectem e apliquem as alterações.

Registros NS (Name Server)

1
2
        IN NS   ns1.example.com.
        IN NS   ns2.example.com.

Estes registros definem os servidores de nomes autoritativos para o domínio.

Registros MX (Mail Exchange)

1
2
        IN MX   10 mail.example.com.
        IN MX   20 mail2.example.com.

Estes registros definem os servidores de email para o domínio, com prioridades (10 é maior prioridade que 20).

Registros A e AAAA

1
2
ns1     IN A    192.168.200.49
ns1     IN AAAA 2001:db8::49

Estes registros mapeiam nomes para endereços IPv4 (A) e IPv6 (AAAA).

Registros CNAME (Canonical Name)

1
ftp     IN CNAME www

Este registro cria um alias “ftp” que aponta para “www”.

Registros TXT (Text)

1
@       IN TXT  "v=spf1 mx ip4:192.168.200.0/24 -all"

Este registro define uma política SPF (Sender Policy Framework) para o domínio.

Registros SRV (Service)

1
_ldap._tcp      IN SRV  0 1 389 ldap.example.com.

Este registro define a localização do serviço LDAP, incluindo prioridade (0), peso (1), porta (389) e host (ldap.example.com).

Definição de Permissões e Contexto SELinux

Após criar o arquivo de zona, precisamos definir as permissões e o contexto SELinux corretos:

1
2
3
sudo chown root:named /var/named/zones/example.com.zone
sudo chmod 640 /var/named/zones/example.com.zone
sudo restorecon -v /var/named/zones/example.com.zone

Verificação da Sintaxe da Zona

Antes de recarregar o servidor DNS, é importante verificar a sintaxe do arquivo de zona:

1
sudo named-checkzone example.com /var/named/zones/example.com.zone

Se a zona estiver correta, você verá uma mensagem como:

1
2
zone example.com/IN: loaded serial 2025051901
OK

Configuração de Zonas Reversas

As zonas reversas permitem a resolução reversa, ou seja, a tradução de endereços IP para nomes de domínio. Isso é importante para várias aplicações, incluindo logs, autenticação e verificações de segurança.

Zonas Reversas para IPv4

Para redes IPv4, as zonas reversas usam o domínio especial in-addr.arpa. O nome da zona é formado invertendo os octetos do endereço de rede e adicionando o sufixo in-addr.arpa.

Por exemplo, para a rede 192.168.200.0/24, a zona reversa seria 200.168.192.in-addr.arpa.

Definição da Zona Reversa no named.conf

Adicione a definição da zona reversa ao arquivo /etc/named.conf:

1
2
3
4
5
6
7
8
9
// ================================================================================
// Reverse Zones
// ================================================================================
zone "200.168.192.in-addr.arpa" IN {
    type master;
    file "zones/200.168.192.in-addr.arpa.zone";
    allow-transfer { dns_servers; };
    allow-update { none; };
};

Criação do Arquivo de Zona Reversa

Crie o arquivo de zona reversa:

1
sudo vi /var/named/zones/200.168.192.in-addr.arpa.zone

Adicione o seguinte conteúdo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
; Reverse zone file for 192.168.200.0/24
$TTL 86400      ; 1 day default TTL
$ORIGIN 200.168.192.in-addr.arpa.

; SOA Record
@       IN SOA  ns1.example.com. admin.example.com. (
                    2025051901  ; Serial
                    10800       ; Refresh (3 hours)
                    3600        ; Retry (1 hour)
                    604800      ; Expire (1 week)
                    86400       ; Minimum TTL (1 day)
                    )

; NS Records
        IN NS   ns1.example.com.
        IN NS   ns2.example.com.

; PTR Records
10      IN PTR  www.example.com.
11      IN PTR  www.example.com.
20      IN PTR  mail.example.com.
21      IN PTR  mail2.example.com.
49      IN PTR  ns1.example.com.
50      IN PTR  ns2.example.com.

Explicação do Arquivo de Zona Reversa

A estrutura do arquivo de zona reversa é similar à da zona direta, com algumas diferenças:

  1. O $ORIGIN é o nome da zona reversa (200.168.192.in-addr.arpa.)
  2. Em vez de registros A/AAAA, usamos registros PTR (Pointer)
  3. Os nomes à esquerda são os últimos octetos dos endereços IP

Por exemplo, o registro:

1
10      IN PTR  www.example.com.

Mapeia o endereço IP 192.168.200.10 para o nome www.example.com.

Zonas Reversas para IPv6

Para redes IPv6, as zonas reversas usam o domínio especial ip6.arpa. O processo é similar ao IPv4, mas com uma diferença importante: cada dígito hexadecimal do endereço IPv6 se torna um nível na hierarquia DNS, e a ordem é invertida.

Por exemplo, para a rede 2001:db8::/64, a zona reversa seria 8.b.d.0.1.0.0.2.ip6.arpa.

Definição da Zona Reversa IPv6 no named.conf

1
2
3
4
5
6
zone "8.b.d.0.1.0.0.2.ip6.arpa" IN {
    type master;
    file "zones/8.b.d.0.1.0.0.2.ip6.arpa.zone";
    allow-transfer { dns_servers; };
    allow-update { none; };
};

Criação do Arquivo de Zona Reversa IPv6

1
sudo vi /var/named/zones/8.b.d.0.1.0.0.2.ip6.arpa.zone

Adicione o seguinte conteúdo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
; Reverse zone file for 2001:db8::/64
$TTL 86400      ; 1 day default TTL
$ORIGIN 8.b.d.0.1.0.0.2.ip6.arpa.

; SOA Record
@       IN SOA  ns1.example.com. admin.example.com. (
                    2025051901  ; Serial
                    10800       ; Refresh (3 hours)
                    3600        ; Retry (1 hour)
                    604800      ; Expire (1 week)
                    86400       ; Minimum TTL (1 day)
                    )

; NS Records
        IN NS   ns1.example.com.
        IN NS   ns2.example.com.

; PTR Records
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR www.example.com.
0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR mail.example.com.
9.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR ns1.example.com.
0.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR ns2.example.com.

Nota: A notação para registros PTR IPv6 pode ser bastante extensa. Algumas implementações do BIND suportam uma notação mais curta usando o caractere \, mas a notação completa é mais compatível.

Definição de Permissões e Contexto SELinux para Zonas Reversas

Como fizemos para a zona direta, precisamos definir as permissões e o contexto SELinux corretos para os arquivos de zona reversa:

1
2
3
4
5
6
7
sudo chown root:named /var/named/zones/200.168.192.in-addr.arpa.zone
sudo chmod 640 /var/named/zones/200.168.192.in-addr.arpa.zone
sudo restorecon -v /var/named/zones/200.168.192.in-addr.arpa.zone

sudo chown root:named /var/named/zones/8.b.d.0.1.0.0.2.ip6.arpa.zone
sudo chmod 640 /var/named/zones/8.b.d.0.1.0.0.2.ip6.arpa.zone
sudo restorecon -v /var/named/zones/8.b.d.0.1.0.0.2.ip6.arpa.zone

Verificação da Sintaxe das Zonas Reversas

Verifique a sintaxe dos arquivos de zona reversa:

1
2
sudo named-checkzone 200.168.192.in-addr.arpa /var/named/zones/200.168.192.in-addr.arpa.zone
sudo named-checkzone 8.b.d.0.1.0.0.2.ip6.arpa /var/named/zones/8.b.d.0.1.0.0.2.ip6.arpa.zone

Recarregando o Servidor DNS

Após configurar todas as zonas e verificar sua sintaxe, precisamos recarregar o servidor DNS para que as alterações entrem em vigor:

1
sudo rndc reload

Ou, se preferir reiniciar o serviço:

1
sudo systemctl restart named

Verificação e Testes

Agora que configuramos as zonas e recarregamos o servidor DNS, vamos realizar alguns testes para verificar se tudo está funcionando corretamente.

Teste de Resolução Direta

Vamos testar a resolução de nomes para IPs:

1
dig @localhost ns1.example.com

Você deve ver uma resposta como:

1
2
;; ANSWER SECTION:
ns1.example.com.     86400   IN      A       192.168.200.49

Teste outros registros:

1
2
3
dig @localhost www.example.com
dig @localhost mail.example.com
dig @localhost example.com MX

Teste de Resolução Reversa

Agora, vamos testar a resolução reversa (IP para nome):

1
dig @localhost -x 192.168.200.49

Você deve ver uma resposta como:

1
2
;; ANSWER SECTION:
49.200.168.192.in-addr.arpa. 86400 IN PTR ns1.example.com.

Teste outros endereços IP:

1
2
dig @localhost -x 192.168.200.10
dig @localhost -x 192.168.200.20

Teste de Resolução IPv6

Se você configurou zonas IPv6, teste-as também:

1
2
dig @localhost AAAA ns1.example.com
dig @localhost -x 2001:db8::49

Verificação de Transferência de Zona

Para verificar se a transferência de zona está funcionando corretamente (e restrita aos servidores autorizados), tente solicitar uma transferência de zona:

1
dig @localhost example.com AXFR

Se suas ACLs estiverem configuradas corretamente, esta solicitação deve falhar a menos que seja feita de um servidor autorizado.

Técnicas Avançadas de Configuração de Zonas

Agora que dominamos as configurações básicas de zonas, vamos explorar algumas técnicas avançadas.

Uso de $GENERATE para Grandes Blocos de Registros

A diretiva $GENERATE permite criar múltiplos registros similares de forma eficiente. Isso é especialmente útil para zonas reversas com muitos registros.

Exemplo para uma zona reversa:

1
2
; Gerar PTR records para hosts de 1 a 100
$GENERATE 1-100 $ IN PTR host-$.example.com.

Isso gera registros PTR para host-1.example.com até host-100.example.com.

Para IPv6, você pode usar:

1
2
; Gerar PTR records para hosts IPv6
$GENERATE 1-100 $ IN PTR host-$.example.com.

Inclusão de Arquivos

Para organizar melhor arquivos de zona grandes, você pode usar a diretiva $INCLUDE para dividir o arquivo em partes menores:

1
2
3
4
5
; Incluir arquivo com registros de servidores web
$INCLUDE /var/named/zones/example.com.web.zone

; Incluir arquivo com registros de servidores de email
$INCLUDE /var/named/zones/example.com.mail.zone

Wildcards

Os wildcards permitem criar registros que correspondem a múltiplos subdomínios:

1
2
; Wildcard para subdomínios
*.example.com.    IN A    192.168.200.100

Este registro fará com que qualquer subdomínio não definido explicitamente (como random.example.com) seja resolvido para 192.168.200.100.

Nota: Use wildcards com cautela, pois podem causar comportamentos inesperados e problemas de segurança se mal configurados.

TTLs Específicos por Registro

Embora tenhamos definido um TTL padrão com a diretiva $TTL, você pode especificar TTLs diferentes para registros individuais:

1
2
; Registro com TTL específico (300 segundos = 5 minutos)
www     300     IN A    192.168.200.10

Isso é útil para registros que mudam com frequência e precisam de um TTL menor.

Configuração de Zonas em Views

Se você estiver usando views (como discutimos no artigo anterior para implementar DNS Split-Horizon), a configuração de zonas é ligeiramente diferente. As zonas são definidas dentro dos blocos de view, não no nível global.

Exemplo de Configuração com Views

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
view "internal" {
    match-clients { internal_networks; };
    
    zone "example.com" IN {
        type master;
        file "zones/internal/example.com.zone";
        allow-transfer { dns_servers; };
    };
    
    zone "200.168.192.in-addr.arpa" IN {
        type master;
        file "zones/internal/200.168.192.in-addr.arpa.zone";
        allow-transfer { dns_servers; };
    };
    
    // Include standard zones
    include "/etc/named.rfc1912.zones";
};

view "external" {
    match-clients { any; };
    
    zone "example.com" IN {
        type master;
        file "zones/external/example.com.zone";
        allow-transfer { dns_servers; };
    };
    
    zone "113.0.203.in-addr.arpa" IN {
        type master;
        file "zones/external/113.0.203.in-addr.arpa.zone";
        allow-transfer { dns_servers; };
    };
};

Nesta configuração:

  • A view “internal” contém zonas com informações internas (usando endereços IP privados)
  • A view “external” contém zonas com informações públicas (usando endereços IP públicos)
  • As zonas têm o mesmo nome, mas arquivos diferentes

Estrutura de Diretórios para Views

Para organizar melhor os arquivos de zona quando usando views, é recomendável criar uma estrutura de diretórios separada para cada view:

1
2
sudo mkdir -p /var/named/zones/internal
sudo mkdir -p /var/named/zones/external

Atualizações Dinâmicas

O BIND suporta atualizações dinâmicas, permitindo que registros DNS sejam adicionados, modificados ou removidos sem editar manualmente os arquivos de zona. Isso é útil para integração com DHCP e outros sistemas automatizados.

Configuração de Atualizações Dinâmicas

Para permitir atualizações dinâmicas, você precisa:

  1. Definir quem pode atualizar a zona
  2. Configurar uma chave de autenticação

Exemplo de configuração:

1
2
3
4
5
6
7
8
9
10
11
12
13
// Definição da chave
key "dhcp-key" {
    algorithm hmac-sha256;
    secret "your-base64-encoded-secret-key";
};

// Configuração da zona
zone "example.com" IN {
    type master;
    file "zones/example.com.zone";
    allow-transfer { dns_servers; };
    allow-update { key dhcp-key; };
};

Geração de Chave para Atualizações Dinâmicas

Para gerar uma chave segura:

1
sudo dnssec-keygen -a HMAC-SHA256 -b 256 -n HOST dhcp-key

Este comando gera dois arquivos: Kdhcp-key.+xxx+yyyyy.key e Kdhcp-key.+xxx+yyyyy.private. O arquivo .key contém a chave pública, e o arquivo .private contém a chave privada.

Extraia a chave do arquivo .private:

1
sudo cat Kdhcp-key.*.private | grep Key

Use esta chave no campo “secret” da definição da chave.

Troubleshooting de Zonas DNS

Mesmo com uma configuração cuidadosa, problemas podem surgir. Aqui estão algumas situações comuns e como resolvê-las:

Problema: Zona Não Carrega

Verificação:

1
sudo rndc zonestatus example.com

Possíveis soluções:

  1. Verifique a sintaxe do arquivo de zona: sudo named-checkzone example.com /var/named/zones/example.com.zone
  2. Verifique permissões e contexto SELinux: ls -laZ /var/named/zones/example.com.zone
  3. Verifique logs: sudo tail -f /var/log/named/general.log

Problema: Resolução Direta Funciona, mas Reversa Não

Verificação:

1
dig @localhost -x 192.168.200.49

Possíveis soluções:

  1. Verifique se a zona reversa está definida corretamente no named.conf
  2. Verifique a sintaxe do arquivo de zona reversa
  3. Verifique se os registros PTR estão corretos (formato e nomes de domínio)

Problema: Transferência de Zona Falha

Verificação:

1
dig @primary_server example.com AXFR

Possíveis soluções:

  1. Verifique as ACLs allow-transfer no servidor primário
  2. Verifique a conectividade de rede entre os servidores
  3. Verifique logs em ambos os servidores

Problema: Atualizações Dinâmicas Falham

Verificação:

1
2
3
4
5
nsupdate -k Kdhcp-key.+xxx+yyyyy.private
> server localhost
> zone example.com
> update add test.example.com 300 A 192.168.200.123
> send

Possíveis soluções:

  1. Verifique a configuração allow-update na zona
  2. Verifique se a chave está correta
  3. Verifique permissões do arquivo de zona (named precisa poder escrever nele)
  4. Verifique o boolean SELinux named_write_master_zones: sudo getsebool named_write_master_zones

Melhores Práticas para Configuração de Zonas

Para finalizar, aqui estão algumas melhores práticas para configuração de zonas DNS:

1. Organização e Documentação

  • Use comentários extensivamente nos arquivos de zona
  • Agrupe registros por tipo ou função
  • Mantenha uma documentação separada das zonas e registros
  • Use nomes de arquivo consistentes e descritivos

2. Segurança

  • Restrinja transferências de zona apenas a servidores secundários autorizados
  • Use TSIG ou outras formas de autenticação para transferências de zona
  • Implemente DNSSEC para zonas importantes
  • Limite atualizações dinâmicas apenas a hosts autorizados

3. Manutenção

  • Incremente o número serial sempre que fizer alterações
  • Use um formato de serial consistente (YYYYMMDDNN é recomendado)
  • Mantenha backups regulares dos arquivos de zona
  • Documente todas as alterações em um log de mudanças

4. Desempenho

  • Use TTLs apropriados para diferentes tipos de registros
  • Considere TTLs menores para registros que mudam com frequência
  • Use $GENERATE para grandes blocos de registros similares
  • Divida zonas muito grandes em zonas menores quando apropriado

Conclusão e Próximos Passos

Neste terceiro artigo da série, configuramos zonas DNS diretas e reversas, exploramos a estrutura e sintaxe dos arquivos de zona, implementamos diferentes tipos de registros DNS e aprendemos técnicas avançadas de configuração de zonas.

Agora temos um servidor DNS completamente funcional, capaz de resolver nomes para IPs e IPs para nomes para nossos domínios. Esta é a base para configurações mais avançadas que abordaremos nos próximos artigos.

O que vem a seguir?

No próximo artigo, “Views e DNS Split-Horizon no BIND”, abordaremos em detalhes:

  • Conceito e benefícios das views no BIND
  • Implementação de DNS Split-Horizon
  • Configuração de view interna para redes locais
  • Configuração de view externa para internet
  • Testes e validação de diferentes views

Não perca! Nossa jornada para dominar o DNS BIND no Oracle Linux 9 continua.

Referências e Recursos Adicionais

This post is licensed under CC BY 4.0 by the author.