Instalação e configuração de servidor DHCP + DNS + Debian Squeeze
- Domínio que vamos utilizar: douglasqsantos.com.br
- Faixa de ip: 10.0.0.0/24
- Ip do Servidor: 10.0.0.26
Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.
Vamos atualizar os repositórios e fazer um upgrade do sistema
aptitude update && aptitude dist-upgrade -y
Agora vamos instalar o bind
aptitude install bind9 dnsutils -y
Agora vamos parar ele para fazer algumas manutenções
/etc/init.d/bind9 stop
Vamos criar os diretorios necessários
mkdir -p /var/lib/named/etc mkdir -p /var/lib/named/dev mkdir -p /var/lib/named/var/log mkdir -p /var/lib/named/var/cache/bind mkdir -p /var/lib/named/var/cache/bind/dynamic mkdir -p /var/lib/named/var/run/bind/run mknod /var/lib/named/dev/null c 1 3 mknod /var/lib/named/dev/random c 1 8 mknod /var/lib/named/dev/zero c 1 5
Vamos acertar as permissões
chmod 666 /var/lib/named/dev/{null,random} chown -R bind:bind /var/lib/named/var/*
Vamos acertar a localização dos diretórios e as permissões
mv /etc/bind /var/lib/named/etc ln -sf /var/lib/named/etc/bind /etc/bind cp /etc/localtime /var/lib/named/etc chown -R bind:bind /var/lib/named/etc/bind chown -R root:bind /var/lib/named/var/cache/bind/dynamic chmod -R 775 /var/lib/named/var/cache/bind/dynamic
Vamos fazer backup do arquivo de configuração
cp -Rfa /etc/default/bind9{,.bkp}
Vamos informar para o bind aonde fica a jaula
vim /etc/default/bind9 RESOLVCONF=yes OPTIONS="-u bind -t /var/lib/named"
Acertando o arquivo que controla a consulta de dns
vim /etc/resolv.conf domain douglasqsantos.com.br nameserver 10.0.0.26
Gerando a chave para o DHCP poder atualizar as zonas de DNS.
cd /etc/bind/ dnssec-keygen -r /dev/urandom -a hmac-md5 -b 128 -n USER dhcpupdate
Agora vamos visualizar o conteudo da nossa chave, vamos utilizar ela no arquivo de zonas e no arquivo de configuração do DHCP.
cat /etc/bind/K*.key dhcpupdate. IN KEY 0 3 157 hsEAzU7JwA/mj+8P/fsntg=====
Vamos acertar algumas opções do bind
vim /etc/bind/named.conf.options #/etc/bind/named.conf.options options { directory "/var/cache/bind"; managed-keys-directory "/var/cache/bind/dynamic"; auth-nxdomain no; listen-on-v6 { any; }; listen-on { 127.0.0.1/32; 10.0.0.0/24; }; allow-query { any; }; recursion no; version "Nao Disponivel"; ### DNSSEC ### dnssec-enable no; dnssec-validation no; dnssec-lookaside auto; }; #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 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; }; };
Vamos acertar as referências de arquivos para o bind
vim /etc/bind/named.conf include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.internal-zones";
Criando o arquivo que vai conter as zonas internas
vim /etc/bind/named.conf.internal-zones #Definindo quem vão ser os nossos hosts internos, ex: a nossa rede e a maquina local acl "internal_hosts" { 10.0.0.0/24; 127.0.0.1/32; }; #Definição da View interna view "internal" { #Definindo quais clientes vão poder consultar essa view match-clients { internal_hosts; }; #O nossos clientes da view interna vão poder efetuar consultas recursivas recursion yes; #Zonas hint aonde temos as definições dos root masters zone "." { type hint; file "/etc/bind/db.root"; }; #Zonas internas zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; #Dominios locais zone "douglasqsantos.com.br" { type master; file "db.douglasqsantos.com.br.internal"; allow-transfer { none; }; allow-update { key dhcpupdate; }; }; #Zona reversa do dominio na rede 10.0.0.0/24 zone "0.0.10.in-addr.arpa" { type master; file "db.0.0.10.internal"; allow-transfer { none; }; allow-update { key dhcpupdate; }; }; #Chave para sincronismo entre dhcp e dns que visualizamos com o cat /etc/bind/K*.key key "dhcpupdate" { algorithm hmac-md5; secret "hsEAzU7JwA/mj+8P/fsntg====="; }; };
Criando a zona interna do domínio
vim /var/lib/named/var/cache/bind/db.douglasqsantos.com.br.internal $TTL 86400 @ IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. ( 2011061703 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expire 3600 ) ; Minimum ; @ IN NS douglasqsantos.com.br. douglasqsantos.com.br. IN TXT "v=spf1 a mx ip4:10.0.0.0/23 -all" mail.douglasqsantos.com.br IN TXT "v=spf1 a -all" @ IN NS ns1.douglasqsantos.com.br. @ IN NS ns2.douglasqsantos.com.br. @ IN MX 0 mail.douglasqsantos.com.br. ;NAME SERVERS @ IN A 10.0.0.26 ns1 IN A 10.0.0.26 ns2 IN A 10.0.0.26 dns IN A 10.0.0.26 ldap IN A 10.0.0.26 ldap2 IN A 10.0.0.26 kdc1 IN A 10.0.0.26 kdc2 IN A 10.0.0.26 ;MAIL SERVERS mail IN A 10.0.0.26 imap IN CNAME mail pop IN CNAME mail smtp IN CNAME mail webmail IN CNAME mail ;WEB SERVERS www IN A 10.0.0.26 ftp IN CNAME www mailadmin IN CNAME www ; Dominio Kerberos _kerberos IN TXT "douglasqsantos.com.br" _kerberos.srv IN TXT "douglasqsantos.com.br" _kerberos._tcp IN SRV 10 1 88 ldap.douglasqsantos.com.br. _kerberos._udp IN SRV 10 1 88 ldap.douglasqsantos.com.br. _kerberos-adm._tcp IN SRV 10 1 749 ldap.douglasqsantos.com.br. _kerberos-master._udp IN SRV 0 0 88 ldap.douglasqsantos.com.br. _kpasswd._udp IN SRV 10 1 464 ldap.douglasqsantos.com.br. _ldap._tcp IN SRV 10 1 389 ldap.douglasqsantos.com.br. ; Busca de Informações de LDAP e Samba _ldap_dc IN TXT "dc=douglasqsantos,dc=com,dc=br" _samba_pdc_domain IN TXT "DOUGLASQSANTOS" _samba_pdc_ip_address IN TXT "10.0.0.24"
Agora vamos criar a zona inversa
vim /var/lib/named/var/cache/bind/db.0.0.10.internal $TTL 86400 @ IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. ( 2012022701 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 3600 ) ; Minimum ; @ IN NS douglasqsantos.com.br. @ IN NS ns1.douglasqsantos.com.br. @ IN NS ns2.douglasqsantos.com.br. @ IN MX 0 mail.douglasqsantos.com.br. ;NAME SERVERS 26 IN PTR douglasqsantos.com.br. 26 IN PTR ns1.douglasqsantos.com.br. 26 IN PTR ns2.douglasqsantos.com.br. 26 IN PTR dns.douglasqsantos.com.br. ;LDAP e Kerberos 26 IN PTR ldap.douglasqsantos.com.br. 26 IN PTR ldap2.douglasqsantos.com.br. 26 IN PTR kdc1.douglasqsantos.com.br. 26 IN PTR kdc2.douglasqsantos.com.br. ;MAIL SERVERS 26 IN PTR mail.douglasqsantos.com.br. ;WEB SERVERS 26 IN PTR www.douglasqsantos.com.br.
Vamos criar o managed-key
touch /var/lib/named/var/cache/bind/managed-keys.bind
Agora vamos reiniciar o nosso bind
/etc/init.d/bind9 restart
Vamos testar uma consulta
nslookup www Server: 10.0.0.26 Address: 10.0.0.26#53 Name: www.douglasqsantos.com.br Address: 10.0.0.26
Vamos testar o reverso
host 10.0.0.26 26.0.0.10.in-addr.arpa domain name pointer dns.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa domain name pointer ns1.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa domain name pointer ns2.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa domain name pointer www.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa domain name pointer kdc1.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa domain name pointer kdc2.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa domain name pointer ldap.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa domain name pointer mail.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa domain name pointer ldap2.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa domain name pointer douglasqsantos.com.br.
Vamos testar o reverso agora pelo dig
dig -x 10.0.0.26 ; <<>> DiG 9.7.3 <<>> -x 10.0.0.26 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24795 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 10, AUTHORITY: 3, ADDITIONAL: 3 ;; QUESTION SECTION: ;26.0.0.10.in-addr.arpa. IN PTR ;; ANSWER SECTION: 26.0.0.10.in-addr.arpa. 86400 IN PTR douglasqsantos.com.br. 26.0.0.10.in-addr.arpa. 86400 IN PTR dns.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa. 86400 IN PTR ns1.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa. 86400 IN PTR ns2.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa. 86400 IN PTR www.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa. 86400 IN PTR kdc1.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa. 86400 IN PTR kdc2.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa. 86400 IN PTR ldap.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa. 86400 IN PTR mail.douglasqsantos.com.br. 26.0.0.10.in-addr.arpa. 86400 IN PTR ldap2.douglasqsantos.com.br. ;; AUTHORITY SECTION: 0.0.10.in-addr.arpa. 86400 IN NS douglasqsantos.com.br. 0.0.10.in-addr.arpa. 86400 IN NS ns1.douglasqsantos.com.br. 0.0.10.in-addr.arpa. 86400 IN NS ns2.douglasqsantos.com.br. ;; ADDITIONAL SECTION: ns1.douglasqsantos.com.br. 86400 IN A 10.0.0.26 ns2.douglasqsantos.com.br. 86400 IN A 10.0.0.26 douglasqsantos.com.br. 86400 IN A 10.0.0.26 ;; Query time: 0 msec ;; SERVER: 10.0.0.26#53(10.0.0.26) ;; WHEN: Tue Feb 28 16:40:00 2012 ;; MSG SIZE rcvd: 327
Agora vamos instalar o servidor DHCP
aptitude install isc-dhcp-server -y
Vai ocorrer um erro a respeito da interface de rede mais isso vamos corrigir mais a frente
Vamos editar o arquivo de configuração do dhcp server
vim /etc/dhcp/dhcpd.conf #Definindo o dominio option domain-name "douglasqsantos.com.br"; #Definindo os servidores de DNS option domain-name-servers 10.0.0.26, 8.8.8.8; #Definindo o servidor de NetBios(WINS) option netbios-name-servers 10.0.0.26; #Definindo o tipo de netbios option netbios-node-type 8; #Defindo o broadcast da nossa rede option broadcast-address 10.0.0.255; #Defindo que o servidor é autoritativo para a rede authoritative; #Estilo de atualização do servidor DNS, este metodo vai ser o padrão de atualização do dns #ele gera um registro (RR) TXT nos arquivos de zonas do DNS e os atualiza ddns-update-style interim; #Força o servidor dhcp fazer atualizações para os endereços ips estáticos update-static-leases on; #Defindo o tipo de log que vai ser enviado para o syslog log-facility local7; #Defindo a chave de atualização entre o dhcp e o dns a chave que visualizamos com cat /etc/bind/K*.key key dhcpupdate { algorithm hmac-md5; secret hsEAzU7JwA/mj+8P/fsntg=====; } #defindo a zona que vamos efetuar atualizações zone douglasqsantos.com.br. { primary 127.0.0.1; key dhcpupdate; } #definindo a zona que vamos efetuar atualizações para reverso zone 0.0.10.in-addr.arpa. { primary 127.0.0.1; key dhcpupdate; } #Tempo de emprestimo de um ip default-lease-time 600; #tempo maximo de emprestimo de um ip max-lease-time 7200; #Declaração da sub-net subnet 10.0.0.0 netmask 255.255.255.0 { #Declaração do range de ips disponiveis para emprestimo range 10.0.0.20 10.0.0.60; #Define qual a subrede para este escopo option subnet-mask 255.255.255.0; #define qual o router para esse escopo option routers 10.0.0.24; } #Fim do escopo #Definindo um ip fixo host douglas-xp { hardware ethernet 08:00:27:ED:99:94; fixed-address 10.0.0.21; }
Definir em qual interface o dhcp vai trabalhar
vim /etc/default/isc-dhcp-server [...] INTERFACES="eth0"
Agora vamos fazer um ajuste no rsyslog
echo "local7.debug /var/log/dhcpd.log" >> /etc/rsyslog.conf
Agora vamos reiniciar o rsyslog
/etc/init.d/rsyslog restart
Agora vamos subir o servidor de dhcp
/etc/init.d/isc-dhcp-server restart Stopping ISC DHCP server: dhcpd failed! Starting ISC DHCP server: dhcpd.
Podemos acompanhar o trabalho do dhcp em /var/log/dhcpd.log
tail -f /var/log/dhcpd.log Feb 28 16:52:11 debian dhcpd: Copyright 2004-2010 Internet Systems Consortium. Feb 28 16:52:11 debian dhcpd: All rights reserved. Feb 28 16:52:11 debian dhcpd: For info, please visit https://www.isc.org/software/dhcp/ Feb 28 16:52:11 debian dhcpd: Internet Systems Consortium DHCP Server 4.1.1-P1 Feb 28 16:52:11 debian dhcpd: Copyright 2004-2010 Internet Systems Consortium. Feb 28 16:52:11 debian dhcpd: All rights reserved. Feb 28 16:52:11 debian dhcpd: For info, please visit https://www.isc.org/software/dhcp/ Feb 28 16:52:11 debian dhcpd: Wrote 0 deleted host decls to leases file. Feb 28 16:52:11 debian dhcpd: Wrote 0 new dynamic host decls to leases file. Feb 28 16:52:11 debian dhcpd: Wrote 0 leases to leases file.
Vamos ver um exemplo de maquina que pegou o ip e foi registrada no DNS
tail -f /var/log/dhcpd.log Feb 28 16:53:34 debian dhcpd: DHCPDISCOVER from 08:00:27:ed:99:94 via eth0 Feb 28 16:53:34 debian dhcpd: DHCPOFFER on 10.0.0.21 to 08:00:27:ed:99:94 via eth0 Feb 28 16:53:34 debian dhcpd: Added new forward map from douglas-xp.douglasqsantos.com.br to 10.0.0.21 Feb 28 16:53:34 debian dhcpd: added reverse map from 21.0.0.10.in-addr.arpa. to douglas-xp.douglasqsantos.com.br Feb 28 16:53:34 debian dhcpd: DHCPREQUEST for 10.0.0.21 (10.0.0.26) from 08:00:27:ed:99:94 via eth0 Feb 28 16:53:34 debian dhcpd: DHCPACK on 10.0.0.21 to 08:00:27:ed:99:94 via eth0
Agora vamos testar o dns para ver se esta resolvendo mesmo
nslookup douglas-xp.douglasqsantos.com.br Server: 10.0.0.26 Address: 10.0.0.26#53 Name: douglas-xp.douglasqsantos.com.br Address: 10.0.0.21
Agora vamos testar o reverso desta maquina
dig -x 10.0.0.21 ; <<>> DiG 9.7.3 <<>> -x 10.0.0.21 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30583 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3 ;; QUESTION SECTION: ;21.0.0.10.in-addr.arpa. IN PTR ;; ANSWER SECTION: 21.0.0.10.in-addr.arpa. 300 IN PTR douglas-xp.douglasqsantos.com.br. ;; AUTHORITY SECTION: 0.0.10.in-addr.arpa. 86400 IN NS ns2.douglasqsantos.com.br. 0.0.10.in-addr.arpa. 86400 IN NS douglasqsantos.com.br. 0.0.10.in-addr.arpa. 86400 IN NS ns1.douglasqsantos.com.br. ;; ADDITIONAL SECTION: ns1.douglasqsantos.com.br. 86400 IN A 10.0.0.26 ns2.douglasqsantos.com.br. 86400 IN A 10.0.0.26 douglasqsantos.com.br. 86400 IN A 10.0.0.26 ;; Query time: 0 msec ;; SERVER: 10.0.0.26#53(10.0.0.26) ;; WHEN: Tue Feb 28 16:56:04 2012 ;; MSG SIZE rcvd: 178
Como pode ser notado temos agora o DHCP trabalhando em conjunto com o DNS
Caso o client não mande o hostname para o servidor dhcp não vai ser inserido o nome dele no dns com isso no caso do OpenBSD precisamos ajustar o /etc/dhclient.conf da seguinte forma
vim /etc/dhclient.conf send host-name "openbsd";
Agora é só mandar pegar um ip com o dhclient
dhclient em0
Nos logs do servidor vamos ter algo como
tail -f /var/log/messages Dec 9 17:13:50 debian dhcpd: DHCPREQUEST for 192.168.1.50 from 08:00:27:1f:ef:a5 via eth0 Dec 9 17:13:50 debian dhcpd: DHCPACK on 192.168.1.50 to 08:00:27:1f:ef:a5 via eth0 Dec 9 17:13:50 debian dhcpd: Added new forward map from openbsd.douglasqsantos.com.br to 192.168.1.50 Dec 9 17:13:50 debian dhcpd: Added reverse map from 50.1.168.192.in-addr.arpa. to openbsd.douglasqsantos.com.br
Agora vamos ver algo interessante também que é testar a atualização de registro dns pela linha de comando.
Vamos adicionar um novo host chamado centos com o ip 192.168.1.100 no domínio douglasqsantos.com.br.
Vamos ver o código da nossa chave de atualização de zonas
cat /etc/bind/Kdhcp_updater.*.key DHCP_UPDATER. IN KEY 0 3 157 Fum3G8P3880TwWMteJgrZg==
Pronto precisamos dessa informação agora vamos inserir o nosso registro
nsupdate > server 127.0.0.1 > key DHCP_UPDATER Fum3G8P3880TwWMteJgrZg== > zone douglasqsantos.com.br > update add centos.douglasqsantos.com.br. 600 IN A 192.168.1.100 > send > zone 1.168.192.in-addr.arpa > update add 100.1.168.192.in-addr.arpa 600 IN PTR centos.douglasqsantos.com.br > send > quit
Agora vamos testar o nosso registro
nslookup centos Server: 127.0.0.1 Address: 127.0.0.1#53 Name: centos.douglasqsantos.com.br Address: 192.168.1.100
Agora vamos testar o seu reverso
host 192.168.1.100 100.1.168.192.in-addr.arpa domain name pointer centos.douglasqsantos.com.br.