Configurando DHCP com DNS (Bind9) na rede local - Debian Linux

Esse artigo pretende auxiliar na configuração integrada de dois serviços DNS e DHCP em um único servidor Linux. Esses serviços são extremamente úteis na administração de redes de computadores.

[ Hits: 165.590 ]

Por: Rogério Sousa Guimarães em 05/12/2008 | Blog: http://rojeryo.dyndns.org


Criando zonas



Depois de configurar named.conf.local, devemos criar os arquivos que servirão de base de dados, para converter nome de hosts em ip ou vice versa.

O arquivo da base de dados da zona é composto pelos parâmetros global e outras informações (informações dos hosts que são adicionados).

Parâmetros globais:

@         IN SOA   server.exemplo. root.exemplo. (
            2          ; serial
            28800      ; refresh (8 hours)
            14400      ; retry (4 hours)
            3600000    ; expire (5 weeks 6 days 16 hours)
            86400      ; minimum (1 day)
            )

Onde:
  • @ --> indica o domínio, sem a necessidade de escrevê-lo;
  • IN --> indica que a rede é TCP/IP;
  • SOA (Start Of Authority) --> indica que esses registros são parâmetros globais;
  • server.exemplo. --> indica o servidor que tem autoridade sobre a zona;
  • root.exemplo. --> indica o e-mail do usuário responsável pelo domínio;
  • serial --> é um contador, a cada vez que a zona é alterada esse valor aumenta, normalmente é utilizado para atualização do servidor secundário, caso o serial dele seja inferior;
  • refresh --> é o período de tempo (em segundos) em que o servidor secundário se atualizará;
  • retry --> é o período de tempo (em segundos) em que o servidor secundário tentará atualizar novamente caso tenha erro em alguma tentativa;
  • expire --> é o tempo que o servidor secundário ficará respondendo caso não consiga se comunicar com o servidor primário;
  • minimum --> é o tempo que uma consulta ficará armazenada em cache.

Outras Informações:

@         IN NS   server.exemplo.
server      IN A   192.168.100.1
1         IN PTR   server.exemplo.

Onde:
  • @ e IN --> já foram comentados acima;
  • NS (Name Server) --> indica o servidor de nomes da zona;
  • A (Address) --> indica os hosts com seus respectivos endereços IP, essa informação é utilizada para converter nome em endereço IP, essa informação consta na zona normal;
  • PTR (Pointer) --> indica on endereço IP com seus respectivo hosts, essa informação é utilizada para endereço IP em nome, essa informação consta apenas na zona reversa.

Segue modelo da base de dados que será utilizado para armazenar a zona local.

# vim /etc/bind/db.exemplo

$TTL 43200   ; 12 hours
@         IN SOA   server.exemplo. root.exemplo. (
            2          ; serial
            28800      ; refresh (8 hours)
            14400      ; retry (4 hours)
            3600000    ; expire (5 weeks 6 days 16 hours)
            86400      ; minimum (1 day)
            )
@         IN NS   server.exemplo.
server      IN A   192.168.100.1

Para fazer o download do db.exemplo completo, clique aqui.

Segue modelo da base de dados, que será utilizado para armazenar a zona local reversa:

# vim /etc/bind/ db.100.168.192.in-addr.arpa

$TTL 43200   ; 12 hours
@          IN SOA   server.exemplo. root.exemplo. (
            1          ; serial
            28800      ; refresh (8 hours)
            14400      ; retry (4 hours)
            3600000    ; expire (5 weeks 6 days 16 hours)
            86400      ; minimum (1 day)
            )
@         IN NS   server.exemplo.
1         IN PTR   server.exemplo.

Para fazer o download do db.100.168.192.in-addr.arpa completo, clique aqui.

Conclusão

Mudando permissão do diretório BIND.

Para que o próprio BIND possa criar seus arquivos de zona journal é necessário dar permissão, através do comando:

