Instalação e configuração de servidor DHCP + DNS + CentOS 6
- Domínio que vamos utilizar: douglasqsantos.com.br
- Faixa de ip: 192.168.1.0/24
- Ip do Servidor: 192.168.0.200
Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialcentos6_en para que não falte nenhum pacote ou configuração.
Vamos fazer um update dos repositórios e vamos atualizar o sistema primeiramente.
yum check-update && yum update -y
Agora vamos instalar os pacotes do bind
yum install bind-chroot bind-utils bind-libs -y
Agora vamos colocar ele na inicialização do sistema
chkconfig named on
Agora vamos reiniciar o serviço para que o named monte a sua jaula
/etc/init.d/named restart
Agora vamos fazer um backup do arquivo de configuração do nosso bind.
cp -Rfa /etc/named.conf{,.bkp}Agora vamos deixar o arquivo /etc/named.conf como abaixo, aqui estou utilizando a rede 10.0.0.0/23 como minha rede local para exemplo, mude conforme necessário.
vim /etc/named.conf #Algumas opções do Bind options { listen-on port 53 { 127.0.0.1; 192.168.1.0/24; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; recursion no; version "Não Disponível"; }; #Controles include "/etc/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; }; }; #Incluir o nosso arquivo externo que vai conter a configuração da nossa view interna include "/etc/named/named.conf.internal-zones";
Caso não tenha sido gerada a chave rndc do bind podemos gerar ela como abaixo
rndc-confgen -a -c /etc/rndc.key -k rndc-key -b 256
Agora precisamos acertar as permissões dos arquivos
chown root:named /etc/rndc.key chmod 640 /etc/rndc.key
Gerando a chave para o DHCP poder atualizar as zonas de DNS.
cd /var/named/chroot/etc/ dnssec-keygen -r /dev/urandom -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER
Agora vamos visualizar o conteudo da nossa chave, vamos utilizar ela no arquivo de zonas e no arquivo de configuração do DHCP.
cat /var/named/chroot/etc/K*.key DHCP_UPDATER. IN KEY 0 3 157 /WndiGI/RhhQ0SesJ4qY3w==
Agora vamos criar o nosso arquivo da View Interna /etc/named/named.conf.internal-zones onde somente os nossos clientes da rede local e o nosso servidor local vão poder consultar.
vim /etc/named/named.conf.internal-zones #Definindo quem vão ser os nossos hosts internos, ex: a nossa rede e a maquina local acl "internal_hosts" { 192.168.1.0/24; 127.0.0.1/32; }; #Definindo a nossa View interna view "internal" { #Definindo quais clientes vão poder consultar esta view, então vão ser a nossa rede interna mesmo o servidor external_slave match-clients { internal_hosts; }; #Definindo que os clientes dessa view vão poder efetuar consultas recursivas. recursion yes; #Zona que define os endereços dos root Masters. zone "." IN { type hint; file "named.ca"; }; #Chave para sincronismo entre dhcp e dns que visualizamos com o cat /etc/bind/K*.key key DHCP_UPDATER { algorithm HMAC-MD5; secret "/WndiGI/RhhQ0SesJ4qY3w=="; }; #Dominios locais zone "douglasqsantos.com.br" { type master; file "db.douglasqsantos.com.br.internal"; allow-transfer { none; }; allow-update { key DHCP_UPDATER; }; }; #Zona reversa do dominio na rede 192.168.1.0/24 zone "1.168.192.in-addr.arpa" { type master; file "db.1.168.192.internal"; allow-transfer { none; }; allow-update { key DHCP_UPDATER; }; }; #Este arquivo contem as zonas locais include "/etc/named.rfc1912.zones"; };
Agora vamos criar o arquivo que os nossos clientes internos vão consultar /var/named/chroot/var/named/db.douglasqsantos.com.br.internal
vim /var/named/chroot/var/named/db.douglasqsantos.com.br.internal $TTL 86400 @ IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. ( 2013120901 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expire 3600 ) ; Minimum ; @ IN NS douglasqsantos.com.br. douglasqsantos.com.br. IN TXT "v=spf1 a mx ip4:192.168.1.0/24 -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 192.168.1.200 ns1 IN A 192.168.1.200 ns2 IN A 192.168.1.200 dns IN A 192.168.1.200 ldap IN A 192.168.1.200 ldap2 IN A 192.168.1.200 kdc1 IN A 192.168.1.200 kdc2 IN A 192.168.1.200 ;MAIL SERVERS mail IN A 192.168.1.200 imap IN CNAME mail pop IN CNAME mail smtp IN CNAME mail webmail IN CNAME mail ;WEB SERVERS www IN A 192.168.1.200 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 "192.168.1.200"
Agora vamos criar a zona inversa
vim /var/named/chroot/var/named/db.1.168.192.internal $TTL 86400 @ IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. ( 2013120901 ; 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 200 IN PTR douglasqsantos.com.br. 200 IN PTR ns1.douglasqsantos.com.br. 200 IN PTR ns2.douglasqsantos.com.br. 200 IN PTR dns.douglasqsantos.com.br. ;LDAP e Kerberos 200 IN PTR ldap.douglasqsantos.com.br. 200 IN PTR ldap2.douglasqsantos.com.br. 200 IN PTR kdc1.douglasqsantos.com.br. 200 IN PTR kdc2.douglasqsantos.com.br. ;MAIL SERVERS 200 IN PTR mail.douglasqsantos.com.br. ;WEB SERVERS 200 IN PTR www.douglasqsantos.com.br.
Vamos agora ajustar o arquivo /etc/resolv.conf para que o nosso servidor consiga encontrar a zona do douglasqsantos.com.br
vim /etc/resolv.conf domain douglasqsantos.com.br search douglasqsantos.com.br nameserver 127.0.0.1
Vamos agora reiniciar o serviço e testar.
/etc/init.d/named restartAgora vamos fazer alguns testes.
Vamos consultar o endereço do host www
nslookup www Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.douglasqsantos.com.br Address: 192.168.1.200
Agora vamos testar o reverso
host 192.168.1.200 200.1.168.192.in-addr.arpa domain name pointer kdc1.douglasqsantos.com.br. 200.1.168.192.in-addr.arpa domain name pointer kdc2.douglasqsantos.com.br. 200.1.168.192.in-addr.arpa domain name pointer mail.douglasqsantos.com.br. 200.1.168.192.in-addr.arpa domain name pointer www.douglasqsantos.com.br. 200.1.168.192.in-addr.arpa domain name pointer douglasqsantos.com.br. 200.1.168.192.in-addr.arpa domain name pointer ns1.douglasqsantos.com.br. 200.1.168.192.in-addr.arpa domain name pointer ns2.douglasqsantos.com.br. 200.1.168.192.in-addr.arpa domain name pointer dns.douglasqsantos.com.br. 200.1.168.192.in-addr.arpa domain name pointer ldap.douglasqsantos.com.br. 200.1.168.192.in-addr.arpa domain name pointer ldap2.douglasqsantos.com.br.
Agora vamos consultar o endereço do host mail.douglasqsantos.com.br aqui poderíamos consultar somente por mail dai ele completaria com o parâmetro domain do resolv.conf
nslookup mail.douglasqsantos.com.br Server: 127.0.0.1 Address: 127.0.0.1#53 Name: mail.douglasqsantos.com.br Address: 192.168.1.200
Vamos consultar os registros do tipo A do nosso domínio.
dig -t A douglasqsantos.com.br ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -t A douglasqsantos.com.br ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34481 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 2 ;; QUESTION SECTION: ;douglasqsantos.com.br. IN A ;; ANSWER SECTION: douglasqsantos.com.br. 86400 IN A 192.168.1.200 ;; AUTHORITY SECTION: douglasqsantos.com.br. 86400 IN NS ns1.douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN NS douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN NS ns2.douglasqsantos.com.br. ;; ADDITIONAL SECTION: ns1.douglasqsantos.com.br. 86400 IN A 192.168.1.200 ns2.douglasqsantos.com.br. 86400 IN A 192.168.1.200 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Dec 9 19:57:55 2013 ;; MSG SIZE rcvd: 127
Agora vamos consultar a transferência do nosso domínio
dig -t axfr dominio.com.br ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -t axfr douglasqsantos.com.br ;; global options: +cmd ; Transfer failed.
Tudo ok, agora vamos instalar o dhcp server
yum install dhcp -y
Agora vamos inserir ele na inicialização do sistema
chkconfig --add dhcpd
Agora vamos ajustar as permissões do diretório do bind para que o bind possa atualizar os registros
chown -R named:named /var/named/
Agora vamos configurar o dhcp server
vim /etc/dhcp/dhcpd.conf option domain-name "douglasqsantos.com.br"; #Definindo os servidores de DNS option domain-name-servers 192.168.1.200, 8.8.8.8; #Definindo o servidor de NetBios(WINS) option netbios-name-servers 192.168.1.200; #Definindo o tipo de netbios option netbios-node-type 8; #Defindo o broadcast da nossa rede option broadcast-address 192.168.1.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 DHCP_UPDATER { algorithm HMAC-MD5; secret "/WndiGI/RhhQ0SesJ4qY3w=="; }; #defindo a zona que vamos efetuar atualizações zone douglasqsantos.com.br. { primary 127.0.0.1; key DHCP_UPDATER; } #definindo a zona que vamos efetuar atualizações para reverso zone 1.168.192.in-addr.arpa. { primary 127.0.0.1; key DHCP_UPDATER; } #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 192.168.1.0 netmask 255.255.255.0 { #Declaração do range de ips disponiveis para emprestimo range 192.168.1.200 192.168.1.60; #Define qual a subrede para este escopo option subnet-mask 255.255.255.0; #define qual o router para esse escopo option routers 192.168.1.24; } #Fim do escopo #Definindo um ip fixo host exchange { hardware ethernet 08:00:27:E3:41:30; fixed-address 192.168.1.22; }
Agora vamos ajustar por qual interface o dhcp vai escutar
vim /etc/sysconfig/dhcpd # Command line options here DHCPDARGS= 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 iniciar o dhcp
/etc/init.d/dhcpd start
Agora vamos ver os logs
tail -f /var/log/messages Dec 9 20:04:47 centos6 dhcpd: Internet Systems Consortium DHCP Server 4.1.1-P1 Dec 9 20:04:47 centos6 dhcpd: Copyright 2004-2010 Internet Systems Consortium. Dec 9 20:04:47 centos6 dhcpd: All rights reserved. Dec 9 20:04:47 centos6 dhcpd: For info, please visit https://www.isc.org/software/dhcp/ Dec 9 20:04:47 centos6 dhcpd: Wrote 0 deleted host decls to leases file. Dec 9 20:04:47 centos6 dhcpd: Wrote 0 new dynamic host decls to leases file. Dec 9 20:04:47 centos6 dhcpd: Wrote 0 leases to leases file. Dec 9 20:04:47 centos6 dhcpd: Listening on LPF/eth0/08:00:27:7d:87:9a/192.168.1.0/24 Dec 9 20:04:47 centos6 dhcpd: Sending on LPF/eth0/08:00:27:7d:87:9a/192.168.1.0/24 Dec 9 20:04:47 centos6 dhcpd: Sending on Socket/fallback/fallback-net
Agora vamos levantar um cliente e vamos analisar os logs
tail -f /var/log/messages Dec 9 20:05:34 centos6 dhcpd: DHCPDISCOVER from 08:00:27:e3:41:30 via eth0 Dec 9 20:05:34 centos6 dhcpd: DHCPOFFER on 192.168.1.22 to 08:00:27:e3:41:30 via eth0 Dec 9 20:05:34 centos6 dhcpd: Added new forward map from exchange.douglasqsantos.com.br to 192.168.1.22 Dec 9 20:05:34 centos6 dhcpd: added reverse map from 22.1.168.192.in-addr.arpa. to exchange.douglasqsantos.com.br Dec 9 20:05:34 centos6 dhcpd: DHCPREQUEST for 192.168.1.22 (192.168.1.200) from 08:00:27:e3:41:30 via eth0 Dec 9 20:05:34 centos6 dhcpd: DHCPACK on 192.168.1.22 to 08:00:27:e3:41:30 via eth0
Agora vamos testar o dns para ver se esta resolvendo mesmo
nslookup exchange.douglasqsantos.com.br Server: 127.0.0.1 Address: 127.0.0.1#53 Name: exchange.douglasqsantos.com.br Address: 192.168.1.22
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.