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:
Para recarregar apenas uma zona:
1
| sudo rndc reload lab4it.com.br
|
3. Testes de Funcionalidade
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
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.
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
Ver logs de consultas
1
| tail -f /var/log/named/query.log
|
Capture tráfego DNS para análise:
1
| sudo tcpdump -i any -n port 53
|
Limpar cache
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
| Problema | Causa Provável | Solução |
|---|
| BIND não inicia | Erro de sintaxe em /etc/named.conf | sudo named-checkconf /etc/named.conf |
| Zona não carrega | Erro no arquivo de zona | sudo named-checkzone zona /caminho/zona.zone |
| Permissão negada | Contexto SELinux incorreto | sudo restorecon -Rv /var/named/zones |
| Não responde após reboot | /etc/resolv.conf foi reescrito | sudo chattr +i /etc/resolv.conf |
| Logs vazios | Permissão do diretório de logs | sudo chown -R named:named /var/log/named |
| SERVFAIL em respostas | Erro no servidor ou zona | Verificar /var/log/named/errors.log |
| Consultas lentas | Cache cheio ou disco lento | sudo rndc flush e verificar I/O |
| Firewall bloqueando | Porta 53 não aberta | sudo 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