DHCP e BIND9 - Se entendendo via Dynamic DNS

Autor: Frederico Costa <fred at lcl.com.br>
Data: 17/05/2004

Introdução

Neste artigo iremos configurar um servidor de DHCP e DNS para que estes dois serviços se comuniquem e possam estabelecer um DNS dinâmico.

Apesar do artigo colocar os dois serviços no mesmo equipamento, a sua configuração pode facilmente ser alterada para que estes serviços estejam em máquinas diferentes.


Requisitos e instalação dos pacotes

Como padrão, utilizaremos um servidor Debian Woody, apenas com os depósitos oficiais:

deb http://ftp.br.debian.org/debian/ stable main non-free contrib
deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
deb http://security.debian.org/ stable/updates main contrib non-free

Para este artigo iremos utilizar o ISC DHCP3 e o BIND9.

No Debian podemos instalar estes dois serviços com o comando:

# apt-get install dhcp3-server bind9


Configuração do DHCP

O primeiro passo é gerar uma chave, que será a autenticação da comunicação entre os dois serviços. Usaremos o comando dnssec-genkey como mostrado abaixo:

# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST dhcp

onde:

dnssec-keygen -a HMAC-MD5 -b <tamanho da chave, de 1 a 512 bits> -n HOST <nome da chave>

ao executar o comando, o único retorno que teremos será algo do gênero:

K<nome da chave>.+157+04150

no nosso exemplo,

Kdhcp.+157+04150

. Iremos usar o valor final do arquivo com o prefixo .key, Kdhcp.+157+04150.key, por exemplo.

dhcp. IN KEY 512 3 157 Wx8rJhgnj/cAIjuTnB8EYA==

Vamos agora editar o arquivo de configuração do DHCP3 (/etc/dhcp3/dhcpd.conf). A primeira coisa que faremos será definir as propriedades globais do serviço:

ddns-update-style interim; # define o tipo de atualização usada com o DNS
option domain-name-servers 10.4.0.1; # define o servidor de nomes a ser usado em todas as zonas
default-lease-time 6000; # Definem o tempo máximo que um IP
max-lease-time 72000; # fica preso a um Equipamento
authoritative; # Define que este serdir de DHCP é o principal da rede
log-facility local7; # Define qual categoria de log o DHCP irá usar

Depois criaremos uma seção "key", como mostrado abaixo:

key mykey {
   algorithm hmac-md5;
   secret "Wx8rJhgnj/cAIjuTnB8EYA==";
};

e definiremos as zonas de domínio e domínio reverso que iremos ter:

zone escritorio. {
   primary 10.4.0.1;
   key mykey;
}

zone 0.4.10.in-addr.arpa. {
   primary 10.4.0.1;
   key mykey;
}

Vou considerar que o resto da sua configuração, ou seja, a definição da subnet, esteja funcionando. Caso tenha alguém dúvida, a minha configuração segue abaixo:

subnet 10.4.0.0 netmask 255.255.255.0 {
   range 10.4.0.10 10.4.0.100;
   option routers 10.4.0.1;
   option domain-name "escritorio.lcl";
   option subnet-mask 255.255.255.0;
   option broadcast-address 10.4.0.255;
   one-lease-per-client on;
   option netbios-name-servers 10.4.0.1;
}

Reinicie o serviço de DHCP e verifique se não há erros de sintaxe:

# /etc/init.d/dhcp3-server restart
Stopping DHCP server: dhcpd3.
Starting DHCP server: dhcpd3.

Se tudo correr bem, no syslog deve aparecer algo semelhante a:

-----
May 16 11:58:09 teste dhcpd: Internet Software Consortium DHCP Server V3.0.1rc9
May 16 11:58:09 teste dhcpd: Copyright 1995-2001 Internet Software Consortium.
May 16 11:58:09 teste dhcpd: All rights reserved.
May 16 11:58:09 teste dhcpd: For info, please visit http://www.isc.org/products/DHCP
May 16 11:58:09 teste dhcpd: Wrote 27 leases to leases file.
-----



Configuração do BIND9

Agora iremos preparar o servidor de nomes (Bind9) para receber os pedidos de sincronização do DHCP.

No arquivo de configuração (/etc/bind/named.conf), iremos definir uma seção key, antes da seção options, igual a que criamos para o DHCP:

key mykey {
   algorithm hmac-md5;
   secret "Wx8rJhgnj/cAIjuTnB8EYA==";
};

Em seguida iremos criar a seção controls, que será a responsável por permitir a comunicação entre o DHCP e o BIND:

controls {
   inet 127.0.0.1 port 953
   allow { 127.0.0.1; }
   keys { "mykey"; };
};

Para fechar a configuração, iremos agora definir o nosso domínio e o seu reverso:

zone "escritorio" {
   type master;
   notify no;
   file "/etc/bind/db/db.escritorio";
   allow-update { key mykey; };
};

zone "0.4.10.in-addr.arpa"{
   type master;
   notify no;
   file "/etc/bind/db.10.4.0";
   allow-update { key mykey; };
};

Reinicie o serviço de DNS com o comando:

# /etc/init.d/bind9 restart

Correndo tudo bem, uma mensagem semelhante a abaixo será colocada no arquivo /var/log/syslog:

------
May 16 12:06:58 teste named[7528]: starting BIND 9.2.1
May 16 12:06:58 teste named[7528]: using 1 CPU
May 16 12:06:58 teste named[7530]: loading configuration from '/etc/bind/named.conf'
May 16 12:06:58 teste named[7530]: no IPv6 interfaces found
May 16 12:06:58 teste named[7530]: listening on IPv4 interface lo, 127.0.0.1#53
May 16 12:06:58 teste named[7530]: listening on IPv4 interface eth1, 10.4.0.1#53
May 16 12:06:58 teste named[7530]: command channel listening on 127.0.0.1#953
May 16 12:06:58 teste named[7530]: zone 0.in-addr.arpa/IN: loaded serial 1
May 16 12:06:58 teste named[7530]: zone 0.4.10.in-addr.arpa/IN: loaded serial 4
May 16 12:06:58 teste named[7530]: zone 127.in-addr.arpa/IN: loaded serial 1
May 16 12:06:58 teste named[7530]: zone 255.in-addr.arpa/IN: loaded serial 1
May 16 12:06:58 teste named[7530]: zone escritorio/IN: loaded serial 20040517
May 16 12:06:58 teste named[7530]: zone localhost/IN: loaded serial 1
May 16 12:06:58 teste named[7530]: running
-----


Testes e referências

Agora vamos testar para nos certificarmos que tudo está funcionando 100%.

Monitore o arquivo /var/log/syslog enquanto você força uma renovação do DHCP em alguma estação cliente (/etc/init.d/network restart em qualquer Debian ou ipconfig /renew em qualquer estação Windows). Aparecendo:

-----
May 16 11:54:32 teste named[7363]: client 10.4.0.1#1174: updating zone 'escritorio/IN': adding an RR
May 16 11:54:32 teste named[7363]: client 10.4.0.1#1174: updating zone 'escritorio/IN': adding an RR
May 16 11:54:32 teste dhcpd: Added new forward map from papaleguas.escritorio to 10.4.0.100
May 16 11:54:32 teste named[7363]: client 10.4.0.1#1174: updating zone '0.4.10.in-addr.arpa/IN': deleting an rrset
May 16 11:54:32 teste named[7363]: client 10.4.0.1#1174: updating zone '0.4.10.in-addr.arpa/IN': adding an RR
May 16 11:54:32 teste dhcpd: added reverse map from 100.0.4.10.in-addr.arpa. to papaleguas.escritorio
May 16 11:54:32 teste dhcpd: DHCPREQUEST for 10.4.0.100 from 00:e0:7d:f1:92:00 (papaleguas) via eth1
May 16 11:54:32 teste dhcpd: DHCPACK on 10.4.0.100 to 00:e0:7d:f1:92:00 (papaleguas) via eth1
-----

Significa que o IP 10.4.0.100 foi associado à máquina papaleguas e que o registro correspondente foi passado para o DNS. Vamos testar?

# host papaleguas.escritorio.lcl
papaleguas.escritorio has address 10.4.0.100
# host 10.4.0.100
100.0.4.10.in-addr.arpa domain name pointer papaleguas.escritorio.

Prontinho... Tudo funcionando!!!

Bibliografia e referências:



http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=1049

Voltar para o site