Post

DNS com o BIND Parte 4: Validação, Testes e Operação

DNS com o BIND Parte 4: Validação, Testes e Operação

Introdução

Chegamos à etapa final da nossa configuração inicial do servidor BIND. Nas partes anteriores, construímos a fundação, estruturamos a configuração e populamos nossas zonas com registros. Agora, na Parte 4, é hora de garantir que todo o nosso trabalho está correto, funcional e pronto para produção. Vamos validar a sintaxe, testar a resolução de nomes em ambas as views e aprender os comandos essenciais para operar e manter o servidor no dia a dia.

Clique aqui para ir para DNS com o BIND Parte 3: Implementação de Zonas DNS

O que será visto nesta quarta parte

  • Validação de Configuração: Uso das ferramentas named-checkconf e named-checkzone.
  • Gerenciamento do Serviço: Comandos para iniciar, parar e recarregar o BIND.
  • Testes Funcionais: Como usar o dig para testar as views interna e externa.
  • Monitoramento e Depuração: Análise de logs, captura de pacotes e uso do rndc.
  • Troubleshooting: Uma tabela com problemas comuns e suas soluções.
  • Boas Práticas: Rotação de logs e estratégias de backup.

Pré-requisitos

  • Ter um servidor BIND totalmente configurado conforme as Partes 1, 2 e 3, com todas as ACLs, views, arquivos de configuração modulares e zonas devidamente criadas.

1. Validação de Configuração

1.1 Verificação de Sintaxe Global: named-checkconf

Antes de iniciar o serviço named, é mandatório verificar a sintaxe de todos os arquivos de configuração. O named-checkconf é a ferramenta para isso. Usado com a flag -z, ele não apenas verifica o /etc/named.conf, mas também tenta carregar todas as zonas definidas, validando tanto a configuração principal quanto os arquivos de zona de uma só vez.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[gean@ns1 ~]$ sudo named-checkconf -z /etc/named.conf
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone lab4it.com.br/IN: loaded serial 2026020401
zone 32.16.10.in-addr.arpa/IN: loaded serial 2026020401
zone 0.0.0.0.0.0.0.0.0.0.d.f.ip6.arpa/IN: loaded serial 2026020401
zone 1.rev-ip6.lab4it.com.br/IN: loaded serial 2026020401
zone lab4it.com.br/IN: loaded serial 2026020401
zone 113.0.203.in-addr.arpa/IN: loaded serial 2026020401
zone 48.66.128.in-addr.arpa/IN: loaded serial 2026020401
zone 49.66.128.in-addr.arpa/IN: loaded serial 2026020401
zone 50.66.128.in-addr.arpa/IN: loaded serial 2026020401
zone 51.66.128.in-addr.arpa/IN: loaded serial 2026020401
zone 8.b.d.0.1.0.0.2.ip6.arpa/IN: loaded serial 2026020401
zone 0.rev-ip6.lab4it.com.br/IN: loaded serial 2026020401

1.2 Verificação de Zonas Individuais: named-checkzone

Para uma verificação mais granular, o named-checkzone permite validar a sintaxe de um arquivo de zona individualmente, independentemente da configuração principal. Isso é útil para depurar um arquivo de zona específico sem precisar recarregar todo o serviço.

1
2
3
[gean@ns1 ~]$ sudo named-checkzone lab4it.com.br /var/named/zones/internals/forward/lab4it.com.br.zone
zone lab4it.com.br/IN: loaded serial 2026020401
OK
1
2
3
[gean@ns1 ~]$ sudo named-checkzone 32.16.10.in-addr.arpa /var/named/zones/internals/reverse/ipv4/rev-10.16.32.24.ipv4.zone
zone 32.16.10.in-addr.arpa/IN: loaded serial 2026020401
OK

1.3 Visualização da Configuração Efetiva: named-checkconf -p

