Configurando um servidor DNS com atualiza¸c˜ao autom´atica via DHCP Jo˜ao Medeiros (
[email protected])
1
Introdu¸ c˜ ao
Neste tutorial iremos descrever a configura¸ca˜o de um servidor DNS para uma rede local com atualiza¸ca˜o autom´ atica via DHCP utilizando o Ubuntu Server 8.04. Acreditamos que o procedimento ´e idˆentico para a vers˜ao 8.10. A configura¸ca˜o ´e relativamente simples, mas existem muitos detalhes que dever ser seguidos `a risca. O tutorial foi baseado em diversas fontes, vejas as referˆencias [1]-[4] Nos comandos para edi¸ca˜o de arquivos a seguir, estamos usando o vim. Se desejar, utilize algum outro editor como o nano por exemplo.
2
Configura¸ c˜ ao do DNS
2.1
Instala¸c˜ ao do Bind
Instale o BIND9, que ´e o servidor DNS no linux. root@server:~# apt-get install bind9 Observe que ele deve ter criado o arquivo /etc/bind/rndc.key contendo a chave necess´aria para a atualiza¸ca˜o dinˆ amica do DNS pelo servi¸co DHCP. Ela ser´a usada mais adiante.
2.2
Configura¸c˜ ao da chave de autentica¸c˜ ao
Nas distribui¸co˜es baseadas no Debian, o arquivo a ser editado ´e o /etc/bind/named.conf. root@server:~# vim /etc/bind/named.conf Acrescente o conte´ udo a seguir logo abaixo da linha include ”/etc/bind/named.conf.options”; include "/etc/bind/rndc.key"; controls { inet 127.0.0.1 allow { localhost; } keys { rndc-key; }; }; Observe que o arquivo ”/etc/bind/rndc.key” deve ter sido criado durante a instala¸ca˜o do bind9. Se ele n˜ ao existir, execute o comando rndc-confgen -a.
2.3
Configura¸c˜ ao das zonas
Edite agora o arquivo /etc/bind/named.conf.local root@server:~# vim /etc/bind/named.conf.local e acrescente o conte´ udo
1
#Zona direta zone "lab4.fatern" { type master; file "/var/lib/bind/lab4.fatern.db"; allow-transfer { 192.168.3.1; }; allow-update { key "rndc-key"; }; notify yes; }; # Zona reversa. Substitua 0.68.9 com seu endereco de rede # usando a notacao inversa zone "3.168.192.in-addr.arpa" { type master; file "/var/lib/bind/rev.3.168.192.in-addr.arpa"; allow-update { key "rndc-key"; }; notify yes; }; No caso do Ubuntu Server existem duas partes cruciais aqui: o termo ”allow-update” que informa ao Bind que a zona pode ser atualizada pelo DHCP e a localiza¸ca˜o dos arquivos de zonas. O AppArmour espera que os arquivos de zonas fiquem localizados no diret´ orio ”/var/lib/bind”, se vocˆe coloc´ a-los no /etc/bind (que ´e onde normalmente algumas pessoas colocam) ter´ a problemas relacionados a permiss˜oes.
2.4
Configura¸c˜ ao dos arquivos de zonas
Falta ainda acrescentar os arquivos de zonas propriamente ditos. Crie o arquivo da zona direta com o comando root@server:~# vi /var/lib/bind/lab4.fatern.db e acrescente o conte´ udo abaixo: $TTL 86400 lab4.fatern. IN SOA 2009031601 3H 15M 1W 1D ) lab4.fatern. IN NS server. server A 192.168.3.1
server.lab4.fatern. server.lab4.fatern. (
Crie o arquivo da zona inversa root@server:~# vim /var/lib/bind/rev.3.168.192.in-addr.arpa E acrescente as linhas abaixo $TTL 86400 3.168.192.in-addr.arpa. IN SOA server.lab4.fatern. server.lab4.fatern. ( 2009031601 3H 15M 1W 1D ) 3.168.192.in-addr.arpa. IN NS 192.168.3.1. 1 PTR server.lab4.fatern.
2.5
Configura¸c˜ ao do log do DNS
A configura¸ca˜o do DNS tem muitos detalhes, o que torna o procedimento pass´ıvel de erros. Assim, ´e interessante ativarmos o log do pr´oprio DNS para nos auxiliar na detec¸ca˜o de eventuais problemas durante a configura¸ca˜o. 2
Para ativarmos o ”logging” do DNS, edite o arquivo /etc/bind/named.conf root@server:~# vim /etc/bind/named.conf E acrescente o conte´ udo abaixo, logo ap´os a se¸ca˜o controls adicionada anteriormente. logging { channel update_debug { file "/var/log/named/update-debug.log" versions 3 size 10m; severity debug 3; print-category yes; print-severity yes; print-time yes; }; channel security_info { file "/var/log/named/named-auth.info" versions 3 size 10m; severity info; print-category yes; print-severity yes; print-time yes; }; //descomente a linha abaixo para resolu¸ c~ ao de problemas category update { update_debug; }; category security { security_info; }; category lame-servers { null; }; }; Crie o diret´ orio de logs para o named e altere as permiss˜oes de maneira que o bind possa escrever l´a root@server:/var/log# mkdir /var/log/named root@server:/var/log/named# chown bind /var/log/named/
3
Configura¸ c˜ ao do DHCP
Vamos alterar o DHCP de modo que ele efetue as atualiza¸co˜es no servidor DNS a medida que fornecer IPs para m´aquinas clientes. root@server:~# vim /etc/dhcp3/dhcpd.conf Altere o arquivo de maneira a ficar como est´ a abaixo. A se¸ca˜o referente a chave rndc-key foi copiada do arquivo /etc/bind/rndc.key. Uma outra op¸ca˜o seria colocarmos a op¸ca˜o include ”/etc/bind/rndc.key”, mas ter´ıamos que alterar as pemiss˜ oes de leitura do arquivo para 644.
3
key "rndc-key" { algorithm hmac-md5; secret "2nUrLAzEfUmqIhNNNdFnJA=="; };
zone lab4.fatern. { primary 192.168.3.1; key rndc-key; } zone 3.168.192.in-addr.arpa. { primary 192.168.3.1; key rndc-key; }
option domain-name "lab4.fatern"; option domain-name-servers server.lab4.fatern; # Use this to send dhcp log messages to a different log file (you also # have to hack syslog.conf to complete the redirection). log-facility local7; ddns-update-style interim; ddns-domainname "lab4.fatern."; use-host-decl-names on; allow client-updates; default-lease-time 600; max-lease-time 7200; authoritative; subnet 192.168.3.0 netmask 255.255.255.0 { ddns-updates on; range 192.168.3.20 192.168.3.100; option routers 192.168.3.1; option domain-name-servers 192.168.3.1; option broadcast-address 192.168.3.255; }
4
Configura¸ c˜ ao do /etc/resolv.conf no servidor
Altere o arquivo /etc/resolv.conf root@server:~# vim /etc/resolv.conf Deixe-o com o conte´ udo search lab4.fatern nameserver 192.168.3.1 Normalmente o cliente dhcp do Ubuntu sobreescreve o /etc/resolv.conf. Podemos evitar que ele seja sobre-escrito durante o boot de v´arias maneiras, veja a referˆencia [5]. O procedimento que adotamos foi o seguinte: crie o arquivo /etc/dhcp3/dhclient-enter-hooks.d root@server:~# vim /etc/dhcp3/dhclient-enter-hooks.d/dhclient-script Insira o seguinte texto nele
4
make_resolv_conf() { : } A fun¸ca˜o make resolv conf ´e chamada pelo cliente DHCP e n˜ ao far´a nada.
5
Teste e resolu¸c˜ ao de problemas
Reinicie o servidor DNS e DHCP root@server:~# /etc/init.d/bind9 restart root@server:~# /etc/init.d/dhcp3-server restart Abra um terminal separado e verifique os arquivos de logs com os comandos root@server:/var/log# tail /var/log/syslog root@server:/var/log# tail /var/log/named/named-auth.info root@server:/var/log# tail /var/log/named/update-debug.log Se quiser, acrescente a op¸ca˜o -f para ver as atualiza¸co˜es nos arquivos de maneira autom´ atica. Inicie uma m´aquina cliente (Veja que a placa de rede dela deve estar no modo rede interna no VirtualBox) e observe se o DNS foi atualizado. Liste o conte´ udo do diret´ orio do arquivo de zonas root@server:/var/lib/bind# ls -ltr /var/lib/bind/ total 16 -rw-r--r-- 1 bind bind 1324 2009-03-14 17:49 rev.3.168.192.in-addr.arpa.jnl -rw-r--r-- 1 bind bind 1585 2009-03-14 17:49 lab4.fatern.db.jnl -rw-r--r-- 1 bind bind 433 2009-03-14 18:00 rev.3.168.192.in-addr.arpa -rw-r--r-- 1 bind bind 519 2009-03-14 18:00 lab4.fatern.db Observe que foram criados arquivos com extens˜ao .jnl. Os arquivos originais tamb´em foram alterados: root@server:/var/lib/bind# cat /var/lib/bind/lab4.fatern.db $ORIGIN . $TTL 86400 ; 1 day lab4.fatern IN SOA server.lab4.fatern. server.lab4.fatern. ( 2009031612 ; serial 10800 ; refresh (3 hours) 900 ; retry (15 minutes) 604800 ; expire (1 week) 86400 ; minimum (1 day) ) NS server. $ORIGIN lab4.fatern. $TTL 300 ; 5 minutes fatern-desktop A 192.168.3.100 TXT "00bf0b062b0d647f73b7b6d018f865b66a" $TTL 86400 ; 1 day server A 192.168.3.1 $TTL 300 ; 5 minutes xp32 A 192.168.3.99 TXT "31b3bac0a214cd4b37e1737007d0bc7cf3" As nossas configura¸co˜es originais permanecem, mas surgiram outras criadas pela atualiza¸ca˜o dinˆamica.
5
5.1
Altera¸c˜ ao manual em Zonas dinˆ amicas
Como vimos na se¸ca˜o anterior, os arquivos originais das zonas s˜ao atualizados dinˆamicamente. Se, por algum motivo, for necess´ario alterar manualmente algum arquivo de zonas podemos usar o comando rndc freeze para ”congelar” a zona. root@server:~# rndc freeze lab4.fatern Para ”descongelar” a zona ap´os as altera¸co˜es manuais, utilize o comando root@server:~# rndc thaw lab4.fatern
6
Conclus˜ oes
A configura¸ca˜o do DNS com atualiza¸ca˜o autom´ atica ´e relativamente simples. Por´em, s˜ao necess´arios alguns cuidados especiais devido a quantidade de detalhes necess´arios para a configura¸ca˜o.
Referˆ encias [1] NEMETH, Evi. Linux Administration Handbook. 2. Ed. Editora: Prentice Hall, 2007 [2] http://www.void.gr/kargig/blog/2006/12/21/dynamic-hostname-updates-with-dhcpd-bind, acessado em 14/03/2009. [3] http://blogger.ziesemer.com/2008/10/linux-lan-dchp-dynamic-dns.html, 14/03/2009.
acessado
[4] http://www.vivaolinux.com.br/artigo/Configurando-DHCP-com-DNS-(Bind9)-na-rede-localDebian-Linux, acessado em 14/03/2009. [5] http://www.cyberciti.biz/faq/dhclient-etcresolvconf-hooks, acessado em 14/03/2009.
6
em