sexta-feira, 17 de maio de 2013

Servidores DHCPv6 em Redes IPv6

Olá Pessoal.

Muito se fala da visível diferença que existe nos endereços IPv4 (32 Bits) e IPv6 (128 Bits), o que permite uma quantidade de endereços de ordem astronômica com o "novo" protocolo - 340 undecilhões de endereços possíveis! Porém, pouco se fala das VÁRIAS outras diferenças que existem entre os protocolos. O IPv6 é um protocolo novo e que, portanto, possui muitas particularidades bem diferentes do seu antecessor - o tradicional IPv4.

Por exemplo, quando pensamos na questão da atribuição dos endereços, o "novo" IPv6 permite que essa configuração seja realizada de diversas maneiras, tais como:


  • Autoconfiguração Stateless (SLAAC)
  • Configuração Estática
  • Configuração Estática EUI-64
  • DHCPv6 Stateful
  • DHCPv6 Stateless

Seria necessário um artigo para cada uma dessas técnicas, então estarei focando esse artigo nas principais diferenças entre o DHCPv6 nas modalidades: (i) Stateful e (ii) Stateless. Aproveitarei a oportunidade para mostrar as diferenças na configuração de um serviço DHCP em roteadores Cisco para ambientes IPv4 e IPv6.

No IPv4 o tradicional serviço de DHCP (Dynamic Host Configuration Protocol) é definido na RFC 2131 e diz respeito à distribuição automática de endereços em uma rede TCP/IPv4 através de um servidor reponsável por executar uma instância de um serviço DHCP. É nesse servidor em que o administrador irá criar um escopo definindo o intervalo de endereços que será distribuído para as máquinas, bem como outras configurações importantes: gateway da rede, servidores de resolução de nomes (DNS), opções, etc.

Nesse caso cabe ao servidor manter uma tabela com o registro dos clientes, seus respectivos endereços atribuídos e seu tempo de empréstimo (lease). Uma vez que o servidor é responsável por manter essa tabela com o "estado" dos clientes associando os endereços físicos das máquinas (MAC) com os endereços lógicos atribuídos (IP), então dizemos que esse é um serviço de natureza stateful, ou seja, é mantido um registro de informações.

A sua configuração através de um roteador Cisco é bastante simples, bastando a entrada de alguns poucos comandos para fazê-lo. Vamos observar o cenário da figura abaixo em que temos uma rede 192.168.221.0 /24, sendo que todas as máquinas estarão configuradas para obter o endereço dinamicamente e o roteador será responsável por executar o serviço DHCP. As configurações necessárias seriam as seguintes:



01. Router(config)# ip dhcp excluded-address 192.168.221.1 192.168.221.30
02. Router(config)# ip dhcp pool NOME-ESCOPO
03. Router(config-dhcp)# network 192.168.221.0 255.255.255.0
04. Router(config-dhcp)# default-router 192.168.221.1
05. Router(config-dhcp)# dns-server 192.168.221.2

Na primeira linha definimos quais endereços devem ser excluídos do escopo que será posteriormente criado, uma vez que esses endereços serão atribuídos estaticamente porque são reservados para os servidores. Na segunda linha foi dado um nome para o escopo que irá compreender os endereços da rede informada na terceira linha, sendo que nas linhas 4 e 5 são informados os endereços que as máquinas deverão utilizar como gateway e DNS. Pois bem, até aqui bem simples! 

Acontece que quando pensamos em IPv6 as coisas mudam bastante. Primeiro porque nativamente as redes IPv6 têm suporte ao processo de autoconfiguração stateless em que as próprias máquinas são capazes de formar seu endereço através de duas etapas: (i) a máquina determina seu identificador de host (sufixo) a partir do endereço físico da interface (MAC) e (ii) a máquina determina seu identificador de rede (prefixo) através de anúncios emitidos pelo roteador através de um protocolo de descoberta de vizinhança (NDP). Em um próximo artigo estarei escrevendo detalhamente sobre o processo de autoconfiguração dos enredeços IPv6...

Por conta disso, via de regra, um servidor DHCP seria algo dispensável em redes IPv6 e agora o roteador da infraestrutura se torna um elemento ainda mais importante. Apesar disso, o DHCPv6 é definido na RFC 3315 e pode existir em duas modalidades: (i) stateful e (ii) stateless

A modalidade stateless é aquela em que o servidor não mantém um registro dos endereços atribuídos aos clientes porque agora as máquinas irão formar automaticamente seu endereço a partir do endereço físico da interface de rede (MAC) e através dos anúncios dos prefixos dos roteadores. Nessa modalidade cabe ao servidor DHCPv6 informar apenas os endereços complementares, tais como: DNS e/ou Opções. Vale destacar que a funcionalidade stateless é muito útil para informar automaticamente os servidores DNS da rede, afinal em IPv6 o serviço DNS é fundamental para amenizar a "complexidade" do endereço de 128 bits.

Estamos falando de uma versão bastante simplificada do DHCP que não consome muitos recursos do "servidor" e que utiliza como base o processo de autoconfiguração! Para exemplificar como seria a configuração desse serviço, vamos observar o cenário da figura abaixo que é apenas uma reprodução da figura anterior num ambiente TCP/IPv6 em que temos a rede 2001:DB8:CAFE::/64.




O processo de configuração do DHCPv6 Stateless consiste em criar e configurar o "escopo" (linhas 1 e 2), destacando que é importante ativar o serviço DHCPv6 na interface conectada à LAN que receberá os endereços dinâmicos (linha 6) e informar aos hosts que as informações complementares devem ser aprendidas pelo serviço DHCPv6 (linha 7)

01. Router(config)# ipv6 dhcp pool NOME-ESCOPO
02. Router(config-dhcp)# dns-server 2001:DB8:CAFE::2/64
03. Router(config-dhcp)# exit
03. Router(config)# int f0/0
04. Router(config-if)# ipv6 enable
05. Router(config-if)# ipv6 address 2001:DB8:CAFE::1/64
06. Router(config-if)# ipv6 dhcp server NOME-ESCOPO
07. Router(config-if)# ipv6 nd other-config-flag
08. Router(config-if)# end

Embora não seja recomendado pela Cisco e nem todos os roteadores suportem, ainda existe uma versão stateful do DHCPv6 para aqueles que precisam manter o registro dos endereços dinamicamente atribuídos e que querem determinar o escopo explicitamente. Normalmente essa modalidade será empregada em servidores Linux e Windows Server. O processo de configuração do DHCPv6 Stateful no roteador ficaria:

01. Router(config)# ipv6 dhcp pool NOME-ESCOPO
02. Router(config-dhcp)# address prefix 2001:DB8:CAFE::/64 lifetime 1800 60
03. Router(config-dhcp)# dns-server 2001:DB8:CAFE::2/64
04. Router(config-dhcp)# exit
05. Router(config)# int f0/0
06. Router(config-if)# ipv6 enable
07. Router(config-if)# ipv6 address 2001:DB8:CAFE::1/64
08. Router(config-if)# ipv6 dhcp server NOME-ESCOPO
09. Router(config-if)# ipv6 nd managed-config-flag
10. Router(config-if)# exit

Reparem que agora tivemos que configurar na interface (linha 9) uma opção que instrui os clientes a receber todas as configurações de endereço via DHCPv6 (stateful). Além disso, na linha 2 o prefixo é explicitamente configurado.

Por fim, o segiunte comando poderia ser utilizado para fins de verificação:

Router# show ipv6 dhcp pool

Esse artigo mostra que as diferenças entre os protocolos IPv4 e IPv6 estão muito além do formato do endereço utilizado. O IPv6 é um protocolo que possui muitas particularidades que não existiam no seu antecessor, motivo pelo qual precisamos disseminar suas funcionalidades e qualificar mais profissionais preparados para lidar com o novo protocolo.

Abraço.

Samuel.

11 comentários:

  1. Na linha 2, quando rodo o comando address prefix 2001:DB8:CAFE::/64 lifetime 1800 60, o IOS não reconhece... portanto fiz a sequência:

    Router> enable
    Router# configure terminal
    Router(config)# ipv6 dhcp pool ESCOPO
    Router(config-dhcp)# dns-server 2001:db8:cafe::2
    Router(config-dhcp)# domain-name nome.com.br
    Router(config-dhcp)# prefix-delegation pool ESCOPO lifetime 1800 600
    Router(config-dhcp)# exit
    Router(config)# interface fastEthernet 0/0
    Router(config-if)# ipv6 enable
    Router(config-if)# ipv6 address 2001:db8:cafe::1/64
    Router(config-if)# ipv6 dhcp server ESCOPO
    Router(config-if)# ipv6 nd other-config-flag
    Router[config-if]#exit
    Router[config]# ipv6 local pool ESCOPO 2001:db8:cafe::/64 64
    Router(config)#

    Com isso, as máquinas pegaram o IP, Gateway e DNS ;-)

    ResponderExcluir
    Respostas
    1. Funcionou perfeitamente LordMEx. A única dúvida é porque o endereço de Gateway é o endereço link-local (FE80) em vez do unique-local.

      Excluir
    2. Nas redes IPv6, sempre que possível, há preferência pela utilização do endereço de link-local (fe80). Como o gateway tem que ser membro local da rede em que os clientes fazem parte para ser alcançável, a referência a ele ocorre através do endereço link-local.

      Excluir
  2. Samuel me tira uma duvida por favor.
    Eu recebo 1 bloco IPV6 /64 da minha operadora, eu consigo fazer alguma configuração para dividir em varias subredes para repassar para meus clientes? Porque eu sei que /64 é uma rede apenas, mas queria transformar em /32 por exemplo para poder dividir, só queria saber se é possivel

    ResponderExcluir
  3. Não. Se você recebe um /64, então tem apenas uma única rede.

    ResponderExcluir
    Respostas
    1. Mas dá para transformar o /64 em /32?

      Excluir
    2. Não, já que /64 é um pedaço muito pequeno de um /32. Ou seja, a partir de uma parte é impossível chegar no todo. Se você recebe apenas um /64, não há o que fazer.

      Excluir
    3. Eu fiquei sabendo que é possível dividir o /64 em /65, mas a unica desvantagem que perde a auto configuração

      Excluir
    4. Possível é, mas não faz nenhum sentido prático. Perder a funcionalidade de autoconfiguração não é apenas uma desvantagem, é algo muito grave. Não se esqueça que alguns dispositivos embarcados podem ser totalmente dependentes do SLAAC por sequer ter suporte a um cliente DHCPv6. Procure sempre seguir as boas práticas para não fazer nenhuma bobagem...

      Excluir