Às vezes, com múltiplos includes, pode ser difícil visualizar a configuração final que o BIND está realmente usando. A flag -p do named-checkconf resolve isso, imprimindo no stdout toda a configuração consolidada, com todos os arquivos incluídos já expandidos.

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
[gean@ns1 ~]$ sudo named-checkconf -p
acl "iface_v4" {
	127.0.0.1/32;
	10.16.32.2/32;
	203.0.113.2/32;
};
acl "iface_v6" {
	::1/128;
	fd00:0:0:1::2/128;
	2001:db8::2/128;
};
acl "internals_transfers" {
	10.16.32.3/32;
	fd00:0:0:1::3/128;
};
acl "externals_transfers" {
	203.0.113.3/32;
	2001:db8::3/128;
};
acl "internals" {
	::1/128;
	127.0.0.1/32;
	10.0.0.0/8;
	172.16.0.0/12;
	192.168.0.0/16;
	fd00::/48;
};
acl "public" {
	203.0.113.0/24;
	128.66.48.0/22;
	2001:db8::/48;
};
logging {
	channel "security_file" {
		file "/var/log/named/security.log" versions 5 size 52428800;
		severity dynamic;
		print-time yes;
		print-severity yes;
	};
	channel "dnssec_log" {
		file "/var/log/named/dnssec.log" versions 3 size 10485760;
		severity info;
		print-time yes;
	};
	channel "query_log" {
		file "/var/log/named/query.log" versions 10 size 524288000;
		severity info;
		print-time yes;
		print-category yes;
	};
	channel "error_log" {
		file "/var/log/named/errors.log" versions 3 size 15728640;
		severity warning;
		print-time yes;
	};
	channel "xfer_log" {
		file "/var/log/named/xfer.log" versions 3 size 20971520;
		severity info;
		print-time yes;
	};
	channel "validation_log" {
		file "/var/log/named/validation.log" versions 3 size 15728640;
		severity dynamic;
		print-time yes;
	};
	channel "unmatched_log" {
		file "/var/log/named/unmatched.log" versions 3 size 10485760;
		severity info;
		print-time yes;
	};
	category "security" {
		"security_file";
	};
	category "dnssec" {
		"dnssec_log";
		"validation_log";
	};
	category "queries" {
		"query_log";
	};
	category "xfer-in" {
		"xfer_log";
	};
	category "xfer-out" {
		"xfer_log";
	};
	category "notify" {
		"xfer_log";
	};
	category "resolver" {
		"error_log";
		"validation_log";
	};
	category "unmatched" {
		"unmatched_log";
	};
	category "default" {
		"null";
	};
	category "lame-servers" {
		"null";
	};
	category "edns-disabled" {
		"null";
	};
	category "delegation-only" {
		"null";
	};
};
options {
	directory "/var/named";
	dump-file "/var/named/data/cache_dump.db";
	geoip-directory "/usr/share/GeoIP";
	hostname none;
	listen-on port 53 {
		"iface_v4";
	};
	listen-on-v6 port 53 {
		"iface_v6";
	};
	managed-keys-directory "/var/named/dynamic";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	pid-file "/run/named/named.pid";
	recursing-file "/var/named/data/named.recursing";
	secroots-file "/var/named/data/named.secroots";
	server-id none;
	session-keyfile "/run/named/session.key";
	statistics-file "/var/named/data/named_stats.txt";
	version none;
	auth-nxdomain no;
	disable-algorithms "." {
		"RSAMD5";
		"RSASHA1";
		"NSEC3RSASHA1";
		"DSA";
		"NSEC3DSA";
		"ECCGOST";
	};
	disable-ds-digests "." {
		"SHA-1";
		"GOST";
	};
	dnssec-validation yes;
	max-ncache-ttl 300;
	min-cache-ttl 90;
};
view "internals" {
	match-clients {
		"internals";
	};
	trust-anchors {
		"." initial-ds 20326 8 2 "E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D";
	};
	zone "." IN {
		type hint;
		file "named.ca";
	};
	zone "localhost.localdomain" IN {
		type master;
		file "named.localhost";
		allow-update {
			"none";
		};
	};
	zone "localhost" IN {
		type master;
		file "named.localhost";
		allow-update {
			"none";
		};
	};
	zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
		type master;
		file "named.loopback";
		allow-update {
			"none";
		};
	};
	zone "1.0.0.127.in-addr.arpa" IN {
		type master;
		file "named.loopback";
		allow-update {
			"none";
		};
	};
	zone "0.in-addr.arpa" IN {
		type master;
		file "named.empty";
		allow-update {
			"none";
		};
	};
	zone "lab4it.com.br" IN {
		type master;
		file "zones/internals/forward/lab4it.com.br.zone";
	};
	zone "32.16.10.in-addr.arpa" IN {
		type master;
		file "zones/internals/reverse/ipv4/rev-10.16.32.24.ipv4.zone";
	};
	zone "0.0.0.0.0.0.0.0.0.0.d.f.ip6.arpa" IN {
		type master;
		file "zones/internals/reverse/ipv6/rev-fd00.48.ipv6.zone";
	};
	zone "1.rev-ip6.lab4it.com.br" IN {
		type master;
		file "zones/internals/reverse/ipv6/dname-subnet1.ipv6.zone";
	};
	allow-query-cache {
		"internals";
	};
	allow-recursion {
		"internals";
	};
	allow-query {
		"internals";
	};
	allow-transfer {
		"internals_transfers";
	};
	also-notify {
		10.16.32.3;
		fd00:0:0:1::3;
	};
};
view "externals" {
	match-clients {
		"any";
	};
	zone "lab4it.com.br" IN {
		type master;
		file "zones/externals/forward/lab4it.com.br.zone";
	};
	zone "113.0.203.in-addr.arpa" IN {
		type master;
		file "zones/externals/reverse/ipv4/rev-203.0.113.24.ipv4.zone";
	};
	zone "48.66.128.in-addr.arpa" IN {
		type master;
		file "zones/externals/reverse/ipv4/rev-128.66.48.24.ipv4.zone";
	};
	zone "49.66.128.in-addr.arpa" IN {
		type master;
		file "zones/externals/reverse/ipv4/rev-128.66.49.24.ipv4.zone";
	};
	zone "50.66.128.in-addr.arpa" IN {
		type master;
		file "zones/externals/reverse/ipv4/rev-128.66.50.24.ipv4.zone";
	};
	zone "51.66.128.in-addr.arpa" IN {
		type master;
		file "zones/externals/reverse/ipv4/rev-128.66.51.24.ipv4.zone";
	};
	zone "8.b.d.0.1.0.0.2.ip6.arpa" IN {
		type master;
		file "zones/externals/reverse/ipv6/rev-2001_db8.48.ipv6.zone";
	};
	zone "0.rev-ip6.lab4it.com.br" IN {
		type master;
		file "zones/externals/reverse/ipv6/dname-subnet0.ipv6.zone";
	};
	recursion no;
	allow-transfer {
		"externals_transfers";
	};
	also-notify {
		203.0.113.3;
		2001:db8::3;
	};
};

