Servidor DNS Recursivo, Autoritativo e Reverso com Bind9 (IPv4+IPv6) + Fail2ban

bind_configure_tw_mostov

Distribuição utilizada: Debian 8 Jessie / Debian 9 Stretch – Instalação Limpa (Tutorial de instalação aqui)

Ante de iniciar a instalação vamos entender melhor o que é cada um.

DNS RECURSIVO
O DNS recursivo é responsável por procurar os endereços IPs de servidor que você solicitou acesso. Exemplo o DNS que esta configurado na sua máquina.

DNS AUTORITIVO
É o que possui autoridade sobre um nome de domínio, assim como ns1.remontti.net.br é o DNS autoritativo de seu domínio remontti.net.br.
O DNS autoritativo dita qual será o apontamento da tabela de DNS do seu site. Ele vai responder por o domínio que você configurou nele.

DNS REVERSO
Normalmente o DNS atua resolvendo o nome do domínio de um host para um endereço IP correspondente. Já o DNS Reverso resolve o endereço IP, buscando o nome de domínio associado ao host. Ou seja, quando temos disponível o endereço IP de um host e não sabemos o endereço do domínio(nome dado à máquina ou outro equipamento que acesse uma rede), tentamos resolver o endereço IP através do DNS reverso que procura qual nome de domínio está associado aquele endereço. Os servidores que utilizam o DNS Reverso conseguem verificar a autenticidade de endereços, verificando se o endereço IP atual corresponde ao endereço IP informado pelo servidor DNS. Isto evita que alguém utilize um domínio que não lhe pertence para enviar spam, por exemplo.

Para que o DNS Reverso funcione que no registro.br você designa seu bloco apontando para o(os) seu(s) servidor(es) DNS. Se você for um provedor o correto seria você ter ao menos dois servidores DNS em sua rede, uma Master e outro Slave. Neste tutoria foi explicar como criar os dois! 😉

Vamos iniciar com a instalação do nosso servidor Master, lembrando que para isso estou usando a Distribuição linux Debian 8, com uma instalação que eu chamo de limpa, ou seja no processo de instalação foi instalado apenas o sistema básico.

Cenário para nosso exemplo

Domínio: remontti.net.br
Blocos que serei responsável IPv4 250.250.0.0/23 (255.255.254.0) / IPv6 2000:FFF::/32 minha rede ainda conta com alguns blocos de IPs inválidos bem como 192.168.0.0/16, 172.16.0.0/12 e 10.0.0.0/8 que por ventura também irei autorizar consultas recursivas.

Tenho ainda meus servidores, quais ficarão configurado com os seguintes IPs IPv4/IPv6:
ROUTER GW -> 250.250.0.1 / 2000:fff:250:250:0::1
SERV DNS MASTER -> 250.250.0.2 / 2000:fff:250:250:0::2 (ns1)
SERV DNS SLAVE -> 250.250.0.3 / 2000:fff:250:250:0::3 (ns2)
SERV WEB + FTP -> 250.250.0.4 / 2000:fff:250:250:0::4 (www,ftp)
SERV ZABBIX -> 250.250.0.5 / 2000:fff:250:250:0::5 (zabbix)
SERV E-MAILS -> 250.250.0.6 / 2000:fff:250:250:0::6 (mail,imap,pop,smtp)
SERV HOSPEDAGEM * -> 250.250.0.7 / 2000:fff:250:250:0::7 (ns3)

* Inclui outros servidor para demonstrar como irei apontar para eles alguns nos domínios que seremos autoritarivo, lá na frente você vai compreender melhor.

INSTALAÇÃO SERVIDOR DNS MASTER (NS1)

# apt install bind9 dnsutils

Pronto! Nosso servidor recursivo já está funcionando, porém ele está aberto, e isso não é nada legal! Você não vai querer qualquer um utilizando seu servidor para resolver nomes. Vamos resolver isso bem simples.

Antes de mais nada vamos alterar o DNS do nosso servidor fazendo com que ele consulte em si próprio. Essa alteração deve ser feita no arquivo /etc/resolv.conf, eu irei utilizar o editor vim, mas fique a vontade de usar o seu preferido.

# vim  /etc/resolv.conf 

Altere para:

1
2
nameserver 127.0.0.1
search localhost

Feito isso você pode fazer um ping para um domínio e ver se ele resolveu o host.
Agora “mão na massa”! Vamos começar acessando nosso diretório de instalação do Bind que fica em /etc/bind/

# cd /etc/bind

As configurações principal é armazenado nos seguintes arquivos:
named.conf
named.conf.local
named.conf.options

Iremos alterar o named.conf.options, o próprio nome já se auto descreve o que vamos encontrar nele.
Sempre gosto de preservar o arquivo original, então vamos fazer um backup antes de modifica-lo.

# cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bkp

Agora vamos as alterações, vou deixar explicado como comentários dentro no nosso arquivo.

# vim /etc/bind/named.conf.options
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
//ACLs (Access Control Lists)
 
// ACL "permite-recursiva" vão ficar os hosts estão autorizados a fazer 
// consultas recursivas através deste servidor.
acl permite-recursiva {
        127.0.0.1;
        ::1;
        250.250.0.0/23;
        2000:fff::/32;
        192.168.0.0/16;
        172.16.0.0/12;
        10.0.0.0/8;
};
 
options {
    // O diretório de trabalho do servidor
    // Quaisquer caminho não informado será tomado como  padrão este directório
    directory "/var/cache/bind";
 
    //Suporte a DNSSEC
    dnssec-enable yes;
    dnssec-validation auto;
 
    // Conforme RFC1035
    // https://www.ietf.org/rfc/rfc1035.txt
    auth-nxdomain no;
 
    // Respondendo para IPv4 e IPv6
    // Porta 53 estará aberta para ambos v4 e v6
    listen-on { any; };
    listen-on-v6 { any; };
 
    // Limitação da taxa de resposta no sistema de nomes de domínio (DNS RRL)
    rate-limit {
        responses-per-second 15;
        window 5;
    };
 
    // Melhora o desempenho do servidor, reduzindo os volumes de dados de saída.
    // O padrão BIND é (no) não.
    minimal-responses yes;
 
    // Especifica quais hosts estão autorizados a fazer consultas 
    // recursivas através deste servidor.
    // Aqui que você vai informar os IPs da sua rede que você irá permitir consultar os DNS.
    allow-recursion {
        permite-recursiva;
    };
 
    // Endereço estão autorizados a emitir consultas ao cache local,
    // sem acesso ao cache local as consultas recursivas são inúteis.
    allow-query-cache {
        permite-recursiva;
    };
 
    // Especifica quais hosts estão autorizados a fazer perguntas DNS comuns.
    allow-query { any; };
 
    // Especifica quais hosts estão autorizados a receber transferências de zona a partir do servidor.
    // Seu servidor Secundário, no nosso caso vou deixar então o ips dos dois servidores v4 e v6.
    allow-transfer {
        250.250.0.3;
        2000:fff:250:250:0::3;
    };
    also-notify {
        250.250.0.3;
        2000:fff:250:250:0::3;
    };
 
    // Esta opção faz com que o servidor slave ao fazer a transferência de zonas
    // mastes deste servidor nao compile o arquivo, assim no outro servidor o arquivo 
    // da zona terá um texto "puro"
    masterfile-format text;
 
    // Para evitar que vase a versao do Bind, definimos um nome
    version "RR DNS Server";
};

Pronto nosso servidor Recursivo já está funcionando! Caso você não queria seu servidor sendo recursivo apenas altere allow-recursion e allow-query-cache para apenas localhost. Esta também será feita no servidor Slave (ns2).

Agora precisamos apenas dar um restart no bind para que as opções tenham efeito.

# /etc/init.d/bind9 restart

IP REVERSO (NS1 Master)
Vamos a configuração do nosso reverso. Particularmente gosto de dentro da pasta /etc/bind/ criar alguns diretórios quais separo as configurações.

# mkdir /etc/bind/reverse

Somos “donos” do bloco 250.250.0.0/23 que representam dois blocos /24 (250.250.0.0/24 + 250.250.1.0/24). Para facilitar vou fazer a configuração em dois arquivos separando cada bloco /24. É possível colocar tudo em um mesmo arquivo? Sim, mais eu particularmente não gosto 😀
Vamos ter que dar nomes a todos nossos 512 IPs representado pelo nosso /23, no exemplo não vou criar todos, vou por um […] q representa que você deve completar com os demais ips, também vou usar como parado o nome para os IP o próprio endereço IP porém com um abreviação “rev-250-250-X-Y” com exceção nossos servidor já conhecido, ns1, ns2, mail … Vale lembrar que todos esses nomes de hosts serão configurado exatamente posterior na configuração sobre o domínio. Para que quando vc consulte o nome de um IP ele resolva em um nome e ao você consultar este nome ele resolva em um IP, por isso o nome de reverso!
Primeiro arquivo 250.250.0.rev

