quarta-feira, 9 de setembro de 2015

Configuração de Servidor DHCPv6 no Linux

Olá Pessoal,

Em outro artigo intitulado "Configuração de Servidor DHCP: Cisco x Linux" explico ao leitor como utilizar o serviço ISC-DHCP em distribuições Linux baseadas no Debian para configurar um servidor DHCP em redes IPv4. Neste artigo trago os passos necessários para fazer essa mesma configuração, mas agora no contexto de uma rede IPv6 (bem simples) apresentada na topologia abaixo. Uma primeira observação relevante é que o ISC-DHCP somente pode ser executado para IPv4 ou IPv6 isoladamente, ainda que seja possível executar dois daemons parametrizados para IPv4 e IPv6.




1. Instalação do Serviço DHCP

A primeira etapa consiste na instalação do pacote isc-dhcp-server para que o Linux possa ser posteriormente configurado como servidor DHCP na rede IPv6. Como de costume, essa tarefa é simples e rápida através do APT (Debian):

apt-get install isc-dhcp-server

2. Definir o DHCPv6 nas Interfaces

A segunda etapa é informar em qual(is) interface(s) o servidor irá responder requisições dos clientes da rede, através da edição do arquivo /etc/default/isc-dhcp-server. É também nesse arquivo que apontaremos para outro arquivo específico de configuração do serviço DHCPv6 e definiremos a opção -6 para ativar o serviço DHCP na modalidade IPv6.

# Defaults for isc-dhcp-server initscript
# sourced by /etc/init.d/isc-dhcp-server

#
# This is a POSIX shell fragment
#

# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
DHCPD_CONF=/etc/dhcp/dhcpd6.conf

# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
DHCPD_PID=/var/run/dhcpd6.pid

# Additional options to start dhcpd with.
OPTIONS="-6"

# On what interfaces should the DHCP server serve DHCP requests?
INTERFACES="eth1"

3. Configurar o Servidor DHCPv6

A etapa mais importante consiste na configuração do servidor DHCPv6 propriamente dito, tarefa que é realizada através da criação e edição do arquivo /etc/dhcp/dhcpd6.conf, seguindo o caminho informado previamente na etapa anterior. Cabe observar que para o escopo IPv6 ser válido, é necessário que a interface do servidor esteja configurada com um endereço válido na mesma rede dos demais endereços que serão distribuídos dinamicamente para os clientes. Para exemplificar definirei um intervalo com endereços que variam seu final de dddd::100 até dddd::199, apenas porque o quarteto "dddd" faz lembrar de DHCP e facilita a identificação dos endereços atribuídos dinamicamente. Também utilizarei os endereços IPv6 de DNS públicos da Google e o domínio "labcisco.com.br". 

###--- /etc/dhcp/dhcpd6.conf

ddns-update-style none;
default-lease-time 86400;
max-lease-time 86400;
authoritative;

subnet6 2001:db8:cafe::/64
{
    range6 2001:db8:cafe::dddd:100 2001:db8:cafe::dddd:199;
    option dhcp6.name-servers 2001:4860:4860::8888, 2001:4860:4860::8844;
    option dhcp6.domain-search "labcisco.com.br";

    # Reserva de Emprestimo (Opcional)
    host NOME
    {
        host-identifier option dhcp6.client-id 00:01:00:01:3a:ff:ba:e2:6b:b1:1f:01:23:45;
        fixed-address6 2001:db8:cafe::ffff:1;
    } 

}

Obs.: A configuração do endereço de gateway não é mais realizada através do servidor DHCP, mas por meio das mensagens Router Advertisement (ICMPv6 Tipo 134) enviadas pelos roteadores. O leitor encontra mais informações sobre a configuração do roteador em outro artigo intitulado "Anúncio de Prefixos IPv6 em Roteadores Linux". Ao utilizar um servidor DHCPv6 de natureza stateful na rede, é importante ativar as flags AdvManagedFlag e AdvOtherConfigFlag na configuração do arquivo /etc/radvd.conf, sendo que a flag AdvAutonomous pode ser desativada (off) para impedir a autoconfiguração de endereços (SLAAC).

4. Reserva de Empréstimo (Opcional) 

Opcionalmente o administrador da rede pode reservar/fixar o lease (empréstimo) de um endereço IPv6 específico para um determinado cliente, conforme destacado em azul na configuração anterior. No contexto do IPv4 essa ação era realizada através da associação de um IPv4 com o endereço físico (MAC) do cliente, mas no IPv6 essa associação mudou. Agora a reserva é feita através da associação do endereço IPv6 com o identificador único (DUID) do cliente DHCP que é um número grande de 14 bytes. Em clientes rodando o Linux é possível localizar o DUID no arquivo /var/lib/dhcpv6/dhcp6c_duid. Em clientes Windows é possível identificar o DUID através do comando "ipconfig /all"

5. Manipulação do Serviço DHCPv6

Antes de iniciar o serviço para realizar a distribuição dinâmica de endereços IPv6 via DHCP é necessário criar o arquivo /var/lib/dhcp/dhcpd6.leases para armazenar os logs com os registros dos empréstimos realizados. 

root@DHCPv6-Server:/# touch /var/lib/dhcp/dhcpd6.leases
root@DHCPv6-Server:/# service isc-dhcp-server start
[ ok ] Starting ISC DHCP Server: dhcpd.

Obs.: Caso o leitor tenha interesse nos procedimentos de configuração de um servidor DHCPv6 em roteadores Cisco, recomendo a leitura do artigo "Servidores DHCPv6 em Redes IPv6". Aqueles interessados em se aprofundar no conhecimento do protocolo IPv6 como um todo, não podem deixar de ler meu livro intitulado "IPv6 - O Novo Protocolo da Internet".

Façam seus testes...

Samuel.

13 comentários:

  1. Olá Professor. Primeiramente, quero agradecer pelos excelentes materiais disponibilizados em seu blog e, claro, pelos excelentes livros. "Segundamente", gostaria de uma luz para configurar seguinte cenário:

    http://s23.postimg.org/5kqalzi8r/Captura_de_tela_de_2015_09_10_19_15_20.png

    Os clientes ubuntu e linux lite estão pegando 3 endereços IPv6, 1 endereço dado servidor Debian e os outros 2 são endereços: global dinamic e global dinamic temporary; lembrando que no roteador apenas ativei o roteamento IPv6 e ativei as flags AdvManagedFlag e AdvOtherConfigFlag. Outro detalhe é que estas mesmas flags também estão ativas no servidor. Está certo mesmo pegar 3 endereços IPv6?

    ResponderExcluir
    Respostas
    1. Sim, está correto. Além do endereço IPv6 dinâmico aprendido pelo servidor DHCPv6 stateful, também existe o endereço autoconfigurado (SLAAC) gerado a partir dos anúncios RA do roteador. Se você estiver usando as extensões de privacidade no seu Linux, então serão gerados dois endereços automáticos, sendo que um deles possui o host-ID aleatório (temporário) e outro deles possui o host-ID gerado a partir do endereço MAC da placa de rede (EUI-64).

      Excluir
    2. Obrigado professor pelos esclarecimentos.

      Excluir
  2. Com essa configuração é possível usar v6 e v4 no mesmo server?

    ResponderExcluir
    Respostas
    1. O ISC-DHCP-SERVER somente permite que o serviço sirva endereços de uma família, seja IPv4 ou IPv6. No entanto, é possível executar uma segunda instância do daemon com a opção "-6".

      Excluir
    2. A última versão do ISC-DHCP-SERVER já suporta simultaneamente IPv4 e IPv6 através das opções INTERFACESv4 e INTERFACESv6 no arquivo /etc/default/isc-dhcp-server, assim não há mais necessidade de adicionar manualmente a opção -6. Esse mesmo arquivo já aponta em sua estrutura para os arquivos com as configurações específicas para IPv4 (/etc/dhcp/dhcpd.conf) e para IPv6 (/etc/dhcp/dhcpd6.conf).

      Excluir
  3. Segui seu artigo e funcionou perfeitamente, mas tambpem gostaria de servir ipv4 como faz?

    ResponderExcluir
  4. Eu tenho que configurar um servidor DHCPV6 para testar telefones IPV6. (um servidor isolado para não enviar ipv6 para empresa toda)

    ResponderExcluir
  5. Olá como vai professor?, segui o tutorial, desde ja agradeço pois deu certo, porém uso uma máquina Windows 7 e a mesma recebe o endereço do Servidor DHCPv6 mais não acessa a rede local, existe algo que deve ser configurado no Windows 7, tipo, desativar os túneis ISATAP e Teredo? ou existe alguma regra de ICMPv6 no iptables que deve ser criada ? Uso também um Debian onde consigo acessar tranquilamente meu servidor de web na rede local, grato desde ja, aguardo sua resposta.

    ResponderExcluir
    Respostas
    1. Não existe nenhuma configuração adicional que deve ser feita, por isso deveria estar funcionando. Como você está tentando fazer o acesso ao recurso remoto?

      Um detalhe importante é que a referência a um endereço IPv6 deve ser feita entre colchetes no navegador, por exemplo:
      [2001:db8:cafe::1]

      Se for um compartilhamento local via execução do Windows (Win+R), você deve usar o chamado IPv6 literal porque o prompt de execução não reconhece o caractere ":", por ex.:
      \\2001-db8-cafe--1.ipv6-literal.net

      Excluir