2. Gerenciamento do Serviço BIND

2.1 Status do Serviço

Verifique se o serviço está rodando:

1
2
3
sudo systemctl status named
sudo systemctl list-unit-files --type=service | grep -e ^named.service
sudo systemctl is-enabled named.service

2.2 Recarregar Configuração

Após fazer alterações na configuração, recarregue sem reiniciar:

1
sudo rndc reload

Para recarregar apenas uma zona:

1
sudo rndc reload lab4it.com.br

3. Testes de Funcionalidade

3.1 Teste Básico com dig

O comando dig (Domain Information Groper) é a ferramenta padrão para consultas DNS:

1
dig @localhost lab4it.com.br

3.2 Teste de Diferentes Views

View Internals

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[gean@ns1 ~]$ dig -t ANY lab4it.com.br @10.16.32.2

; <<>> DiG 9.16.23-RH <<>> -t ANY lab4it.com.br @10.16.32.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16192
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 5f88b3bedd0488440100000069860bc60790051cc5b5d8e2 (good)
;; QUESTION SECTION:
;lab4it.com.br.			IN	ANY

;; ANSWER SECTION:
lab4it.com.br.		86400	IN	SOA	ns1.lab4it.com.br. hostmaster.lab4it.com.br. 2026020401 14400 3600 2419200 300
lab4it.com.br.		86400	IN	NS	ns2.lab4it.com.br.
lab4it.com.br.		86400	IN	NS	ns1.lab4it.com.br.