# vim /etc/bind/reverse/250.250.0.rev

Preste atenção em 0.250.250.in-addr.arpa. essa linha (são duas no arquivo a baixo) ela deve ser alterada com o inverso do seu IP, se seu bloco fosse ex.: 100.200.300.0/24 ficaria 300.200.100.in-addr.arpa. fica ligado 😛
Outra coisa importante é o serial (2017010100) ele esta presente em todos os arquivos e deve ser alterado toda vez que for alterado. Ele segue o padrão [ano-mes-dia-sequencial].

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
$ORIGIN .
$TTL 86400      ; 1 day
0.250.250.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2017010100 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)                        
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)                        
                            )
                    NS      ns1.remontti.net.br.
                    NS      ns2.remontti.net.br.
 
$ORIGIN 0.250.250.in-addr.arpa.
0         PTR     250-250-0-000.remontti.net.br.
1         PTR     router-gw.remontti.net.br.
2         PTR     ns1.remontti.net.br.
3         PTR     ns2.remontti.net.br.
4         PTR     www.remontti.net.br.
5         PTR     zabbix.remontti.net.br.
6         PTR     mail.remontti.net.br.
7         PTR     ns3.remontti.net.br.
8         PTR     250-250-0-8.remontti.net.br.
9         PTR     250-250-0-9.remontti.net.br.
10        PTR     250-250-0-10.remontti.net.br.
11        PTR     250-250-0-11.remontti.net.br.
;
; [...] complete com todos os IPs/Nomes
;
254       PTR     250-250-0-254.remontti.net.br.
255       PTR     250-250-0-255.remontti.net.br.
; fim

Segundo arquivo 250.250.1.rev (observe 1.250.250.in-addr.arpa)

# vim /etc/bind/reverse/250.250.1.rev
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
$ORIGIN .
$TTL 86400      ; 1 day
1.250.250.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2017010100 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)                        
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)                        
                            )
                    NS      ns1.remontti.net.br.
                    NS      ns2.remontti.net.br.
 
$ORIGIN 1.250.250.in-addr.arpa.
0         PTR     250-250-1-0.remontti.net.br.
1         PTR     250-250-1-1.remontti.net.br.
2         PTR     250-250-1-2.remontti.net.br.
3         PTR     250-250-1-3.remontti.net.br.
4         PTR     250-250-1-4.remontti.net.br.
5         PTR     250-250-1-5.remontti.net.br.
6         PTR     250-250-1-6.remontti.net.br.
7         PTR     250-250-1-7.remontti.net.br.
8         PTR     250-250-1-8.remontti.net.br.
9         PTR     250-250-1-9.remontti.net.br.
10        PTR     250-250-1-10.remontti.net.br.
;
; [...] complete com todos os IPs/Nomes
;
253       PTR     250-250-1-253.remontti.net.br.
254       PTR     250-250-1-254.remontti.net.br.
255       PTR     250-250-1-255.remontti.net.br.
; fim

Se possui bloco maiores e diferente, e com um padrão de nomes iguais o modo GENERATE ajuda muito, ficando da seguinte forma:

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
;;;;;;;;;;;;;;;;;;;;;;;
;;;; 250.250.0.rev ;;;; 
;;;;;;;;;;;;;;;;;;;;;;;
 
$ORIGIN .
$TTL 86400      ; 1 day
0.250.250.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2017010100 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)                        
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)                        
                            )
                    NS      ns1.remontti.net.br.
                    NS      ns2.remontti.net.br.
 
$ORIGIN 0.250.250.in-addr.arpa.
0         PTR     250-250-0-000.remontti.net.br.
1         PTR     router-gw.remontti.net.br.
2         PTR     ns1.remontti.net.br.
3         PTR     ns2.remontti.net.br.
4         PTR     www.remontti.net.br.
5         PTR     zabbix.remontti.net.br.
6         PTR     mail.remontti.net.br.
7         PTR     ns3.remontti.net.br.
 
; Os gerados auto
$ORIGIN 0.250.250.in-addr.arpa.
$GENERATE 8-255 $ PTR 250-250-0-$.remontti.net.br.
 
;;;;;;;;;;;;;;;;;;;;;;;
;;;; 250.250.1.rev ;;;; 
;;;;;;;;;;;;;;;;;;;;;;;
 
$ORIGIN .
$TTL 86400      ; 1 day
1.250.250.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2017010100 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)                        
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)                        
                            )
                    NS      ns1.remontti.net.br.
                    NS      ns2.remontti.net.br.
 
 
$ORIGIN 1.250.250.in-addr.arpa.
$GENERATE 0-255 $ PTR 250-250-1-$.remontti.net.br.

Barabada não!? 🙂

Não podemos esquecer nosso reverso do IPv6!

Terceiro arquivo 2000.fff.rev

# vim /etc/bind/reverse/2000.fff.rev
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
$TTL 86400      ; 1 day
@       IN      SOA     ns1.remontti.net.br. hostmaster.remontti.net.br. (
                                2017010100 ; serial
                                10800      ; refresh (3 hours)
                                3600       ; retry (1 hour)                        
                                2419200    ; expire (4 weeks)
                                300        ; minimum (5 minutes)     
                                )
                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.
 
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR router-gw.remontti.net.br.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR ns1.remontti.net.br.
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR ns2.remontti.net.br.
4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR www.remontti.net.br.
5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR zabbix.remontti.net.br.
6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR mail.remontti.net.br.
7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa. IN PTR ns3.remontti.net.br.
 
;
; OU Mais compacto.
;
 
;$ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.0.0.5.2.0.f.f.f.0.0.0.0.2.ip6.arpa.
;1	PTR 	router-gw.remontti.net.br.
;2   	PTR 	ns1.remontti.net.br.
;3   	PTR 	ns2.remontti.net.br.
;4   	PTR 	www.remontti.net.br.
;5   	PTR 	zabbix.remontti.net.br.
;6   	PTR	mail.remontti.net.br.
;7   	PTR 	ns3.remontti.net.br.

Este site http://rdns6.com/hostRecord pode ser bem útil para gerar seus PTRs.
Para finalizar acertando as permissões.

# chown  bind. -R /etc/bind/reverse

Precisamos informar nossas zones “lincar nossos arquivos” para serem interpretado pelo bind, esse arquivo é o named.conf.local, como estamos configurando nosso servidor master essas zonas serão do tipo (type) master e para informar o arquivo onde está a configuração da zone usamos o parâmetro file /caminho-completo/arquivo

# vim /etc/bind/named.conf.local

Adicione nele:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Reverso IPv4
 
zone "0.250.250.in-addr.arpa" {
        type master;
        file "/etc/bind/reverse/250.250.0.rev";
};
 
zone "1.250.250.in-addr.arpa" {
        type master;
        file "/etc/bind/reverse/250.250.1.rev";
};
 
// Reverso IPv6
 
zone "f.f.f.0.0.0.0.2.ip6.arpa" {
        type master;
        file "/etc/bind/reverse/2000.fff.rev";
};

Restart o serviço.

# /etc/init.d/bind9 restart

Vamos ver se ele já está resolvendo nosso IP então!

# dig -x 250.250.0.2 @localhost
# dig -x 2000:fff:250:250:0::2 @localhost

screenshot_20161001_151657

Vamos configurar agora nosso domínio autoritativo remontti.net.br.
Para ficar organizado vou criar a pasta master também.

# mkdir /etc/bind/master
# chown  bind. -R /etc/bind/master

Criamos então nosso arquivo remontti.net.br.hosts na pasta master.

# vim /etc/bind/master/remontti.net.br.hosts
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
$ORIGIN .
$TTL 86400      ; 1 day
remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (                                
                            2017010100 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)                        
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)                        
                            )
 
                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.
 
                        A       250.250.0.4
                        AAAA    2000:fff:250:250:0::4
                        MX      20 mail.remontti.net.br.                        
 
                        TXT     "v=spf1 a mx -all"                        
                        SPF     "v=spf1 a mx -all"
 
$ORIGIN remontti.net.br.
$TTL 10800      ; 3 hours
 
rev-250-250-0-000      A       250.250.0.0
router-gw              A       250.250.0.1
                       AAAA    2000:fff:250:250:0::1
ns1                    A       250.250.0.2
                       AAAA    2000:fff:250:250:0::2
hostmaster             A       250.250.0.2
                       AAAA    2000:fff:250:250:0::2
ns2                    A       250.250.0.3
                       AAAA    2000:fff:250:250:0::3
www                    A       250.250.0.4
                       AAAA    2000:fff:250:250:0::4
ipv6                   AAAA    2000:fff:250:250:0::4
ftp                    A       250.250.0.4
                       AAAA    2000:fff:250:250:0::4
zabbix                 A       250.250.0.5
                       AAAA    2000:fff:250:250:0::5
mail                   A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
imap                   A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
pop                    A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
smtp                   A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
ns3                    A       250.250.0.7
                       AAAA    2000:fff:250:250:0::7
250-250-0-8      	A       250.250.0.8
250-250-0-9      	A       250.250.0.9
250-250-0-10      	A       250.250.0.10
;[...]
;[...]
; complete com toda a faixa do seu bloco 
; no nosso exemplo 250.250.0.0/23
;[...]
;[...]
250-250-0-254      	A       250.250.0.254
250-250-0-255      	A       250.250.0.255
250-250-1-0      	A       250.250.1.0
250-250-1-1      	A       250.250.1.1
;[...]
;[...]
250-250-1-254      	A       250.250.1.254
250-250-1-255      	A       250.250.1.255
; final

Usando GENERATE:

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
$ORIGIN .
$TTL 86400      ; 1 day
remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (                                
                            2017010100 ; serial
                            10800      ; refresh (3 hours)
                            3600       ; retry (1 hour)                        
                            2419200    ; expire (4 weeks)
                            300        ; minimum (5 minutes)                        
                            )
 
                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.
 
                        A       250.250.0.4
                        AAAA    2000:fff:250:250:0::4
                        MX      20 mail.remontti.net.br.                        
 
                        TXT     "v=spf1 a mx -all"                        
                        SPF     "v=spf1 a mx -all"
 
$ORIGIN remontti.net.br.
$TTL 10800      ; 3 hours
 
250-250-0-0            A       250.250.0.0
router-gw              A       250.250.0.1
                       AAAA    2000:fff:250:250:0::1
ns1                    A       250.250.0.2
                       AAAA    2000:fff:250:250:0::2
hostmaster             A       250.250.0.2
                       AAAA    2000:fff:250:250:0::2
ns2                    A       250.250.0.3
                       AAAA    2000:fff:250:250:0::3
www                    A       250.250.0.4
                       AAAA    2000:fff:250:250:0::4
ipv6                   AAAA    2000:fff:250:250:0::4
ftp                    A       250.250.0.4
                       AAAA    2000:fff:250:250:0::4
zabbix                 A       250.250.0.5
                       AAAA    2000:fff:250:250:0::5
mail                   A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
imap                   A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
pop                    A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
smtp                   A       250.250.0.6
                       AAAA    2000:fff:250:250:0::6
ns3                    A       250.250.0.7
                       AAAA    2000:fff:250:250:0::7
 
; Os gerados auto
$ORIGIN remontti.net.br.
$GENERATE 8-255 250-250-0-$ A 250.250.0.$
 
; Os gerados auto
$ORIGIN remontti.net.br.
$GENERATE 8-255 250-250-1-$ A 250.250.1.$

Criamos uma zone para nosso dominio remontti.net.br em named.conf.local

# vim /etc/bind/named.conf.local

Adicione ao final do arquivo:

1
2
3
4
5
6
// Zonas Master
 
zone "remontti.net.br" IN {
        type master;
        file "/etc/bind/master/remontti.net.br.hosts";
};

Restart o serviço.

# /etc/init.d/bind9 restart

Testamos agora para ver se está resolvendo nosso nomes

# dig ANY ns1.remontti.net.br @localhost
# host remontti.net.br

screenshot_20161001_152458

Parabéns! Seu servidor master está pronto!

INSTALAÇÃO SERVIDOR DNS SLAVE (NS2)

Praticamente o processo se repete, com algumas alterações.

# apt install bind9 dnsutils

Alterar o DNS do servidor:

# vim  /etc/resolv.conf 

Altere para:

1
2
nameserver 127.0.0.1
search localhost

Criamos um backup do named.conf.options

# cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bkp

No named.conf.options unica coisa que vai alterar é em allow-transfer, como esse servidor é slave, ele não não tem a necessidade de informar o IP de outro(s) servidores que slaves. Como dito antes, se você não quiser que seu servidor seja recursivo apenas altere allow-recursion e allow-query-cache para localhost.

# vim /etc/bind/named.conf.options
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
//ACLs (Access Control Lists)
 
// ACL "permite-recursiva" vão ficar os hosts estão autorizados a fazer consultas 
// recursivas através deste servidor.
acl permite-recursiva {
        127.0.0.1;
        ::1;
        250.250.0.0/23;
        2000:fff::/32;
        192.168.0.0/16;
        172.16.0.0/12;
        10.0.0.0/8;
};
 
options {
    // O diretório de trabalho do servidor
    // Quaisquer caminho não informado será tomado como  padrão este directório
    directory "/var/cache/bind";
 
    //Suporte a DNSSEC
    dnssec-enable yes;
    dnssec-validation auto;
 
    // Conforme RFC1035
    // https://www.ietf.org/rfc/rfc1035.txt
    auth-nxdomain no;
 
    // Respondendo para IPv4 e IPv6
    // Porta 53 estará aberta para ambos v4 e v6
    listen-on { any; };
    listen-on-v6 { any; };
 
    // Limitação da taxa de resposta no sistema de nomes de domínio (DNS RRL)
    rate-limit {
        responses-per-second 15;
        window 5;
    };
 
    // Melhora o desempenho do servidor, reduzindo os volumes de dados de saída.
    // O padrão BIND é (no) não.
    minimal-responses yes;
 
    // Especifica quais hosts estão autorizados a fazer consultas recursivas através deste servidor.
    // Aqui que você vai informar os IPs da sua rede que você irá permitir consultar os DNS.
    allow-recursion {
        permite-recursiva;
    };
 
    // Endereço estão autorizados a emitir consultas ao cache local,
    // sem acesso ao cache local as consultas recursivas são inúteis.
    allow-query-cache {
        permite-recursiva;
    };
 
    // Especifica quais hosts estão autorizados a fazer perguntas DNS comuns.
    allow-query { any; };
 
    // Especifica quais hosts estão autorizados a receber transferências de zona a partir do servidor. 
    // Como esse já é o secundário, vamos deixar como none.
    allow-transfer { none; };
 
    // Esta opção faz com que o servidor slave ao fazer a transferência de zonas
    // mastes deste servidor nao compile o arquivo, assim no outro servidor o 
    // arquivo da zona tera um texto "puro"
    masterfile-format text;
 
    // Para evitar que vase a versao do Bind, definimos um nome
    version "RR DNS Server";
};

IP REVERSO (SLAVE)

Para organizar criamos duas pastas slave-rev para nossos reveros e slave para nossos dominios slave e alteramos as permissões para nosso user bind poder escrever nelas.

# mkdir /etc/bind/slave-rev
# mkdir /etc/bind/slave
# chown  bind. -R /etc/bind/slave*

Não é mais necessário criar os arquivos pois esses serão transferidos do nosso servidor master. Basta informarmos em nossas zonas do arquivo named.conf.local, que serão do tipo (slave) e apontaremos o IP do master para que nosso servidor slave faça a transferência do master.

# vim /etc/bind/named.conf.local

Adicione nele:

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
// Reverso IPv4
 
zone "0.250.250.in-addr.arpa" {
        type slave;
        file "/etc/bind/slave-rev/250.250.0.rev";
        masters { 250.250.0.2; };
        allow-notify { 250.250.0.2; };
 
};
 
zone "1.250.250.in-addr.arpa" {
        type slave;
        file "/etc/bind/slave-rev/250.250.1.rev";
        masters { 250.250.0.2; };
        allow-notify { 250.250.0.2; };
};
 
// Reverso IPv6
 
zone "f.f.f.0.0.0.0.2.ip6.arpa" {
        type slave;
        file "/etc/bind/slave-rev/2000.fff.rev";
        masters { 2000:fff:250:250:0::2; };
        allow-notify { 2000:fff:250:250:0::2; };
};
 
// Zonas Slave
 
zone "remontti.net.br" IN {
        type slave;
        file "/etc/bind/slave/remontti.net.br.hosts";
        masters { 250.250.0.2; };
        allow-notify { 250.250.0.2; };
};

Restart o serviço e veja se dentro dos diretórios slave e slave-rev os arquivos foram criados.

# /etc/init.d/bind9 restart
# ls -lh slave*

screenshot_20161001_154900

Vamos aos testes.

# dig -x 250.250.0.4 @localhost
# dig ANY ns1.remontti.net.br @localhost

screenshot_20161001_155323

No nosso cenário temos um servidor de hospedagem nesse terei dois domínios, então também quero que meu servidor slave responda por eles. Para isso basta nos adicionar no nosso arquivo named.conf.local:

# vim /etc/bind/named.conf.local
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Zonas Slave do servidor de Hospedagem 
 
zone "meudominio1.net.br" {
        type slave;
        file "/etc/bind/slave/meudominio1.com.br.hosts";
        masters { 250.250.0.7; };
        allow-notify { 250.250.0.7; };
};
 
zone "meudominio2.net.br" {
        type slave;
        file "/etc/bind/slave/meudominio2.com.br.hosts";
        masters { 250.250.0.7; };
        allow-notify { 250.250.0.7; };
};

Restarte o bind e não esqueça que é necessário que seu servidor de hospedagem tenha o IP do seu servidor slave para poder fazer os allow-transfer.

Não esqueça também de alterar nas configurações da sua placa de rede dos seus servidores (dns-nameservers e dns-search).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#
# /etc/network/interfaces
#
auto eth0
iface eth0 inet static
        address 186.250.168.14
        netmask 255.255.255.224
        network 186.250.168.0
        broadcast 186.250.168.31
        gateway 186.250.168.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 127.0.0.1
        dns-search localhost
 
iface eth0 inet6 static
        pre-up modprobe ipv6
        address 2000:fff:250:250:0::2
        netmask 64
        gateway 2000:fff:250:250:0::1

DICA DE SEGURANÇA:

As consultas recursivas são fechada para outros IPs que não esteja na sua ACL permetidos, porém esses IPs tem resposta com negação. Para visualizar esses logs faça o seguinte:

# vim /etc/bind/named.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the 
// structure of BIND configuration files in Debian, *BEFORE* you customize 
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
 
logging {
    channel security_file {
        file "/var/log/named/security.log" versions 3 size 30m;
        severity dynamic;
        print-time yes;
    };
    category security {
        security_file;
    };
};
 
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

Agora crie o diretório que ficarão os logs e de permissão:

# mkdir /var/log/named/
# chown bind. /var/log/named/
# /etc/init.d/bind9 restart

Agora quando alguem não autorizado tentar usar seu DNS sera gerado um log.

Agora vamos a instalação do fail2ban para coloca ordem na casa.

# apt install fail2ban

Vamos habilitar o modulo para começar a proteção, vale lembrar que o modulo SSH já vem ativo por padrão.

Debian 9

#vim /etc/fail2ban/jail.d/defaults-debian.conf
1
2
3
4
5
	[sshd]
	enabled = true
 
	[named-refused]
	enabled = true

Para debian 8 altere as linhas no arquivo /etc/fail2ban/jail.conf.

Se você gosta da coisa “violenta” como eu mude o padrão para DROP!

# vim /etc/fail2ban/action.d/iptables-multiport.conf

Procure:

1
2
3
4
5
6
7
actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype>
# Altere para:
actionban = iptables -A INPUT -s <ip> -j DROP
 
actionunban = <iptables> -D f2b-<name> -s <ip> -j <blocktype>
# Altere para:
actionunban = iptables -D INPUT -s <ip> -j DROP

Agora reinicie o serviço

# /etc/init.d/fail2ban restart

Os IPs que tiverem tentando usar seu DNS serão avisado 5x depois irão tomar um DROP 😛
Para ver as regras do iptables use:

# iptables -nL

DICA ROOT SERVERS E KEYs ATUALIZADO:
Atualize os root servers ele é a alma do seu servidor. Faça isso tanto nos Master quanto no Slave.

# mv /etc/bind/db.root /etc/bind/db.root.`date +%Y%m%d`
# wget https://www.internic.net/domain/named.root -O /etc/bind/db.root --no-check-certificate
# mv /etc/bind/bind.keys /etc/bind/bind.keys.`date +%Y%m%d`
# wget https://ftp.isc.org/isc/bind9/keys/9.11/bind.keys.v9_11 -O /etc/bind/bind.keys --no-check-certificate
# /etc/init.d/bind9 restart

Dica de leitura:
https://pt.wikipedia.org/wiki/Servidor-raiz

NÃO TEM IPv6 CONFIGURADO?:
Se seu servidor não tiver IPv6 configurado recomendo que desative o ipv6 no bind (o que é triste) mas se não tem…

# vim /etc/default/bind9

em OPTIONS=”-u bind” adicione um -4 OPTIONS=”-4 -u bind”

# vim /etc/bind/named.conf.options
listen-on-v6 { any; }; para listen-on-v6 { none; };

FIM! :-)

Gostou? Deixe seu comentário ficarei feliz em saber que lhe ajudei, e se tiver qualquer pergunta deixe-a também, se preferir acesse o menu Consultoria lá você encontra meios de falar comigo!

Abraço!

Fonte: https://ftp.isc.org/isc/bind/9.9.5/doc/arm/
http://www.zytrax.com/books/dns/ch7/statements.html

EXEMPLOS EXTRAS:
Delegando um bloco menor ex /26 para outros servidor.

Entenda melhor. Assista: https://www.youtube.com/watch?v=VIa1dHtmQ4U (~20min)

Base: rfc2317:

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
$ORIGIN 2.0.192.in-addr.arpa.
@       IN      SOA     my-ns.my.domain. hostmaster.my.domain. (...)
;...
;  <<0-127>> /25
0/25            NS      ns.A.domain.
0/25            NS      some.other.name.server.
;
1               CNAME   1.0/25.2.0.192.in-addr.arpa.
2               CNAME   2.0/25.2.0.192.in-addr.arpa.
3               CNAME   3.0/25.2.0.192.in-addr.arpa.
;
;  <<128-191>> /26
128/26          NS      ns.B.domain.
128/26          NS      some.other.name.server.too.
;
129             CNAME   129.128/26.2.0.192.in-addr.arpa.
130             CNAME   130.128/26.2.0.192.in-addr.arpa.
131             CNAME   131.128/26.2.0.192.in-addr.arpa.
;
;  <<192-255>> /26
192/26          NS      ns.C.domain.
192/26          NS      some.other.third.name.server.
;
193             CNAME   193.192/26.2.0.192.in-addr.arpa.
194             CNAME   194.192/26.2.0.192.in-addr.arpa.
195             CNAME   195.192/26.2.0.192.in-addr.arpa.
 
$ORIGIN 0/25.2.0.192.in-addr.arpa.
@       IN      SOA     ns.A.domain. hostmaster.A.domain. (...)
@               NS      ns.A.domain.
@               NS      some.other.name.server.
;
1               PTR     host1.A.domain.
2               PTR     host2.A.domain.
3               PTR     host3.A.domain.

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

119 Resultados

  1. fabio disse:

    Olá, parabéns pelo seu Blog! Muito bom.
    Meu cenário é o seguinte. Compro link dedicado de uma empresa e recebo apenas 1 IP público e este não está designado à minha empresa no registro.br. Tenho um DNS server unbound na minha rede trabalhando de forma recursiva. Existe alguma forma de, considerando meu cenário, eu conseguir fazer com que o nome da minha empresa apareça nos sites de teste de velocidade?

  2. Rodrigo disse:

    Parabéns pelo blog, estava procurando algo do tipo e seu blog me parece bem organizado.
    Vou tentar replicar o seu ambiente.
    🙂

  3. Muito Fera, muito solícito, colocou meu server em ordem e ainda de quebra configurou no registro br. Muito Obrigado Rudimar.

  4. Morosini, Guilhermmy disse:

    Ótimo post, deixo meus parabéns pela iniciativa. Com atenção, seguindo cada passo, não ha erro.

  5. Andre Luiz disse:

    Amigo, muito obrigado pelo belíssimo passo-a-passo. Eu ia contratar um servidor DNS pago, mas acho que sua ajuda vai solucionar meus problemas… aqui, eu instalei só o Recursivo por enquanto.
    Se possível me tirar uma dúvida… tem alguma forma de eu ver o quanto o DNS está sendo usado?

    • Pode usar o statistics-channels

      # vim /etc/bind/named.conf
      statistics-channels {
              inet IP-SERVIDOR  port 8053 allow { SEU-IP-Q-VAI-ACESSAR; };
      };

      Depois acesse: http://IP-SERVIDOR:8053/

      Com um bom estudo vc pode usar statistics-channels para integrar com zabbix, monitorix e ter belos gráficos…

  6. Roberto disse:

    Olá Rudimar, estou com um problema, acredito que seja alguma configuração de qui fiz de forma incorreta, quando desativo o Recursivo o Reverso também para de funcionar, poderia me dar uma luz? hehehe

  7. Olá Rudimar, como faço para que o Registro.br leia o meu reverso? É como se ele nao lesse o dns1.eitelecom.com.br

  8. Robertp disse:

    Boa tarde Rudimar, estou com problema no meu servidor, na resolução de paginas esta dando erro de NXDOMAIN, saberia me dizer onde pode ser que eu tenha errado, para estar apresentando este erro? Desde já agradeço

  9. José Ricardo disse:

    Ótimo tutorial, o mais completo que achei. Porém tenho uma dúvida, hoje tomei a frente de um ISP que estava abandonado pelo antigo administrador, o mesmo não configurou os reversos para o bloco de IP do provedor e o recursivo apresentou falhas e tive que desativar. A pergunta é a seguinte, tenho um servidor Dell 2950, estou pensando em subir um promox nele e dividir em 4 servidores (4x400gb, 4 cores e 4 giga de ram para cada) 1 recursivo, 2 reversos e 1 win7lite, dessa maneira funcionária corretamente?

  10. Erik P. Ghijs disse:

    Rudimar Remontti, bom dia

    Antes, quero parabenizá-lo pelo excelente trabalho, estou querendo montar um DNS autoritativo, reverso em dns cache na mesma maquina, isso e possível? como?, eu ja tenho o DNS cache funcionando inclusive aplique alguma o fail2ban como vc menciona acima e tb fiz alguns bloqueio no iptables seguinto este link:(https://www.vultr.com/docs/how-to-setup-fail2ban-on-debian-9-stretch e https://www.logcg.com/en/archives/1681.html), pois nao consegui utilizar sua regra do fail2ban.

    Abaixo segue minhas configurações, não sou nenhum especialista, então fique a vontade para sugerir melhorias na conf como na segurança, nos outros comentários vi que vc não aconselha utilizar Forwarders, pq? eu achei que ele somava no bind no meu caso com chave, pq toda vez que reiniciamos o bind9 o cache zera?, exite uma manira de não zera?, exite algum site online que possa testa todo meu DNS tanto nas config como segurança?

    Obrigado,

    # vi /etc/bind/named.conf.options

    // ACLs (Access Control Lists)

    // ACL “permite-recursiva” vão ficar os hosts estao autorizado a fazer
    // consultas recursivas atraves deste servidor.
    acl permite-recursiva {
    170.xxx.xxx.xxx/22;
    10.0.254.0/24;
    localhost;
    localnets;
    };

    // ACL “tranf-secundarios” serao os hosts que estao autorizados a receber
    // transferencias de zona a partir do servidor.
    #acl tranf-secundarios {
    # xxx.xxx.xxx.xxx;
    #};

    options {
    directory “/var/cache/bind”;
    managed-keys-directory “/var/cache/bind/dynamic”;
    auth-nxdomain no;
    listen-on-v6 { none; };
    listen-on { permite-recursiva; };
    allow-query { any; };
    recursion yes;
    forwarders {

    // DNS Cloudflare
    1.1.1.1;
    1.0.0.1;

    // Google servers
    8.8.8.8;
    8.8.4.4;

    // Gtei Level3
    4.2.2.1;
    4.2.2.2;
    4.2.2.3;
    4.2.2.4;
    4.2.2.5;
    4.2.2.6;
    209.244.0.3;
    209.244.0.4;

    // GigaDNS
    189.38.95.95;
    189.38.95.96;

    //Opendns
    208.67.222.222;
    208.67.222.220;

    //DNS watch
    84.200.69.80;
    84.200.70.40;
    };

    // Limita o uso da memoria RAM
    datasize 256M;

    version “Nao Disponivel”;

    ### DNSSEC ###
    dnssec-enable no;
    dnssec-validation no;
    dnssec-lookaside auto;

    rate-limit {
    ipv4-prefix-length 32;
    window 10;
    responses-per-second 25;
    errors-per-second 5;
    nxdomains-per-second 5;
    slip 2;
    };

    };

    #Controles
    include “/etc/bind/rndc.key”;
    controls {
    inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; };
    };

    #LOGS
    logging {
    channel query_log {
    file “/var/log/security.log” versions 3 size 30m;
    severity info;
    print-time yes;
    };
    category default {
    query_log;
    };

    channel xfer-log {
    file “/var/log/named.log”;
    print-category yes;
    print-severity yes;
    print-time yes;
    severity info;
    };
    category xfer-in { xfer-log; };
    category xfer-out { xfer-log; };
    category notify { xfer-log; };

    channel update-debug {
    file “/var/log/named-update-debug.log”;
    severity debug 3;
    print-category yes;
    print-severity yes;
    print-time yes;
    };
    channel security-info {
    file “/var/log/named-auth-info.log”;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
    };
    category update { update-debug; };
    category security { security-info; };

    };

    • Forwarders só vai encaminhar, seu servidor só é uma ponte. É natural o cache esvaziar quando reiniciar o serviço. dnssec-enable é obrigatoriamente estar ativo para conversar com os roots servers… Precisaria ajustes melhores…

      forward

      forward ( only | first );
      forward is only relevant in conjunction with a valid forwarders statement. If set to ‘only’ the server will only forward queries, if set to ‘first’ (default) it will send the queries to the forwarder and if not answered will attempt to answer the query. This statement may be used in a zone, view or a global options clause.

      forwarders

      forwarders { ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; … ] };
      forwarders { 10.2.3.4; 192.168.2.5; };
      forwarders defines a list of IP address(es) (and optional port numbers) to which queries will be forwarded. Only relevant when used with the related forward statement. This statement may be used in a zone, view or a global options clause.

  11. Peterson Reimberg disse:

    Boa tarde, Rudimar.

    Seu blog é muito legal parabéns pelo conteúdo e organização.

    Gostaria de configurar meus servidores DNS da seguinte maneira:

    NS1 (Master) este cara seria o Reverso e o Autoritativo.
    NS2 (Slave) este cara iria trabalhar apenas como Reverso.

    Como efetuo a configuração para funcionar corretamente?

    Aguardo seu retorno

  12. Gustavo disse:

    Bom dia; parabéns pelo conteúdo, muito bem produzido e de extrema utilidade, se puder me ajudar em mais uma questão, fiz a configuração do DNS Reverso porem quando dou o comando: dig -x iP @localhost, ele da o seguinte erro: connection timed out; no servers could be reached. saberia me dizer a causa desse erro?

    • Tente colocar o ips que vc usou na ACL direto na string { } em vez de usar o nome da ACL .
      Tive alguns relatos com este mesmo erro, e a solução foi esta, pelo que percebi “belo” windows+putty a levando algum carácter do capeta que faz ele não entender a ACL.

          allow-recursion {
             ip;
             ip;
             ip;
          };
          allow-query-cache {
             ip;
             ip;
             ip;
          };
      • Gustavo disse:

        Fiz o procedimento, mas o erro persiste.

        • Então tem alguma outra coisa errada rsrsrs, as vezes é um simples ponto virgual… Verifica nos logs se ele não esta dizendo qual a linha esta o erro, veja sei o bind esta rodando usando /etc/init.d/bind9 status
          Qual quer coisa presto consultoria, só chamar pelas redes sociais ou pelo telegram @remontti

  13. luiz disse:

    Primeiramente parabéns pelas dicas com bind! Adaptei o seu exemplo para a minha realidade e dentro da rede funcionou perfeitamente. Agora quando tento acessar de fora da empresa, um domínio que está hospedado no servidor, simplesmente não funciona. Eu utilizo um domínio válido, registrado no registro.br. (Apontei os DNS master e slave também no registro.br mas mesmo assim não funciona) Você poderia me ajudar???

  14. Pedro Vila Real disse:

    Boa tarde,
    Primeiro gostaria de agradecer pelo post, muito bom.
    Mais estou tendo um problema, na parte da edição do vim /etc/bind/named.conf.options.
    Eu substitui o conteúdo, pelo descrito no site, porém a resolução de nomes não funciona no próprio servidor.
    Eu substitui o meu bloco de ips pelo seu. Você tem algum comando que possa testar o named.conf.options?

  15. Fabio Araujo disse:

    Boa tarde,
    Subir os meus servidores DNS reverso já tem uns dias e hoje recebir um email informando sobre Alerta: servico mDNS habilitado, como posso fazer pra resolver esse problema.

    Desde já grato pela a atenção.

  16. Cleber disse:

    Bom dia, ótimo tuto parabéns, uma duvida o servidor dns diminui o ping? configurei aqui mas se usar dig ele da 0ms e se uso ping ele da o mesmo tempo que um dns publico, exemplo ping http://www.google.com é isso mesmo ou falta alguma coisa?

  17. Emerson disse:

    Pessoal me tire uma duvida, vejo muitos falarem que não é para utilizar o dns publico na empresa por motivos de segurança, no caso é para configurar um servidor de dns na empresa para resolver os hostnames externos, eu utilizo no resolv.conf o dns da google 8.8.8.8, mas gostaria de saber quando eu configurar o bind para ser meu servidor dns ele resolveria os nomes locais e nomes externos ele resolveria como?, pois para resolver os nomes externos tenho que colocar o opção abaixo, não seria a mesma coisa eu colocando no resolv.conf de qualquer forma ele não encaminharia para o dns da google?

    forwarders {
    8.8.8.8;
    208.67.222.222;
    };

    • A principal vantagem que você terá um tempo de resposta baixo (recursivo). Quanto a segurança vejo muita gente fazendo servidor de DNS e fazendo tudo errado, deixando recursivo aberto, usando distribuições que usam pacotes instáveis cheio de vulnerabilidade (quanto a isso o debian sempre vai estar na frente quando se fala em pacotes seguros. total seguro? não! mas com certeza vai e relação a outras distros) e ai a segurança já era, melhor vc usar um dns publico.
      Usar forwarders? NÃO! Se é pra montar um servidor com forwarders melhor continue então usando dns publico!
      “Monte um servidor DNS de verdade!” Se precisar consultoria entre em contato pelo telegram @remontti
      Antes de tudo entenda com um DNS funciona:
      -> https://www.youtube.com/watch?v=ACGuo26MswI
      -> https://www.youtube.com/watch?v=epWv0-eqRMw

  18. Guilherme disse:

    Aguém tem exemplo de GENERATE pra PTR do ipv6?

  19. Boa tarde Rudimar, belo post, estou seguindo seu tutu para a montagem de um server DNS recursivo e autoritativo, porem empaquei na hora de dar um dig -x X.X.XX @localhost, ele esta me retonando a segunte mensagem (; <> DiG 9.10.3-P4-Debian <> -x 179.106.3.4 @localhost ;; global options: +cmd ;; connection timed out; no servers could be reached), ja revisei todos tudo mas não estou passando dai, porem se eu colocar DNS 8.8.8.8 ele me retorna o resultado do DIG mas não faz consulta locar como quero, você teria alguma ideia do que poderia ser ?

  20. Ledson Alves disse:

    Segui todas as configurações, testei outras mas sempre me retorna o Answer 0….
    Não estou conseguindo configurar o Reverso e Autoritativo, poderia me dar alguma ajuda??

  21. Ledson Alves disse:

    Em uma caso que a rede esta em OSPF e os servidores estão em /30, como ficaria nesse caso a configuração dos arquivos do reverso
    ;;;;;;;;;;;;;;;;;;;;;;;
    ;;;; 100.200.0.rev ;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;

    $ORIGIN .
    $TTL 86400 ; 1 day
    0.200.100.in-addr.arpa IN SOA ns1.exemplo.com.br. hostmaster.exemplo.com.br. (
    2018010300 ; serial
    10800 ; refresh (3 hours)
    3600 ; retry (1 hour)
    2419200 ; expire (4 weeks)
    300 ; minimum (5 minutes)
    )
    NS ns1.exemplo.com.br.
    NS ns2.exemplo.com.br.

    $ORIGIN 0.200.100.in-addr.arpa.
    0 PTR 100-200-0-000.exemplo.com.br.
    21 PTR ns1.exemplo.com.br.
    25 PTR ns2.exemplo.com.br.
    29 PTR zabbix.exemplo.com.br.
    33 PTR radius.exemplo.com.br.

    ; Os gerados auto
    $ORIGIN 0.250.250.in-addr.arpa.
    $GENERATE 50-255 $ PTR 250-250-0-$.exemplo.com.br.

  22. Marquynhos disse:

    Parabéns Cara.. Excelente seu tutorial.. Ajuda muito nós iniciantes..

  23. Este é o melhor procedimento para configuração de servidor DNS! Sempre recorro a esta página para seguir o procedimento e configurar corretamente um servidor DNS completo!

  24. caique disse:

    Na hora que vc deixa ( […] complete com todos os IPs/Nomes ) preciso declarar todos os ips ? , pois no meu bloco de Ips possuem 1024 ips que seriam /22, teria que declarar 1024 ips? pq isso provavelmente levaria horas , não ah uma maneira de declarar apenas uma vez um bloco inteiro? obg

  25. LuanBenato disse:

    Ola amigo como vai, em como eu faço para atualizar meu Bind9 e manter ele sempre atualizado?

    Parabens pelo trabalho

  26. Luan disse:

    Opa, ola amigo sigo seu blog deixa eu tirar uma duvida, o bind 9 como faz para atualizar ele e manter sempre as verçoes mais recente , ex. dia 11 teve a atualização das chaves DNSsec , sera que ele atualizou altomaticamante, se nao, como faz ?

    fico no agrardo grande abraço OTIMO trabalho.

  27. Geyson Phillype disse:

    Olá,

    Grato pela conteúdo, fiz aqui deu tudo certo!
    Mais com meu link cair o registro.br me aviso que não vai anunciar mais por com de perda de comunição!
    Contratei uma VPS, como ficaria um exemplo de configuração com DNS fora da rede?

  28. Douglas de Souza disse:

    Ola, amigo!
    parabens pelo blog, e por este tutorial de excelente qualidade!

    bom… estou configurando o bind9 aqui, numa vps debian, seguindo seu tutorial… fiz tudo conforme prescrito, mas nao consegui alterar o dns, para o dns do proprio servidor… e ao fazer um teste, vejo que e nao esta funcionando as zonas autoritativas, so funciona resursivo….
    queria saber, portanto, se e’ obrigatorio alterar o dns, para o dns do proprio servidor, para que esta funcionalidade de certo, ou senao, se pode esta ocorrendo outro problema…
    tento alterar o dns pelo /etc/resolv.conf, mas quando reinicio a maquina, nao surti efeito; volta as configuracoes anteriores, com o dns que ja estava anteriormente, o dns do proprio servidor… e se altero o dns pelo arquivo /etc/network/interfaces quando reinicio, nao consigo me conectar mais ao vps via ssh, dai tenho que formatar o servidor, para poder voltar e fazer tudo do zero…
    Ja conferi as configuracoes do bind, mas aparentemente esta tudo OK…
    entao, tenho esta duvida, se e’ mesmo obrigatorio alterar o dns, para que o servidor use seu proprio dns, e se for pelo mais dicas para faze-lo… ou entao, o que mais poderia ser o problema?

    bom, queria contar com tua ajuda, e aguardo anciosamente por sua resposta…

    cumprimentos,
    Douglas de Souza

  29. Matheus disse:

    Ola, Rudimar! Tudo certo?

    Bom, primeiramente gostaria de parabeniza-lo pelo seu blog, que tem um conteudo aprofundado e bem elaborado; que o faz se diferenciar de muitos outros blogs com informacoes superficiais, que vemos por ai.
    Mas entao, meu caro….acontece que estou com um problema aqui no para configurar o bind9 e queria ver se pode me ajudar…
    Acontece que gostaria de deixar o bind9 funcionando como um DNS recursivo aberto, e ter acesso a logs com todos os sites acessados… Eu fiz as configuracoes do seu tutorial, deixando o rescursivo habilidado no arquivo de opcoes, mas dai o DNS funcionou apenas em paginas que tenho autoridade, paginas em geral so fica carregando e nao funciona…
    Mas ai fico a entender, que isto pode ser, porque o DNS autoritativo nao pode ser acessado senao por maquinas especificadas na configuracao, seria isto? Mas ai, depois formatei o VPS, e fiz tudo do zero, apenas instalando o bind9, sem fazer configuracoes de dns autoritativo, que tem uma parte no inicio do seu tutorial, que voce diz que ja esta funcionando recursivo, mas ao testar vi que mesmo assim nao funciona de forma recursiva… Ja ate mesmo desativei o iptables e o ufw, para descartar a possibilidade de firewall estar bloqueando alguma porta. E ja testei em duas VPSs diferentes e nao deu certo. Estou fazendo no Ubuntu 16.04…

    Enfim, no que poder me ajudar, ficarei muito grato… Ja coloquei seu blog como favorito e estarei acompanhando o mesmo frequentemente…
    Desde ja agradeco…
    E um forte abraco!

    • Para deixar ele recursivo aberto, basta vc instalar o bind9, é por no named.cond.options

      allow-recursion { any; };
      allow-query-cache { any; };
      allow-query { any; };

      Mas tenha em mente que seu DNS vai virar escravo dos chinês/russo 🙂

      Não sei ql a finalidade… Mas tá aí sua solução.

      • Matheus disse:

        Aehehe! show de bola, meu caro!!! A solucao estava no { any; }; que nao tinha colocado….
        Mas agora sim!, desta forma que voce falou deu certo!
        E so mais uma coisa… sobre logs, voces saberia me dizer como habilitar…? gostaria de visualizar as paginas acessadas, ips, hora, o que for possivel… . isto para tambem ter algum controle de que chineses e russos nao estao no territorio sem meu concentimento… ahahhahh rsrs

        Mais uma vez, muito obrigado! 🙂

  30. Rafael disse:

    Rudimar, eu nao consigo acessar o editor vim /etc/bind/named.conf.options, pelo terminal o que pode ser?

  31. Emerson Rodrigo Batista Ribeiro disse:

    // ACL “permite-recursiva” vão ficar os hosts estão autorizados a fazer
    // consultas recursivas através deste servidor.
    acl permite-recursiva {
    127.0.0.1;
    ::1;
    250.250.0.0/23;
    2000:fff::/32;
    192.168.0.0/16;
    172.16.0.0/12;
    10.0.0.0/8;
    quando uso o allow-recursion permite-recursiva , preciso colocar os ips ou ele pega da acl,

    Otimo blog vc está de parabéns

  32. Emerson Ribeiro disse:

    ola td bem, quando dei o comando ls -lh slave* não é possivel acessar slave*, outra duvida , quando vc usa a frase entre “” , temos que colocar assim tb correto?
    ex // Reverso IPv4

    zone “0.250.250.in-addr.arpa” {
    type slave;
    file “/etc/bind/slave-rev/250.250.0.rev”;
    masters { 250.250.0.2; };
    allow-notify { 250.250.0.2; }
    e parabéns , me ajudou muito

  33. ola boa tarde , e parabéns está me ajudando muito só me surgiu uma duvida , que acho que é até boba mas vamos lá

    $ORIGIN remontti.net.br.
    $TTL 10800 ; 3 hours

    250-250-0-0 A 250.250.0.0
    esse ip representa o que ?

  34. Alex disse:

    Grande Rudimar! Seria bom acrescentar em seu post essa nova informação. http://www.telesintese.com.br/melhora-da-seguranca-no-dns-pode-levar-apagao-da-internet/ . Já está 100% com isso fecha nos 110% kkkkk. Abraço

  35. Gaspar Poletto disse:

    Muito bom amigo!! Preciso de ajuda pois quando dou um tracert de dentro da minha rede aparece router.gw…. ,as quando dou de fora da rede não aparece.

  36. Jonathan disse:

    como fazer o $GENERATE do ipv6 pra por nome em todos os ips ?

    • $GENERATE tem pouco a oferecer na geração de endereços reversos IPv6, e é praticamente impossível você gerar reverso de todas as possíveis combinações, isso tb demandaria um alto gasto de hardware do servidor, por isso o recomendado é fazer apenas o reverso dos endereços estáticos.

  37. Rodrigo disse:

    Rudimar seu blog é demais, este post então nem se fala

    so tenho uma duvida, para eu colocar no registro.br apontando para os ips, sempre da tempo esgotado, o que seria?

    • Valeu!!! 🙂
      Verifica se não tem nenhum firewall na frente.
      Ou pode ter algum erro.
      Verifica: /etc/init.d/bind9 status

      • Rodrigo disse:

        Esta dando este log

        ● bind9.service – BIND Domain Name Server
        Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
        Active: active (running) since Sat 2017-08-05 12:17:14 -03; 9s ago
        Docs: man:named(8)
        Process: 506 ExecStop=/usr/sbin/rndc stop (code=exited, status=1/FAILURE)
        Main PID: 584 (named)
        Tasks: 7 (limit: 4915)
        CGroup: /system.slice/bind9.service
        └─584 /usr/sbin/named -f -u bind

  38. Fábio disse:

    Muito bacana seu site. Conteúdo de qualidade, parabéns!

  39. Thiago disse:

    Para a delegação de DNS menores que /24 (256 IP`s), utiliza-se a norma RFC-2317 para delegar. Como seria feito essas configurações? Preciso delegar para um cliente um /27.
    Encontrei algo parecido abaixo, más não entendi bem.

    Se alguém puderes ajudar, desde já agradeço!

    Segue o que encontrei;

    ORIGEM $ 32-47.0.168.192.in-addr.arpa.
    @ IN SOA ns1.[dominio_ip2]. .[seu_email]. (…)
    @ NS ns1.dominio_2.
    @ NS ns2.dominio_2.
    ;
    32 PTR host1.dominio_2.
    33 PTR host2.dominio_2.
    ;…
    47 PTR host3.dominio_2.

    • Assista: https://www.youtube.com/watch?v=VIa1dHtmQ4U (~20min)

      Veja um ex.:http://www.zytrax.com/books/dns/ch9/reverse.html

      Conforme a rfc2317 ficaria:

      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
      
      Eidnes, et. al.          Best Current Practice                  [Page 2]
      
      RFC 2317           Classless IN-ADDR.ARPA delegation          March 1998
       
       
         space to form the the first component in the name for the zones.  The
         following four zone files show how the problem in the motivation
         section could be solved using this method.
       
         $ORIGIN 2.0.192.in-addr.arpa.
         @       IN      SOA     my-ns.my.domain. hostmaster.my.domain. (...)
         ;...
         ;  <<0-127>> /25
         0/25            NS      ns.A.domain.
         0/25            NS      some.other.name.server.
         ;
         1               CNAME   1.0/25.2.0.192.in-addr.arpa.
         2               CNAME   2.0/25.2.0.192.in-addr.arpa.
         3               CNAME   3.0/25.2.0.192.in-addr.arpa.
         ;
         ;  <<128-191>> /26
         128/26          NS      ns.B.domain.
         128/26          NS      some.other.name.server.too.
         ;
         129             CNAME   129.128/26.2.0.192.in-addr.arpa.
         130             CNAME   130.128/26.2.0.192.in-addr.arpa.
         131             CNAME   131.128/26.2.0.192.in-addr.arpa.
         ;
         ;  <<192-255>> /26
         192/26          NS      ns.C.domain.
         192/26          NS      some.other.third.name.server.
         ;
         193             CNAME   193.192/26.2.0.192.in-addr.arpa.
         194             CNAME   194.192/26.2.0.192.in-addr.arpa.
         195             CNAME   195.192/26.2.0.192.in-addr.arpa.
       
         $ORIGIN 0/25.2.0.192.in-addr.arpa.
         @       IN      SOA     ns.A.domain. hostmaster.A.domain. (...)
         @               NS      ns.A.domain.
         @               NS      some.other.name.server.
         ;
         1               PTR     host1.A.domain.
         2               PTR     host2.A.domain.
         3               PTR     host3.A.domain.
      • Thiago disse:

        Rudimar Remontti,

        Muito Obrigado, até que em fim consegui fazer funcionar.
        É sempre bom contar com pessoas assim como você, humilde e por sua vez com um conhecimento espetacular.

        Obrigado de coração, no que precisar estou à disposiçao.
        Sou um profissional mais voltado para roteamento, BGP, OSPF, Redes DWDM… No que precisar pode contar comigo.

  40. Parabéns Rudimar, fico top. muito bem explicado. é bom de tempos em tempos que alguém que entenda atualize esse tipo de tutorial. tem vários, mas muito confusos. o seu ficou muito claro. Obrigado!

  41. amigo como fica a questao de delegar /30 para um cliente no registro.br

  42. José Eduardo Siqueira Baum disse:

    Não precisa fazer nenhum apontamento no recursivo para os reversos?

  43. José Eduardo S. Baum disse:

    Desculpe minha ignorância, mas e e eu quisesse separar o recursivo do autoritativo reverso do provedro como ficaria as configurações do recursivo?

    • José Eduardo S. Baum

      No seus autoritativo no arquivo named.local.options vc não permite consultas recursivas:

      1
      2
      3
      4
      5
      
      ...
      acl permite-recursiva { localhost;  2000:fff::/32; 192.168.0.0/16; 172.16.5.5 };
      allow-recursion { permite-recursiva; };
      allow-query-cache { permite-recursiva; };
      ...

      E no recursivo você informa os blocos de ips da sua rede que podem consultar… Ou use um ACL com o bloco/ips.

      1
      2
      3
      4
      5
      
      ...
      acl permite-recursiva { localhost;  2000:fff::/32; 192.168.0.0/16; 172.16.5.5 };
      allow-recursion { permite-recursiva; };
      allow-query-cache { permite-recursiva; };
      ...
  44. luan benato disse:

    Opa , entao eu resouvi de outra maneira ,

    Retirando a seguintes linhas
    // Evita problemas com pacotes UDP grande com mais de 512-byte
    server ::/0 {
    edns no;
    };
    server 0.0.0.0/0 {
    edns no;
    };

    e habilitando o dnssec como vem no padrao do Bind9 9.8 >

    //Suporte a DNSSEC
    dnssec-validation auto;

    E o seguinte site acusa que esta OK
    https://dnssec.vs.uni-due.de/

    O que teria de Opções para aumentar a Segurança ?
    Obrigado.

    • LUAN:
      Bacana! Você fechando as consulta recursivas para apenas sua rede já deixa bem seguro.
      Mas se você quiser elevar a segurança você pode instalar o fail2ban e em /etc/fail2ban/jail.conf vc procura pelo bind vai encontrar no próprio arquivo uma “documentação” do que deve ser feito. (Basicamente é colocar o bind gerar logs em um dir para que o fail monitore esses logs) baseado nos erros de reject o fail vai criar regras de firewall (iptables) bloqueando os ips q ficam tentando usar seu dns (por mais q ele nao responda) mas tento um firewall ele vai negar ja a conexão.

  45. luan benato disse:

    Amigo , saberia me informar como habilitar DNSSEC ?

  46. Fabio Araujo disse:

    Boa tarde,

    Amigo como vai tudo bem ?

    Então realizei todos os processos do dns reverso que você posto no seu site, fiquei com uma pequena duvida, como faço dentro do bind pra quando eu digita um site ele automaticamente responder com outro?

    Fico muito grato pelo o conteúdo do site Remontti me ajudou bastante fiz os procedimentos e ficou legal. valeu mesmo

    Fico muito grato se me ajuda com esse ajuste.

    Um forte abraço….

  47. Ednei disse:

    Muito bom,

    So um detalhe no meu quando trasnferiu as zonas ela veio toda desformatada do master para o slave o que pode ser.

  48. Gilvan Muniz disse:

    Meu caro muito bom o conteúdo, mas se possível gostaria de uma ajuda. No meu caso o slave não cria os arquivos. Dei a permissão chown. Mas não cria. Estou só configurando um Master que está em uma vps e um slave que está em outra. Qual as maiores chances de erro? O master rodou direitinho.

    • Gilvan Muniz
      Verifica se você está autorizando o IP do SLAVE no MASTER. allow-transfer

      Veja também se no seu SLAVE você está apontando para o ip do MASTER. No tutorial tinha um erro encontrado pelo Gaspar Poletto, onde esta apontando para o próprio servidor SLAVE.

      zone "1.250.250.in-addr.arpa" {
              type slave;
              file "/etc/bind/slave-rev/250.250.1.rev";
              masters { ****IP-MASTER****; };
              allow-notify { ****IP-MASTER****; };
      };
  49. Gaspar Poletto disse:

    Um Duvida na configuração dos IP Reverso do Slave, segundo a sua lista de ips o IP 250.250.0.3 é o IP do servidor slave.
    Então gostaria de saber se no lugar do 250.250.0.3 no arquivo de configuração do reverso do slave não seria o IP 250.250.0.2?

  50. Lairon Costa disse:

    Excelente tutorial Rudimar, vou configurar uma Ubiquiti EdgePro como servidor DNS e acredito que estas discas serão de grande serventia. Parabéns!

  51. Alex disse:

    Obrigado Rudimar Remontti! Resolvido com seu exemplo. Mais uma vez parabéns.

  52. Alex disse:

    Excelente tutorial! Ajudou bastante e adicionei seu site nos favoritos também. Parabéns! Mas tenho uma duvida se eu quiser fazer o reverso de forma automática com alguns IP já cadastrado.
    Exemplo:

    50.168.192.in-addr.arpa. 86400 IN SOA ns1.teste.com.br. hostmaster.teste.com.br. (
    2015070702 ;serial
    10800 ;refresh
    1800 ;retry
    604800 ;expire
    86400 ) ;minimum
    50.168.192.in-addr.arpa. 86400 IN NS ns1.teste.com.br.
    50.168.192.in-addr.arpa. 86400 IN NS ns2.teste.com.br.
    1.50.168.192.in-addr.arpa. 86400 IN teste.teste.com.br.

    $GENERATE 2-255 $ PTR clientes.192-168-50-$.static.teste.com.br.

    Não funciona! Não resolve nem o teste.teste.com.br e nem os dinâmicos gerados pelo GENERATE. Se eu tirar a linha 1.50.168.192.in-addr.arpa. 86400 IN teste.teste.com.br. funciona o GENERATE normal.

    • Obrigado Alex. Que bom ter ajudado!

      Para usar o GENERATE você pode seguir o exemplo abaixo:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      
      $ORIGIN .
      $TTL 86400      ; 1 day
      50.168.192.in-addr.arpa IN SOA ns1.teste.com.br. hostmaster.teste.com.br. (
                                  2016100100 ; serial
                                  10800      ; refresh (3 hours)
                                  3600       ; retry (1 hour)
                                  2419200    ; expire (4 weeks)
                                  300        ; minimum (5 minutes)
                                  )
                          NS      ns1.teste.com.br.
                          NS      ns2.teste.com.br.
      ; Os fora do padrão
      $ORIGIN 50.168.192.in-addr.arpa.
      0         PTR     broadcast.teste.com.br.
      1         PTR     ns1.teste.com.br.
      2         PTR     ns2.teste.com.br.
       
      ; Os gerados auto
      $ORIGIN 50.168.192.in-addr.arpa.
      $GENERATE 3-255 $ PTR ns$.teste.com.br.

      Equivale:
      3 PTR ns3.teste.com.br.
      4 PTR ns4.teste.com.br.
      5 PTR ns5.teste.com.br.
      […]
      255 PTR ns255.teste.com.br.

      Pode ler mais sobre o assunto em: https://ftp.isc.org/isc/bind/9.9.5/doc/arm/Bv9ARM.ch06.html#id2599541

  53. Erick disse:

    Muto bom cara, já adicionei seu blog nos favoritos, ultimamente estou migrando do Unbound para o Bind por causa de um sevidor Samba DC AD, este tuto me ajudou bastante

  1. 30 de janeiro de 2017

    […] – Ter configurado DNS Autoritativo e Reverso sobre seus IPS. (Não necessariamente no mesmo servidor) 2 – Debian 8 Jessie recomendo uma instalação […]

  2. 20 de fevereiro de 2017

    […] Agora vem a parte legal!! Configurar nosso servidor para resolver nomes (Sevidor DNS) e nele configurar alguns domínios “fake” quais poderemos acessar. Vale lembrar que você não deve fazer isso em uma máquina com IP válido, caso fizer isso vai estar deixando consultas recursivas aberta para o mundo “escravizar-lo”, não vou entrar em detalhes das configurações avançadas do bind, o intuito aqui é ensinar pessoas a ter um cenário para programação web, em um ambiente local. Se deseja saber como configurar um servidor DNS acesse: Servidor DNS Recursivo, Autoritativo e Reverso com Bind9 (IPv4+IPv6). […]

  3. 24 de outubro de 2018

    […] No exemplo vou usar o domínio teste.remontti.com.br, então tenha o subdomínio teste configurado em seu DNS Server […]

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *