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 esse artigo será focado apenas 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 escreverei detalhadamente 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 de 1 a 3), destacando que é importante ativar o serviço DHCPv6 na interface conectada à LAN que receberá os endereços dinâmicos (linha 7) e informar aos hosts que as informações complementares devem ser aprendidas pelo serviço DHCPv6 (linha 8), através da ativação da flag O (other-config-flag).

01. Router(config)# ipv6 dhcp pool NOME-ESCOPO
02. Router(config-dhcp)# dns-server 2001:DB8:CAFE::2
03. Router(config-dhcp)# domain-name labcisco.com.br
03. Router(config-dhcp)# exit
04. Router(config)# int f0/0
05. Router(config-if)# ipv6 enable
06. Router(config-if)# ipv6 address 2001:DB8:CAFE::1/64
07. Router(config-if)# ipv6 dhcp server NOME-ESCOPO
08. Router(config-if)# ipv6 nd other-config-flag
09. 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
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), procedimento feito através da ativação da flag M (managed-config-flag). 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.

25 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
    3. segui todo o roteiro do IPV6 e na segunda linha (DNS-SERVER 2001:DB8:CAFE::2/64) tambémm não reconhecia.

      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
  4. Olá Professor, boa tarde.

    Estou aqui estudando e me surgiu uma dúvida, tenho um cenário com 3 routers, cada router com 2 sub redes /64 e entre as seriais /127.
    Para cada sub-rede /64 fiz um escopo com o dns e domain-name especifico por sub-rede, e dentro de cada interface definir os seus respectivo escopo, as máquinas de cada rede pegam seus respectivos endereços, contudo, o endereço DNS que configurei não, ele aplica apenas o do primeiro escopo em todas as estações. Minha dúvida: eu só posso trabalhar com um Escopo mesmo? ou é limitação do packet tracer, ou há alguma dica para que isso dê certo?

    Escopo A - Redes 2001:db8:acad:1::/64 dns-server 2001:db8:acad:1::ffff
    Escopo B - Redes 2001:db8:acad:2::/64 dns-server 2001:db8:acad:2::ffff e assim por diante.

    Notei que ao configurar o dns-server no livro há a escrita assim: Escopo A - Redes 2001:db8:acad:1::/64 dns-server 2001:db8:acad:1::ffff/64 no PT não aceita essa entrada.

    ResponderExcluir
    Respostas
    1. Você pode trabalhar com múltiplos escopos sem problema nenhum porque o DHCPv6 tem que ser aplicado individualmente em cada interface através do comando "ipv6 dhcp server ESCOPO", oportunidade em que o administrador irá definir qual escopo será utilizado naquela interface específica.

      O Packet Tracer não tem essa limitação, então acredito que você esteja aplicando o mesmo nome de escopo em todas as interfaces. Verifique esse detalhe...

      Excluir
    2. Por exemplo, veja a configuração abaixo:

      !
      !
      ipv6 unicast-routing
      !
      !
      ipv6 dhcp pool BABA
      dns-server 2001:DB8:CAFE:BABA::100
      domain-name labcisco.com.br
      !
      ipv6 dhcp pool FACA
      dns-server 2001:DB8:CAFE:FACA::100
      domain-name labcisco.com.br
      !
      !
      interface GigabitEthernet0/0
      no ip address
      duplex auto
      speed auto
      ipv6 address 2001:DB8:CAFE:BABA::1/64
      ipv6 nd other-config-flag
      ipv6 enable
      ipv6 dhcp server BABA
      !
      interface GigabitEthernet0/1
      no ip address
      duplex auto
      speed auto
      ipv6 address 2001:DB8:CAFE:FACA::1/64
      ipv6 nd other-config-flag
      ipv6 enable
      ipv6 dhcp server FACA
      !
      !

      Excluir
    3. Percebi isso, pois, minha configuração está de acordo com o seu exemplo.
      Mesmo assim, ao invés de definir o dns diferente para cada sub rede ele está atribuindo o do primeiro escopo, por exemplo se fosse o seu seria 2001:DB8:CAFE:BABA::100.

      Excluir
    4. O comando correto para definir o servidor DNS dentro do escopo NÃO é:
      dns-server 2001:db8:acad:1::ffff/64

      O correto é omitir o /64 no final:
      dns-server 2001:db8:acad:1::ffff

      Excluir
  5. !
    ipv6 dhcp pool FILIAL01
    dns-server 2001:DB8:CAFE:1::FFFF
    domain-name filia01.com
    ipv6 dhcp pool FILIAL02
    dns-server 2001:DB8:CAFE:4::FFFF
    domain-name filial02.com
    !
    interface GigabitEthernet0/0
    no ip address
    duplex auto
    speed auto
    ipv6 address 2001:DB8:CAFE:1::/64
    ipv6 nd other-config-flag
    ipv6 enable
    ipv6 dhcp server FILIAL01
    !
    interface GigabitEthernet0/1
    no ip address
    duplex auto
    speed auto
    ipv6 address 2001:DB8:CAFE:4::/64
    ipv6 nd other-config-flag
    ipv6 enable
    ipv6 dhcp server FILIAL02
    !

    A minha configuração está dessa forma em um dos roteadores.

    ResponderExcluir
    Respostas
    1. Verifique se você habilitou o roteamento IPv6 através do comando "ipv6 unicast-routing". Sem fazê-lo o roteador não irá emitir as mensagens RA, logo as máquinas não vão receber a flag O (ipv6 nd other-config-flag).

      As suas configurações de DHCPv6 me parecem corretas. Aproveitando, você está usando o endereço 2001:db8:cafe:1::/64 propositalmente na interface g0/0? Se estiver, vai funcionar porque o endereço 0 é válido, mas esteja ciente que essa não é uma boa prática!

      Excluir
    2. Está ativo sim.
      Quanto ao endereço, eu estou utilizando por conta de todos os exemplos. Não tenho a ideia de como deve ser ainda. Qual seria o exemplo de boas praticas para este caso?

      Excluir
    3. Tente resetar suas configurações e refazê-las no mesmo cenário para ter certeza de que não digitou nada errado. Fiz um teste rápido aqui no simulador e funcionou sem nenhuma restrição a distribuição de múltiplos testes.

      Excluir
    4. Você pode utilizar qualquer endereço que não seja o primeiro, visto que poderia haver confusão com o identificador da rede. No entanto esse detalhe é apenas uma questão de boas práticas, nenhuma restrição técnica.

      Excluir
    5. Em outro teste que fiz com um cenário um pouco diferente, ocorreu o mesmo problema, mesmo as configurações estando correta. Provavelmente é um bug do software simulador...

      Excluir
    6. Fiz, refiz, usei versão diferente do PT, modelo diferente de router, e não deu certo, sempre ocorre de pegar o dns de um único pool para todas sub redes.

      Paciência, o conceito foi entendido, agora é bola pra frente.
      Obrigado mestre.

      Excluir
    7. Fiz o teste com GNS3, funcionou perfeitamente. Obrigado.

      Excluir