;; Query time: 0 msec
;; SERVER: 10.16.32.2#53(10.16.32.2)
;; WHEN: Fri Feb 06 12:41:58 -03 2026
;; MSG SIZE  rcvd: 153

View Externals

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
[gean@ns1 ~]$ dig -t ANY lab4it.com.br @203.0.113.2

; <<>> DiG 9.16.23-RH <<>> -t ANY lab4it.com.br @203.0.113.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30060
;; flags: qr aa rd; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 32e2993fd12252db0100000069860bdd6565d3984afb638e (good)
;; QUESTION SECTION:
;lab4it.com.br.			IN	ANY

;; ANSWER SECTION:
lab4it.com.br.		86400	IN	SOA	ns1.lab4it.com.br. hostmaster.lab4it.com.br. 2026020401 14400 3600 2419200 300
lab4it.com.br.		86400	IN	NS	ns1.lab4it.com.br.
lab4it.com.br.		86400	IN	NS	ns2.lab4it.com.br.
lab4it.com.br.		86400	IN	A	203.0.113.24
lab4it.com.br.		86400	IN	AAAA	2001:db8::24
lab4it.com.br.		86400	IN	MX	10 mail.lab4it.com.br.
lab4it.com.br.		86400	IN	TXT	"v=spf1 a mx -all"

;; Query time: 0 msec
;; SERVER: 203.0.113.2#53(203.0.113.2)
;; WHEN: Fri Feb 06 12:42:21 -03 2026
;; MSG SIZE  rcvd: 247

3.3 Teste de Resolução Inversa

View Internals

1
2
[gean@ns1 ~]$ dig -x 10.16.32.2 @localhost +short
ns1.lab4it.com.br.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[gean@ns1 ~]$ dig -x fd00:0:0:1::3 @fd00:0:0:1::2

; <<>> DiG 9.16.23-RH <<>> -x fd00:0:0:1::3 @fd00:0:0:1::2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14586
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 9ec35b78dbaf21460100000069860cae8b2782c9698356b7 (good)
;; QUESTION SECTION:
;3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.d.f.ip6.arpa. IN PTR

;; ANSWER SECTION:
1.0.0.0.0.0.0.0.0.0.0.0.0.0.d.f.ip6.arpa. 86400	IN DNAME 1.rev-ip6.lab4it.com.br.
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.d.f.ip6.arpa. 86400	IN CNAME 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.rev-ip6.lab4it.com.br.
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.rev-ip6.lab4it.com.br. 86400 IN PTR ns2.lab4it.com.br.

;; Query time: 0 msec
;; SERVER: fd00:0:0:1::2#53(fd00:0:0:1::2)
;; WHEN: Fri Feb 06 12:45:50 -03 2026
;; MSG SIZE  rcvd: 306

View Externals

1
2
[gean@ns1 ~]$ dig -x 128.66.48.2 @203.0.113.2 +short
host-2.lab4it.com.br.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[gean@ns1 ~]$ dig -x 2001:db8::3 @2001:db8::2

; <<>> DiG 9.16.23-RH <<>> -x 2001:db8::3 @2001:db8::2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44002
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 8664ef517a19c039010000006986226ab1ee425be5481992 (good)
;; QUESTION SECTION:
;3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. IN PTR

;; ANSWER SECTION:
0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. 86400	IN DNAME 0.rev-ip6.lab4it.com.br.
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. 86400	IN CNAME 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.rev-ip6.lab4it.com.br.

;; Query time: 1 msec
;; SERVER: 2001:db8::2#53(2001:db8::2)
;; WHEN: Fri Feb 06 14:18:34 -03 2026
;; MSG SIZE  rcvd: 275

Diferenças entre Resolução Reversa IPv4 e IPv6

Comportamento com recursion no

Quando a recursão está desabilitada (por exemplo, na view externals), o servidor DNS passa a atuar exclusivamente como autoritativo. Nessa condição, o comportamento da resolução reversa difere significativamente entre IPv4 e IPv6.


IPv4 (exemplo: 128.66.48.2)

1
2
dig -x 128.66.48.2 @203.0.113.2 +short
host-2.lab4it.com.br.

A resolução ocorre em uma única consulta, pois o registro PTR está localizado diretamente na árvore DNS autoritativa correspondente (in-addr.arpa), sem necessidade de redirecionamento entre zonas.

Mesmo com recursion no, o servidor consegue responder completamente, pois não há uso de DNAME nem de redirecionamento de subárvore.


IPv6 com DNAME (exemplo: 2001:db8::3)

1
2
dig -x 2001:db8::3 @2001:db8::2 +short
# Retorna apenas DNAME e CNAME

Neste caso, a resposta para no CNAME, e o registro PTR final não é retornado na mesma consulta.

Isso ocorre porque o DNS reverso IPv6, conforme definido na RFC 6672, utiliza DNAME para redirecionar subárvores (por exemplo, de um prefixo /48 para múltiplos /64).

Um servidor autoritativo não pode seguir DNAME/CNAME para resolver dados além do redirecionamento, especialmente quando a recursão está desabilitada.


Por que existe essa diferença?

  • O design do DNS reverso IPv6 utiliza DNAME para permitir delegações escaláveis de prefixos maiores que /64
  • DNAME apenas redireciona, não resolve registros finais (RFC 6672)
  • Com recursion no, o servidor responde somente com dados autoritativos da zona consultada
  • A resolução completa (seguir CNAMEs e obter o PTR final) é responsabilidade do resolver recursivo do cliente

No IPv4, esse cenário não ocorre porque:

  • O PTR normalmente está na mesma árvore autoritativa
  • Ou utiliza-se CNAME (RFC 2317), que pode ser seguido pelo resolver sem redirecionamento de subárvore

Como testar corretamente em ambientes sem recursão

Em views autoritativas sem recursão (como externals), a resolução reversa IPv6 ocorre em duas etapas explícitas:

1
2
# 1. Obter o DNAME / CNAME retornado pela zona /48
dig -x 2001:db8::3 @2001:db8::2 +noall +answer
1
2
3
# 2. Consultar diretamente o nome canônico gerado
dig 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.rev-ip6.lab4it.com.br \
    @2001:db8::2 PTR

Essa segunda consulta retorna o registro PTR corretamente, confirmando que a delegação via DNAME está funcional e conforme as RFCs.


Conclusão

A ausência do PTR na primeira consulta IPv6 não indica erro de configuração. Trata-se de um comportamento esperado, padronizado e RFC-compliant ao usar DNAME em ambientes autoritativos sem recursão.

Essa diferença reflete uma escolha arquitetural do DNS reverso IPv6, e não uma limitação do BIND ou da implementação.


3.4 Teste de Carga

Para testar o desempenho sob carga:

1
for i in {1..1000}; do dig lab4it.com.br @203.0.113.2 > /dev/null; done

4. Monitoramento e Depuração

4.1 Monitoramento de Logs

Ver logs em tempo real

1
tail -f /var/named/data/named.run

Ver logs do systemd

1
journalctl -u named -f

Ver logs de consultas

1
tail -f /var/log/named/query.log

4.2 Captura de Pacotes com tcpdump

Capture tráfego DNS para análise:

1
sudo tcpdump -i any -n port 53

4.3 Monitoramento com rndc

Limpar cache

1
sudo rndc flush

Despejar cache para arquivo

1
2
sudo rndc dumpdb -cache
cat /var/named/data/named_dump.db

Gerar estatísticas

1
2
sudo rndc stats
cat /var/named/data/named_stats.txt

5. Resolução de Problemas Comuns

Tabela de Troubleshooting

ProblemaCausa ProvávelSolução
BIND não iniciaErro de sintaxe em /etc/named.confsudo named-checkconf /etc/named.conf
Zona não carregaErro no arquivo de zonasudo named-checkzone zona /caminho/zona.zone
Permissão negadaContexto SELinux incorretosudo restorecon -Rv /var/named/zones
Não responde após reboot/etc/resolv.conf foi reescritosudo chattr +i /etc/resolv.conf
Logs vaziosPermissão do diretório de logssudo chown -R named:named /var/log/named
SERVFAIL em respostasErro no servidor ou zonaVerificar /var/log/named/errors.log
Consultas lentasCache cheio ou disco lentosudo rndc flush e verificar I/O
Firewall bloqueandoPorta 53 não abertasudo firewall-cmd --permanent --add-service=dns

6. Rotação de Logs

Os logs do BIND podem crescer rapidamente. Configure rotação automática:

6.1 Arquivo de Configuração

Crie /etc/logrotate.d/named:

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
# /etc/logrotate.d/named
/var/log/named/*.log {
    daily                      # Rotação diária
    missingok                  # Ignora arquivos ausentes
    rotate 90                  # Manter 90 dias
    compress                   # Compactar arquivos antigos
    delaycompress              # Compactar apenas do log anterior
    notifempty                 # Não rotacionar se vazio
    create 0640 named named    # Criar novo arquivo com permissões
    sharedscripts              # Executar scripts uma vez
    dateext                    # Adicionar data no nome
    dateformat -%Y%m%d         # Formato: -YYYYMMDD
    maxsize 500M               # Rotacionar se atingir 500M
    
    postrotate
        # Recarregar BIND após rotação
        /usr/bin/rndc reload > /dev/null 2>&1 || true
    endscript
}

# Regra especial para query.log (volume muito maior)
/var/log/named/query.log {
    daily
    rotate 30                  # Manter 30 dias
    compress
    delaycompress
    notifempty
    create 0640 named named
    sharedscripts
    dateext
    dateformat -%Y%m%d
    maxsize 1G                 # Rotacionar se atingir 1G
    
    postrotate
        /usr/bin/rndc querylog > /dev/null 2>&1 || true
    endscript
}

7. Backup da Configuração

Implemente uma estratégia de backup:

1
2
3
4
5
6
7
8
# 1. Backup da configuração atual
sudo cp -a /etc/named.conf /etc/named.conf.bak-$(date +%Y%m%d)

# 2. Backup de todas as zonas
sudo tar -czf /backup/bind-zones-$(date +%Y%m%d).tar.gz /var/named/zones/

# 3. Backup da configuração completa
sudo tar -czf /backup/bind-config-$(date +%Y%m%d).tar.gz /etc/named/

Conclusão

Chegamos ao fim desta jornada inicial de configuração de um servidor BIND. Ao longo destas quatro partes, saímos de um sistema operacional limpo para um servidor DNS totalmente funcional, seguro e com configuração modular. Validamos nossas configurações, testamos exaustivamente as views interna e externa e aprendemos as ferramentas essenciais para a operação diária. Agora você tem uma base sólida para administrar um dos serviços mais críticos da internet.


Próximos Passos

Com o servidor primário configurado e validado, o próximo passo lógico é aumentar a resiliência do nosso ambiente configurando um servidor secundário, que obterá as informações de zona automaticamente do primário.

Clique aqui para ir para DNS com o BIND Parte 5: Configuração do Servidor Secundário


Referências Completas


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