# chmod g+w /etc/bind

Depois de ter realizado as devidas configurações, reinicie o serviço de DNS (BIND9) através do comando:

# /etc/init.d/bind9 restart

Log da inicialização do serviço de DNS (bind9):
Nov 28 15:39:20 server named[2905]: starting BIND 9.5.0-P2 -u bind
Nov 28 15:39:20 server named[2905]: found 2 CPUs, using 2 worker threads
Nov 28 15:39:20 server named[2905]: loading configuration from '/etc/bind/named.conf'
Nov 28 15:39:20 server named[2905]: listening on IPv6 interfaces, port 53
Nov 28 15:39:20 server named[2905]: listening on IPv4 interface lo, 127.0.0.1#53
Nov 28 15:39:20 server named[2905]: listening on IPv4 interface eth0, 192.168.100.1#53
Nov 28 15:39:20 server named[2905]: command channel listening on 127.0.0.1#953
Nov 28 15:39:20 server named[2905]: command channel listening on ::1#953
Nov 28 15:39:20 server named[2905]: zone 0.in-addr.arpa/IN: loaded serial 1
Nov 28 15:39:20 server named[2905]: zone 127.in-addr.arpa/IN: loaded serial 1
Nov 28 15:39:20 server named[2905]: zone 100.168.192.in-addr.arpa/IN: loaded serial 7
Nov 28 15:39:20 server named[2905]: zone 255.in-addr.arpa/IN: loaded serial 1
Nov 28 15:39:20 server named[2905]: zone exemplo/IN: loaded serial 11
Nov 28 15:39:20 server named[2905]: zone localhost/IN: loaded serial 2
Nov 28 15:39:20 server named[2905]: running

Testando serviço de DNS:

Caso a estação de trabalho esteja com o sistema operacional Windows, você poderá reiniciar a conexão de rede através dos comandos:

# ipconfig /release
# ipconfig /renew


Lembrando que a conexão de rede deve estar configurada para obter IP dinamicamente.

Caso a estação de trabalho seja com o sistema operacional Linux (Debian), você poderá reiniciar a conexão de rede através do comando:

# /etc/init.d/networking restart

Lembrando que a conexão de rede (/etc/network/interface) deve estar configurada para DHCP.

Testado em:
  • Debian Lenny 2.6.24-1-686.
  • Bind 9.5.0-P2
  • DHCP Server V3.1.1

Página anterior    

Páginas do artigo
   1. Introdução
   2. Configuração básica do DHCP
   3. Integrando DHCP com DNS (BIND)
   4. Configurando DNS (BIND)
   5. Criando zonas
Outros artigos deste autor

Instalando Debian Lenny no laptop Lenovo ThinKPad SL400

Diagrama Entidade-Relacionamento com Dia e tedia2sql para o PostgreSQL

Leitura recomendada

Conkyzando e atalhando o Lubuntu 12.10

Xen - XL.cfg - Sintaxe da Configuração de Domínios - Parte II

Como gerenciar cotas de disco

Como alterar o MAC Address no Linux Mint (spoof mac)

Modo texto no Ubuntu 10.10 definitivo rápido e prático!

  
Comentários
[1] Comentário enviado por Credmann em 07/12/2008 - 01:07h

Excelente artigo, parabéns. Só um adendo sobre permissões:
`/etc/bind/', por padrão pertence ao root e suas permissões não devem ser alteradas por questões de segurança. No caso do Ubuntu, o AppArmor impede a escrita mesmo que as permissões sejam alteradas. Por isso, recomenda-se que `db.100.168.192.in-addr.arpa' seja colocado em `/var/lib/bind/'.

[2] Comentário enviado por ErhnamDjinm em 08/12/2008 - 08:01h

Só um detalhe importante. A grande maioria dos tutoriais sobre integração DNS+DHCP mostra uando rede classe C.
Mas quando em classe A ou B, no arquivo de base da dados do DNS reverso deve-se colocar os IP's invertidos.
Ex.:
Para colocar um IP 172.16.0.2 você faz:

$TTL 43200 ; 12 hours
@ IN SOA server.exemplo. root.exemplo. (
1 ; serial
28800 ; refresh (8 hours)
14400 ; retry (4 hours)
3600000 ; expire (5 weeks 6 days 16 hours)
86400 ; minimum (1 day)
)
@ IN NS server.exemplo.
2.0 IN PTR server.exemplo.

Para colocar um IP 10.20.30.5 você faz:

$TTL 43200 ; 12 hours
@ IN SOA server.exemplo. root.exemplo. (
1 ; serial
28800 ; refresh (8 hours)
14400 ; retry (4 hours)
3600000 ; expire (5 weeks 6 days 16 hours)
86400 ; minimum (1 day)
)
@ IN NS server.exemplo.
5.30.20 IN PTR server.exemplo.


[3] Comentário enviado por rojeryo em 08/12/2008 - 09:48h

Caro Credmann,

Obrigado pela contribuição, eu não cheguei a testar no UBUNTU...


Abs,

Rogério

[4] Comentário enviado por rojeryo em 08/12/2008 - 09:55h

Caro Erhnam,

Realmente a maioria dos tutorias são escritos na classe C em virtude do tamanho da rede, ou seja, não compensa utilizar classe A ou B para um parte de 70 workstations, como é meu caso hoje...

Sua contribuição está correta para classe A e B, ou seja:
Para classe C deve-se informar X
Para classe B deve-se informar X.X
Para classe A deve-se informar X.X.X

Abs,

Rogério

[5] Comentário enviado por edilsonrsouza em 08/12/2008 - 17:01h

Estou testando o seu tutorial. Só que quando a maquina cliente vai pega o IP, no log me dar a seguinte mensagem:
client 192.168.0.1#51272: update '0.168.192.in-addr.arpa/IN' denied

Você sabe o que pode ser?

[6] Comentário enviado por rojeryo em 08/12/2008 - 20:53h

Edilson,


Erro de permissão, gostaria de ver o log de inicialização do serviço de DNS... Capture o log e envie para rojeryo@gmail.com...

Outro detalhe leia a mensagem postado pelo Credmann!!!

Abs,

Rogério


[7] Comentário enviado por edilsonrsouza em 09/12/2008 - 09:05h

Na realidade quando eu vi o erro de permissão, foi a primeira coisa que eu fiz foi o que o Credmann comenta. Só que mesmo assim ele continua mostrando o erro. Agora eu estou usando o Ubuntu Server 8.10. E já enviei o logo para o seu email.

Edilson

[8] Comentário enviado por rojeryo em 09/12/2008 - 15:11h

Caros colegas,


O problema que o Edilson me relatou estava ocorrendo porque tinha erro na escrita de uma sintaxe e erro na escrita de uma zona...


Abs,


Rogério



[9] Comentário enviado por edilsonsouza em 11/12/2008 - 14:30h

Rogerio o log esta apresentando a seguinte mensagem:
Dec 11 13:17:10 doulos named[28784]: automatic empty zone: D.F.IP6.ARPA
Dec 11 13:17:10 doulos named[28784]: automatic empty zone: 8.E.F.IP6.ARPA
Dec 11 13:17:10 doulos named[28784]: automatic empty zone: 9.E.F.IP6.ARPA
Dec 11 13:17:10 doulos named[28784]: automatic empty zone: A.E.F.IP6.ARPA
Dec 11 13:17:10 doulos named[28784]: automatic empty zone: B.E.F.IP6.ARPA
Dec 11 13:17:10 doulos named[28784]: default max-cache-size (33554432) applies: view _bind
Dec 11 13:17:10 doulos named[28784]: command channel listening on 127.0.0.1#953
Dec 11 13:17:10 doulos named[28784]: zone 0.in-addr.arpa/IN: loaded serial 1
Dec 11 13:17:10 doulos named[28784]: zone 127.in-addr.arpa/IN: loaded serial 1
Dec 11 13:17:10 doulos named[28784]: zone 0.168.192.in-addr.arpa/IN: journal rollforward failed: no more
Dec 11 13:17:10 doulos named[28784]: zone 255.in-addr.arpa/IN: loaded serial 1
Dec 11 13:17:10 doulos named[28784]: zone srvlinux.com.br/IN: journal rollforward failed: no more
Dec 11 13:17:10 doulos named[28784]: zone localhost/IN: loaded serial 2
Dec 11 13:17:10 doulos named[28784]: running
Dec 11 13:20:01 doulos /USR/SBIN/CRON[28795]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Dec 11 13:20:02 doulos console-kit-daemon[28794]: CRITICAL: cannot initialize libpolkit
Dec 11 13:20:31 doulos dhcpd: DHCPDISCOVER from 00:0f:1f:ae:08:e1 via eth0
Dec 11 13:20:32 doulos dhcpd: DHCPOFFER on 192.168.0.11 to 00:0f:1f:ae:08:e1 (estacao01) via eth0
Dec 11 13:20:32 doulos dhcpd: Unable to add forward map from estacao01.srvlinux.com.br to 192.168.0.11: timed out
Dec 11 13:20:32 doulos dhcpd: DHCPREQUEST for 192.168.0.11 (10.101.40.150) from 00:0f:1f:ae:08:e1 (estacao01) via eth0
Dec 11 13:20:32 doulos dhcpd: DHCPACK on 192.168.0.11 to 00:0f:1f:ae:08:e1 (estacao01) via eth0

[10] Comentário enviado por Credmann em 26/12/2008 - 22:00h

O problema é que Bind além de poder escrever nos arquivos também precisa criar os *.jnl correspondentes. Isto implica nas permissões do diretório também. É por isso que é recomendado que os arquivos estejam em /var/lib/bind ou /var/cache/bind. Verifique as permissões no AppArmour.

[11] Comentário enviado por maumauns em 26/04/2010 - 09:43h

Não estou conseguindo esta dando a seguinte mensagem de erro

Stopping domain name service...: bind9rndc: connection to remote host closed
This may indicate that
* the remote server is using an older version of the command protocol,
* this host is not authorized to connect,
* the clocks are not syncronized, or
* the key is invalid.

Ja atualzei a data e hora, gerei novas chaves mais nada do problema ser resolvido...

[12] Comentário enviado por alerocha79 em 04/06/2010 - 19:46h

Problema resolvido. O problema era :

Stopping domain name service...: bind9rndc: connection to remote host closed
This may indicate that
* the remote server is using an older version of the command protocol,
* this host is not authorized to connect,
* the clocks are not syncronized, or
* the key is invalid.

Meu named.conf :

key "rndc-key" {
algorithm hmac-md5;
secret "xxxxxxxxxxxxx";
};


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

include "/etc/bind/named.conf.options";

(...)

Meu dhcpd.conf:

ddns-update-style interim;
default-lease-time 6000;
max-lease-time 72000;
log-facility local7;

key "rndc-key" {
algorithm hmac-md5;
secret "xxxxxxxxxxxxxxx";
};


# DNS zones to update
zone 3.168.192.in-addr.arpa. {
primary 192.168.3.1;
key rndc-key;
}

zone alex.net.br. {
primary 192.168.3.1;
key rndc-key;
}

(...)

Meu named.conf.local:

zone "xxxxx.net.br" {
type master;
file "/var/cache/bind/db.xxxxxx";
allow-update { key "rndc-key"; };

};

zone "3.168.192.in-addr.arpa" {
type master;
file "/var/cache/bind/rev.xxxxxx";
allow-update { key "rndc-key"; };
};


SOLUÇÃO: Por incrível que apareça é só reiniciar o linux, no meu caso o Debian. Aí reiniciei o bind9 e a mensagem de erro não apareceu. Brincadeira!!!! Dois dias tentando arrumar o bendito rndc!!!!

Mensagens:
DHCP iniciado:
Jun 4 18:38:28 localhost dhcpd: Internet Systems Consortium DHCP Server V3.1.1
Jun 4 18:38:28 localhost dhcpd: Copyright 2004-2008 Internet Systems Consortium.
Jun 4 18:38:28 localhost dhcpd: All rights reserved.
Jun 4 18:38:28 localhost dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Jun 4 18:38:28 localhost dhcpd: Internet Systems Consortium DHCP Server V3.1.1
Jun 4 18:38:28 localhost dhcpd: Copyright 2004-2008 Internet Systems Consortium.
Jun 4 18:38:28 localhost dhcpd: All rights reserved.
Jun 4 18:38:28 localhost dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Jun 4 18:38:28 localhost dhcpd: Wrote 4 leases to leases file.

Bind iniciado:
Jun 4 18:37:43 localhost named[3557]: automatic empty zone: D.F.IP6.ARPA
Jun 4 18:37:43 localhost named[3557]: automatic empty zone: 8.E.F.IP6.ARPA
Jun 4 18:37:43 localhost named[3557]: automatic empty zone: 9.E.F.IP6.ARPA
Jun 4 18:37:43 localhost named[3557]: automatic empty zone: A.E.F.IP6.ARPA
Jun 4 18:37:43 localhost named[3557]: automatic empty zone: B.E.F.IP6.ARPA
Jun 4 18:37:43 localhost named[3557]: command channel listening on 127.0.0.1#953
Jun 4 18:37:43 localhost named[3557]: zone 0.in-addr.arpa/IN: loaded serial 1
Jun 4 18:37:43 localhost named[3557]: zone 127.in-addr.arpa/IN: loaded serial 1
Jun 4 18:37:43 localhost named[3557]: zone 3.168.192.in-addr.arpa/IN: loaded serial 2009270401
Jun 4 18:37:43 localhost named[3557]: zone 255.in-addr.arpa/IN: loaded serial 1
Jun 4 18:37:43 localhost named[3557]: zone alex.net.br/IN: loaded serial 2009270401
Jun 4 18:37:43 localhost named[3557]: zone localhost/IN: loaded serial 2
Jun 4 18:37:43 localhost named[3557]: running

O negócio está redondo:

debian:/etc/squid# host prmtXP.alex.net.br
prmtXP.alex.net.br has address 192.168.3.8
debian:/etc/squid# host aluno-desktop.alex.net.br
aluno-desktop.alex.net.br has address 192.168.3.10
debian:/var/cache/bind# ls -l
total 16
-rw-rw-r-- 1 root bind 345 Jun 1 16:23 db.alex
-rw-r--r-- 1 bind bind 1334 Jun 8 13:57 db.alex.jnl
-rw-rw-r-- 1 root bind 330 Jun 1 16:24 rev.alex
-rw-r--r-- 1 bind bind 1415 Jun 8 13:57 rev.alex.jnl


Eu coloquei as zonas no /var/cache/bind,
para que os arquivos jnl pudessem ser criados automaticamente, uma vez que dentro do /etc/bind não tem permissão para criar jnl.

Por fim configurei o Sarg para gerar os relatórios por nome da máquina e não por ip.

Sites & Users
NUM USUÁRIO CONEXÃO BYTES %BYTES IN-CACHE-OUT TEMPO GASTO MILISEG %TEMPO
1 G T prmtXP.alex.net.br 331 4.30M 62.87% 16.17% 83.83% 00:01:21 81,008 64.51%
2 G T aluno-desktop.alex.net.br 160 2.54M 37.13% 5.10% 94.90% 00:00:44 44,570 35.49%

valeu.

E alterei meu sarg.conf para :

# TAG: resolve_ip yes/no
# Convert ip address to dns name
# sarg -n
resolve_ip yes

# TAG: user_ip yes/no
# Use Ip Address instead userid in reports.
# sarg -p
user_ip no

Por fim:
É só executar o sarg com a opção -n

debian:/etc/squid# sarg -n
SARG: Unknown option site_user_time_date_type table

Deu esse aviso, porém gerou os relatório com os nomes dos computadores no lugar do ip.

blz.




valeu.

[13] Comentário enviado por rojeryo em 04/06/2010 - 22:33h

Olá Alex,


Valeu pela contribuição!!!

Abs,

R. Guimarães

[14] Comentário enviado por leandro.fonseca em 10/01/2011 - 22:49h

Amigo parabéns pelo artigo!

Gostaria apenas de tirar uma dúvida.

Segui seu artigo do início ao fim.

Do servidor DNS, quando eu pingo em quaisquer sites (ex.: ping www.uol.com) o servidor resolve.

Porém, se eu tento pingar numa máquina da rede local (ex.: ping cliente-01) o servidor não resolve.

O que pode estar acontecendo???

[15] Comentário enviado por ovudo em 05/05/2011 - 17:35h

galera, ainda estou com problemas ao fazer este tutorial, o problema é que não sei porque, o meu syslog aparece a seguinte mensagem:

May 5 17:25:01 chagas named[2203]: client 127.0.0.1#54050: signer "rndc-key" denied
May 5 17:25:01 chagas named[2203]: client 127.0.0.1#54050: update '2.168.192.in-addr.arpa/IN' denied

eu gostaria de saber como resolver, eu também já segui todas as dicas dos posts acima e nada funciona

alguém poderia me ajudar com isso?

obrigado a todos


[16] Comentário enviado por edilinhares em 26/04/2012 - 09:26h

Estou tendo alguns problemas com o dns, alguns endereços não atualizam no banco de dados


26-Apr-2012 09:14:21.448 update-security: error: client 192.168.1.132#54094: update 'transpacifico/IN' denied
26-Apr-2012 09:14:27.862 update-security: error: client 192.168.1.147#64833: update 'transpacifico/IN' denied

26-Apr-2012 09:17:43.322 update-security: info: client 192.168.1.1#34209: signer "rndc-key" approved
26-Apr-2012 09:17:43.323 update: info: client 192.168.1.1#34209: updating zone 'transpacifico/IN': adding an RR at 'sao52.transpacifico' A
26-Apr-2012 09:17:43.323 update: info: client 192.168.1.1#34209: updating zone 'transpacifico/IN': adding an RR at 'sao52.transpacifico' TXT


26-Apr-2012 09:18:20.681 update-security: error: client 192.168.1.149#53378: update 'transpacifico/IN' denied
26-Apr-2012 09:18:28.187 update-security: error: client 192.168.1.149#57814: update 'transpacifico/IN' denied



[17] Comentário enviado por alexmanzo em 07/10/2012 - 01:10h

alguma solução???

[18] Comentário enviado por rojeryo em 07/10/2012 - 09:43h

Olá Alex,


Já faz uns 2 anos que não estou trabalhando na área de TI, e não tenho como fazer testes para te ajudar...

Abs,

Rogério Guimarães

[19] Comentário enviado por flaviotecnico em 20/11/2018 - 00:15h

Bom dia,
Sou iniciante,
Quero usar um servidor DHCP e também ter um roteador configurado com servidor DHCP secundário.
Como configurar um DHCP secundário no Bind?
Desde já agradeço.
Flávio.

[20] Comentário enviado por rojeryo em 21/11/2018 - 19:56h

Olá Flávio,


Já faz uns 8 anos que não estou trabalhando na área de TI, e não tenho como fazer testes para te ajudar...

Abs,

Rogério Guimarães


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts