quarta-feira, 13 de fevereiro de 2013

Atualização das Zonas do Bind Com DHCP


Pessoal nesse artigo iremos aprender a integrar os serviços de DHCP e DNS, isso ajuda bastante na administração do dns e também é fundamental para o funcionamento do samba 4, toda vez que um cliente envia uma solicitação de ip dinâmico o servidor dhcp guarda essas informações dentro do arquivo dhcpd.leases, o que o DDNS ira fazer é pegar essas informações e inseri-las dentro das zonas especificadas do dns. Assim não iremos mais precisar ficar editando zonas no dns. Bem chega de papo e vamos para o que interessa.

Estou utilizando como ambiente de teste uma maquina virtual com duas interfaces de rede, uma como bridge simulando a conexão com a internet e outra como host-only previamente criada no virtualbox simulando a placa da rede local, concluindo ficou assim:

eth0 = wan (bridge) [dhcp]
eth1 = lan (host-only) [10.0.0.0/24]
hostname = KHALESSI
domínio = guiadoti.org.local

OBS: Mudem o nome do host, domínio e faixa de rede de acordo com o ambiente de vocês.

Primeiramente iremos precisar do serviço de dhcp e dns instalado para isso faça:

# aptitude install isc-dhcp-server isc-dhcp-client
# aptitude install bind9 dnsutils

Agora precisamos fazer alguns ajustes no dhcp, primeiramente edite o arquivo default do isc-dhcp-server, iremos especificar a interface de rede que o dhcp vai trabalhar.

# pico /etc/default/isc-dhcp-server

Modifique a linha INTERFACES para:
INTERFACES="eth1"

Agora iremos criar uma copia do dhcpd.conf para iniciarmos um do zero:

# cd /etc/dhcp
# mv dhcpd.conf dhcpd.conf.old
# pico dhcpd.conf

Insira as linhas abaixo:

# Define o tempo padrão que o dhcp vai conceder um ip ao cliente
default-lease-time 600;
# Tempo maximo que o dhcp concede um ip ao cliente
max-lease-time 7200;

# Define que o server é autoritativo
authoritative;
# Identifica o server dhcp
server-identifier 10.0.0.1;
# Esta linha inibe resposta aos pedidos de atualização DDNS dos clientes
ignore client-updates;

subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.199;
option subnet-mask 255.255.255.0;
option routers 10.0.0.1;
# Especifica o Servidor WINS
option netbios-name-servers 10.0.0.1;
# Especifica o Domínio da Rede
option domain-name "guiadoti.org.local";
# Servidor DNS da rede
option domain-name-servers 10.0.0.1;
option broadcast-address 10.0.0.255;
# Especifica o tipo de no NetBios
option netbios-node-type 8;
}

 # Ativa o DDNS
ddns-updates on;
# clientes com IP estático estão incluídas nas atualizações
update-static-leases on;
# Indica que o dhcp vai trabalhar em conjunto com o dns
ddns-update-style interim;
# Zona DNS que vai atualizar os nomes
ddns-domainname "guiadoti.org.local";
# Zona DNS reverse que vai atualizar os PTRs
ddns-rev-domainname "in-addr.arpa.";
# Responsável pela atualização do bind
include "/etc/bind/rndc.key";

# Zona master da rede interna onde o DHCP ira inserir os valores
zone guiadoti.org.local {
        primary 10.0.0.1;
        key rndc-key;
        }

# Zona reversa da rede interna onde o DHCP ira inserir os valores
zone 0.0.10.in-addr.arpa. {
        primary 10.0.0.1;
        key rndc-key;
}

OBS: Caso sua faixa de rede seja diferente você tem que alterar na zona reversa também, exemplo se sua rede tiver faixa 192.168.55.0 sua zona reversa deve ser 55.168.192.in-addr.arpa

Pronto agora que já estamos com o dhcp configurado vamos para o bind, mas antes mais alguns ajustes.

Antes de começar precisamos editar o arquivo hosts:

# pico /etc/hosts

Acrescente a linha:
10.0.0.1        KHALESSI.guiadoti.org.local        KHALESSI

Agora precisamos deixar as configurações do arquivo hosts.conf de modo que fique como é mostrado abaixo:

order hosts, bind
multi on

Por ultimo iremos editar o resolv.conf

# pico /etc/resolv.conf

search guiadoti.org.local
nameserver 10.0.0.1
nameserver 127.0.0.1

Agora primeiramente iremos editar o arquivo named.conf.local, é nele que inserimos as zonas que queremos.

# cd /etc/bind/
# pico named.conf.local

No final do arquivo iremos adicionar as linhas abaixo:

include "/etc/bind/rndc.key";
controls {
        inet 127.0.0.1 port 953
        allow { localhost; } keys { "rndc-key"; };
};

// Define a zona
zone "guiadoti.org.local" {
// Define que a zona é master
type master;
// Especifica o arquivo de banco de dados dos registros dns
file "/etc/bind/db.guiadoti";
// Aceita updates pela chave rndc
allow-update { key "rndc-key"; };
notify yes;
};

zone "0.0.10.in-addr.arpa" {
type master;
file "/etc/bind/rev.guiadoti";
allow-update { key "rndc-key"; };
notify yes;
};


Agora iremos criar o arquivo de BD da zona:

# pico db.guiadoti

$TTL 86400      ; 1 day
@                           IN          SOA  KHALESSI.guiadoti.org.local. root.KHALESSI.guiadoti.org.local. (
                                                               24012028              ; serial
                                                               3600                     ; refresh (1 hour)
                                                               900                       ; retry (15 minutes)
                                                               604800                  ; expire (1 week)
                                                               3600                     ; minimum (1 hour)
                                                               )
                               IN           NS          KHALESSI.guiadoti.org.local.
KHALESSI               IN           A             10.0.0.1


Agora precisamos criar o BD da zona reversa:

# pico rev.guiadoti

$TTL 86400      ; 1 day
@                           IN           SOA  KHALESSI.guiadoti.org.local. root.KHALESSI.guiadoti.org.local. (
                                                               24012023              ; serial
                                                               3600                      ; refresh (1 hour)
                                                               900                        ; retry (15 minutes)
                                                               604800                  ; expire (1 week)
                                                               3600                      ; minimum (1 hour)
                                                               )
                               IN           NS          KHALESSI.guiadoti.org.local.
1                             IN           PTR     KHALESSI.

Depois disso mude a permissão do diretório do bind para o dhcp poder atualizar.

# chmod 775 /etc/bind

Agora vamos alterar algumas configurações de segurança em nosso dns.

# pico named.conf.options

// Definimos que o nosso domínio existe, que ele é autoritativo
auth-nxdomain yes;

listen-on-v6 { any; };

// Esconde a versão do bind
version "N/A";

# Requisições que não sejam internas serão feitas em um dns extero
forwarders {
        208.67.222.222;  // ip do open dns
};

// O bind ira trabalhar nos seguintes ips (interfaces)
listen-on {
127.0.0.1;   // lo
10.0.0.1;     // eth1
};

// Aceita consultas vindas das redes defininas aqui
allow-query {
127.0.0.0/8;
10.0.0.0/24;
};

Agora reinicie seu dhcp e dns:

# /etc/init.d/isc-dhcp-server restart
# /etc/init.d/bind9 restart

Para evitar que o bind tente resolver ipv6 faça o seguinte:

# pico /etc/default/bind9

Deixe a linha desse modo:
OPTIONS="-4 -u bind"

Depois:

# /etc/init.d/bind9 restart


Agora é só levantar algumas maquinas virtuais com a interface host-only e fazer os testas, deixe as configurações de rede do Windows como dhcp e depois que pegar ip tente pingar os outros hosts pelo nome, para ver mais detalhes é só da uma olhada no syslog. Sei que esse artigo não ficou tão detalhado como os que costumo fazer mas prometo que depois faço outro complementando esse com mais detalhes sobre os parâmetros do bind por exemplo, pois aqui so expliquei alguns. Bem galera é isso ai, espero que essa dica seja de bom proveito para todos, qualquer duvida é só postar aqui que a gente responde o mais rápido possível, ate a próxima.

8 comentários:

  1. Bom dia Ricardo.

    Algum problema se eu executar esses procedimentos no Ubuntu? pq não subi ainda uma VM do Debian!!.

    ResponderExcluir
  2. Nunca utilizei o Ubuntu server amigo, mas partindo do principio que ele é derivado do Debian acho que não haverá problemas.

    ResponderExcluir
  3. BLz, logo estarei aplicando as configurações, uso o Ubuntu versão desktop mesmo..

    Estou esperando pelo squid+sarg..hehe..

    sempre visito seu blog, pelos comentários que deixo dar para perceber né!! rsrsr.. Estas de parabéns, sempre encontro o que procuro por aqui.

    Um abraço,

    ResponderExcluir
  4. Edvan ja que vc usa Ubuntu é aconselhável que vc use a versão server dele, e também experimente utilizar outras distros como Debian e CentOS, assim vc não vai ficar preso a uma unica distro, isso é importante para caso vc mude empresa não tenha surpresas com o novo ambiente. Estou meio sem tempo, então o artigo do squid com sarg vai demorar um pouco. Agradeço pelos elogios, e fico feliz de saber que este trabalho esta ajudando outras pessoas, conte sempre conosco para o que precisar, so queria pedir para que nos ajude a publicar esse blog para que outras pessoas possam estar usufruindo do conteúdo dele.

    ResponderExcluir
  5. Blz, sempre indico seu blog aos amigos, excelentes artigos tem aqui, sempre estou visitando.

    ResponderExcluir
  6. Ricardo, boa tarde.

    Obrigado por ajuda a comunidade de leigos como eu. Após terminar o passo"# pico named.conf.options"

    quando vou restartar o bind dá o seguinte erro:
    Stopping domain name service...: bind9rndc: connect failed: 127.0.0.1#953: connection refused
    .
    Starting domain name service...: bind9 failed!


    Olhando os logs, eu tenho isso:

    tal -f /var/log/syslog...
    root@server:/etc/bind# tail -f /var/log/syslog
    Jun 11 17:20:30 server named[2300]: /etc/bind/named.conf.local:16: unknown option 'zone'
    Jun 11 17:20:30 server named[2300]: /etc/bind/named.conf.local:26: unknown option 'zone'
    Jun 11 17:20:30 server named[2300]: /etc/bind/named.conf.default-zones:2: unknown option 'zone'
    Jun 11 17:20:30 server named[2300]: /etc/bind/named.conf.default-zones:10: unknown option 'zone'
    Jun 11 17:20:30 server named[2300]: /etc/bind/named.conf.default-zones:15: unknown option 'zone'
    Jun 11 17:20:30 server named[2300]: /etc/bind/named.conf.default-zones:20: unknown option 'zone'
    Jun 11 17:20:30 server named[2300]: /etc/bind/named.conf.default-zones:25: unknown option 'zone'
    Jun 11 17:20:30 server named[2300]: /etc/bind/named.conf:12: '}' expected near end of file
    Jun 11 17:20:30 server named[2300]: loading configuration: unexpected token
    Jun 11 17:20:30 server named[2300]: exiting (due to fatal error)


    Confesso que refiz os passos mas continua na mesma. Grato!

    ResponderExcluir
    Respostas
    1. veja este exemplo do named.conf.options

      options {
      directory "/var/cache/bind";
      version "insdisponivel";
      recursion yes;

      forwarders {
      172.16.1.254;
      };

      dnssec-validation no;

      auth-nxdomain no; # conform to RFC1035
      listen-on-v6 { any; };
      listen-on { 127.0.0.1/8; 172.16.1.0/24; };
      allow-recursion { 127.0.0.1; 172.16.1.0/24; };
      allow-query { 127.0.0.1; 172.16.1.0/24; };
      };

      Excluir