Artigo do tipo Tutorial
Recursos especiais neste artigo:
Contém nota Quickupdate, Conteúdo sobre Novidades.

Autoconfiguração de endereços via DHCPv6
Para que a internet continue crescendo e evoluindo, é inevitável que haja uma migração de protocolos de internet, do IPv4 para o IPv6. Isso ocasionará uma mudança no mercado de trabalho dos profissionais de rede. Eles precisarão cada vez mais aprimorar seus conhecimentos sobre esse novo protocolo. Desta forma, este artigo procurará explicar uma das funcionalidades básicas do IPv6, a autoconfiguração de endereços via DHCPv6. Os leitores aprenderão tanto a teoria como a prática sobre o assunto e, ao fim do estudo, estarão aptos a aplicar este conhecimento no seu dia a dia.


Em que situação o tema é útil

As informações trazidas neste artigo são úteis para auxiliar na expansão do IPv6. Quanto mais técnicas forem disseminadas, mais a desmistificação sobre as dificuldades de se operar com esse protocolo será exaurida. Dessa maneira, profissionais da área de redes de computadores, ao lerem o artigo, estarão capacitados em configurar as máquinas de sua rede com o uso do IPv6 de maneira automática.

Em função do excesso de informação ao qual estamos dispostos nos dias atuais, basta um piscar de olhos para se sentir desatualizado. A cada instante novas descobertas são feitas e novas tecnologias são desenvolvidas, o que nos exige uma constante sincronia com essa evolução para se manter vivo num mercado cada vez mais competitivo. Ou seja, o constante aprendizado se torna questão de existência para um profissional de qualquer área, de forma que simplesmente abster-se de acompanhar essa evolução o tornará obsoleto em pouco tempo.

Na área de redes de computadores, o assunto mais proeminente no momento é o novo protocolo de internet – o IPv6. Este protocolo foi criado com o intuito de prover suporte ao crescimento expansionista da internet, meta que o protocolo antigo, o IPv4, não permite alcançar.

O problema do IPv4 é uma característica intrínseca que ele possui: sua quantidade limitada de endereços que podem ser alocados a computadores distintos. Seus 32 bits de endereçamento permitem somente 4 bilhões de combinações diferentes, um número insuficiente se pensarmos que o mundo já possui aproximadamente 8 bilhões de pessoas. Em outras palavras, se cada um tiver um computador pessoal em sua casa, não será possível que todos se conectem a internet ao mesmo tempo por falta de endereços. Apenas uma parte dos usuários conseguirá entrar na rede, enquanto a outra parte deverá esperar para se conectar.

Já o IPv6 opera com 128 bits de endereçamento, o que permite mais de 11 undecilhões de combinações diferentes. Pode-se inclusive dizer que a quantidade de endereços disponíveis é suficiente para se criar uma internet IPv4 em cada estrela do universo. Isto é, se a constante de Avogadro (6x1023) que tanto estudamos no colégio já parecia exorbitante, agora estamos tratando de um número de proporções astronômicas!

A substituição do IPv4 para o IPv6 é inevitável, e mera questão de tempo – pouco tempo! Portanto, aprender os novos serviços, os protocolos e as adaptações, é essencial para um administrador de rede que queira se manter atualizado e crescer no mercado. Com base nisso, este artigo abordará o tema DHCPv6, que é uma nova versão do DHCP para operar com o IPv6. Explicaremos tanto o conceito do protocolo como a sua ferramenta operante.

DHCP, sua importância e funcionamento

DHCP é uma sigla, em inglês, para Dynamic Host Configuration Protocol. Se fôssemos traduzir para o português, seria o equivalente a “protocolo de configurações dinâmicas de máquina”.

Sua importância provém da complexidade do mundo moderno, no qual cada vez mais e mais máquinas operam e se comunicam entre si. A quantidade e a velocidade com que as informações trafegam entre elas hoje movem milhões de pessoas e empresas no mundo todo, e para que isso aconteça é fundamental que estas máquinas estejam configuradas corretamente, com endereços IP e parâmetros de rede. Contudo, configurar todas elas uma por uma de maneira manual seria impraticável e uma perda de tempo e recursos.

Por essa razão, técnicas de configurações automáticas de máquinas foram desenvolvidas. Uma delas é o DHCP, que por meio do protocolo e de uma ferramenta consegue distribuir endereços e parâmetros de rede às outras máquinas facilmente. Assim, uma máquina que queira ingressar na rede precisa somente do DHCP para se autoconfigurar, e desse modo começar a se comunicar.

O DHCP funciona por meio da arquitetura cliente servidor para intercambiar informações, na qual a máquina cliente atua requisitando dados importantes para sua configuração ao servidor. Este conhecedor dos dados da rede responderá à requisição e armazenará o estado de quem fez o pedido (cliente). Desta forma, ao final das trocas de mensagens, a máquina cliente poderá se conectar a rede e iniciar novas comunicações.

Para se operar com essa autoconfiguração via DHCP, pode-se utilizar duas versões: o DHCPv4 e o DHCPv6. Ambas são independentes e trabalham somente com os seus respectivos protocolos de internet, IPv4 e IPv6. Ou seja, se o administrador quiser trabalhar com IPv6, ele precisará utilizar DHCPv6, ao passo que se ele quiser trabalhar com IPv4, precisará utilizar DHCPv4. Neste artigo abordaremos somente o DHCPv6, deixando a cargo da curiosidade do leitor procurar explicações sobre DHCPv4.

IPv6, o novo protocolo de internet

Antes de falarmos sobre DHCPv6 é necessário que se tenha o mínimo de conhecimento sobre o protocolo IPv6. Afinal, o DHCPv6 opera somente por meio do protocolo IPv6 e somente distribui endereços IPv6. Logo, faz-se necessário introduzir alguns dos conceitos básicos do novo protocolo de internet.

Endereço IPv6

O endereço IPv6 é formado por 128 bits dispostos em oito campos. Os campos são separados pelo caractere “:” (dois pontos) e cada um deles é composto por quatro números hexadecimais. Por exemplo, 2001:0db8:1234:b010:d0ce:5678:c0ca:da9f.

O número hexadecimal em sua definição é representado por quatro bits que variam de valor, formando 16 combinações possíveis. A partir dessas diferentes combinações, o número hexadecimal pode receber desde o valor de 0 até 9 ou de A até F. Para as letras, uma consideração precisa ser feita com relação a sua escrita: tanto maiúsculas como minúsculas são aceitas igualmente em um endereço IPv6. Na Tabela 1 está apresentada a conversão de quatro números binários para um hexadecimal (além disso, adicionaremos uma coluna em decimal para ajudar no entendimento).

Tabela 1. Conversão entre binário, decimal e hexadecimal.

Neste momento, o leitor deve estar refletindo sobre como estão dispostos os 128 bits dos endereços IPv6. Percebe-se que os 128 bits estão colocados de maneira oculta nos 8 campos. Primeiramente recorde que cada um dos campos contém 4 hexadecimais e que estes são compostos por 4 bits. Dessa forma pode-se realizar o seguinte cálculo: 8 campos * 4 hexadecimais * 4 bits = 128 bits.

Como o endereço IPv6 é muito extenso, diversos erros podem acontecer ao se transcrever, como o esquecimento ou a inversão de alguns números. Com o intuito de evitar estes problemas e aumentar a compreensão, algumas regras de abreviação foram desenvolvidas.

A primeira delas é a eliminação de zeros à esquerda em cada campo. Dessa maneira, um endereço IPv6, como 2001:0db8:0012:0003:0456:789a:bc00:def0, pode ser reescrito da seguinte maneira: 2001:db8:12:3:456:789a:bc00:def0 (a cor vermelha destaca onde a regra poderá ser aplicada). Observe que os zeros à direita e no meio de cada campo, escritos em verde, se mantiveram de maneira igual após a aplicação da regra.

A segunda ocorre quando existe um campo composto somente por caracteres zeros. Neste caso, todos os quatro zeros do campo podem ser representados por um único zero. Logo, um endereço IPv6 2001:0db8:0000:ded0:0000:ba7a:ca1a:b0ca ficaria assim: 2001:0db8:0:ded0:0:ba7a:ca1a:b0ca (a cor vermelha e a azul servem para mostrar a transformação com a aplicação da regra).

A terceira e última é uma regra especial que só pode ser utilizada uma única vez na representação do endereço IPv6. Quando houver campos contíguos de zeros, estes poderão ser trocados pelos caracteres “::” (dois pontos, dois pontos). Portanto, um endereço IPv6 2001:0db8:0000:0000:0000:dad0:0000:0000, com a aplicação da regra, resultaria em: 2001:0db8::dad0:0000:0000 (a cor vermelha destaca onde a regra poderá ser aplicada e a verde, a sequência de zeros que se manteve igual após a aplicação da regra).

Caso se tentasse colocar mais de uma vez os dois pontos juntos (“::”) num mesmo endereço, se geraria uma ambiguidade. Vamos exemplificar utilizando o endereço 2001:0db8:0000:0000:ba1a:0000:0000:c0c0 (a cor vermelha destaca onde a regra poderá ser aplicada). Com a utilização da regra de maneira errada, ficaria assim: 2001:0db8::ba1a::c0c0.

Este endereço errado poderia corresponder a três outros endereços certos e distintos, 2001:0db8:0000:0000:ba1a:0000:0000:c0c0, 2001:0db8:0000:0000:0000:ba1a:0000:c0c0 e 2001:0db8:0000:ba1a:0000:0000:0000:c0c0. Por essa razão, quando há duas sequências de zeros separadas, o que geralmente se faz é abreviar, por essa regra, a maior sequência.

Quanto mais regras de abreviação forem utilizadas em um endereço IPv6, mais compreensível ele ficará aos administradores de rede, mais fácil será a sua manutenção e menor será o risco de erro. Eis um exemplo com as três regras aplicadas: a forma ampliada 2001:0db8:0000:0000:cafe:d0ce:0000:0001 se transforma na forma abreviada 2001:db8::cafe:d0ce:0:1.

Prefixo

Prefixo no IPv6, assim como no IPv4, é a maneira de se designar uma rede. A partir dele um conjunto de máquinas pode ser identificado de maneira única na internet. A vantagem de se trabalhar com prefixos é a possibilidade de se encaminhar os pacotes com baixos atrasos e alta eficiência.

O prefixo no IPv6 é representado utilizando a notação CIDR (Classless Inter-Domain Routing, descrito na RFC 4632). Ou seja, a representação é feita com o auxílio do caractere “/”, que servirá para separar o endereço do tamanho do seu prefixo. Um exemplo disso pode ser ilustrado por 2001:db8:face:b00c::b0a/64. Nesse exemplo, 2001:db8:face:b00c::b0a é o endereço IPv6 e o número 64 demarca o tamanho do prefixo.

Uma observação importante que precisa ser feita é que diferentemente dos dígitos expressos no endereço (que estão no formato hexadecimal), o tamanho do prefixo é expresso em numeração decimal. Ele especificará a quantidade de bits seguidos à esquerda do endereço IPv6 que designarão um prefixo (lembre-se de que cada hexadecimal é composto por 4 bits). Portanto, um endereço IPv6 2001:db8:beba:d0:1234:baba:ca:1234/64 possuirá os 64 bits mais à esquerda compondo o seu prefixo (que será a parte 2001:db8:beba:d0 do endereço).

Ciclo de vida

Todo endereço IPv6 possui um ciclo de vida que dita a sua existência. Desde a sua concepção até o seu término, o endereço passa por determinados estados. Cada um desses estados possui suas próprias características e um devido objetivo. Na Figura 1 está apresentado o ciclo de vida completo dos endereços IPv6 com o nome dos estados.

Figura 1. Ciclo de vida de um endereço IPv6.

Para compreendermos o que cada estado pertencente ao ciclo de vida dos endereços faz, descreveremos em tópicos a seguir:

1. Tentativa: estado inicial no qual se verifica se já existe algum endereço cópia no enlace conectado. Neste estado o endereço ainda não foi adicionado à interface;

2. Preferencial: segundo estado no qual o endereço já foi adicionado à interface e pode ser utilizado tanto para iniciar uma comunicação como para receber. O tempo que um endereço pode permanecer nesse estado é configurável no DHCPv6;

3. Depreciado: terceiro estado no qual o endereço só pode ser utilizado nas comunicações pré-existentes (já instanciadas), porém não se pode utilizá-lo para criar novas comunicações;

4. Inválido: quarto estado no qual o endereço não pode ser utilizado em nenhuma comunicação;

5. Válido: estado que engloba o preferencial juntamente ao depreciado. O tempo que um endereço pode permanecer nesse estado também é configurável no DHCPv6.

Classificação dos endereços

Os endereços IPv6, de acordo com suas características, podem ser categorizados em três classes: Unicast, Anycast e Multicast. Cada classe possui um propósito específico numa rede IPv6, e por isso é preciso conhecê-las antes de se trabalhar com eles.

Unicast

Os endereços Unicast são utilizados para fazer a identificação única de uma interface. Deste modo, os pacotes podem trafegar com origens e destinos específicos indicando cada interface de máquina.

Dentro do escopo Unicast existe uma subclassificação que especificará ainda mais este tipo. Citaremos alguns:

·Global: indica que o endereço é único no âmbito global e roteável na internet. Todos os endereços pertencem à faixa 2000::/3;

·Link Local: indica que o endereço é único no enlace e não pode ser roteado. Todos os endereços possuem o prefixo fe80::/64.

Anycast

Os endereços anycast são utilizados para designar um grupo de interfaces, na qual só a mais próxima da origem responderá ao pacote endereçado a essa classe. Além disso, não existe um prefixo especial para os endereços anycast, basta uma configuração nas máquinas para criá-los.

Multicast

Os endereços multicast são utilizados para identificar um grupo de interfaces (uma ou mais), podendo ser de máquinas distintas. Pacotes enviados com o destino a um endereço multicast serão entregues a todas as interfaces participantes do grupo.

Para o DHCPv6, dois endereços multicast são importantes:

·All_DHCP_Relay_Agents_and_Servers (FF02::1:2): endereço utilizado pelo cliente para que suas mensagens atinjam todos os relays e servidor DHCPv6 que estiverem conectados no enlace;

·All_DHCP_Servers (FF05::1:3): endereço utilizado pelos relays para retransmitirem as mensagens dos clientes aos servidores e outros relays DHCPv6 (que não estão conectados no enlace).

Principais mudanças comparado com o IPv4?

Diferentemente do endereço IPv6, o endereço IPv4 é escrito em quatro campos com valores decimais separados pelo caractere “.” (ponto). Além disso, a representação dos números dos endereços é feita em decimal, podendo ter valores de 0 a 255. Por exemplo: 192.0.2.128.

Com relação aos prefixos IPv4, estes possuem a designação de máscara de rede para separar a parte da rede pública, das sub-redes e das máquinas. No IPv6 esse recurso não existe.

Quanto à classificação dos endereços, o IPv4 trabalha com uma classe que não existe mais no IPv6, o broadcast. Esta mudança impacta no funcionamento do DHCP, pois a versão 4 opera com broadcast, enquanto que a versão 6 utiliza multicast.

DHCPv6, a nova versão do DHCP

O termo DHCP designa duas coisas que funcionam em conjunto, mas que são distintas: o serviço e o protocolo.

O serviço é a parte que gerencia a distribuição e a alocação de informação (endereço e parâmetro de rede). Para que ele funcione é preciso que exista uma aplicação no cliente e outra no servidor. Do lado do cliente, a aplicação trabalhará requisitando os dados e interpretando as respostas do servidor. É ele que autoconfigurará a máquina do cliente. Do lado do servidor, a aplicação trabalhará com a configuração dos dados a serem repartidos e enviados aos clientes.

Já o protocolo transporta os dados entre o cliente e o servidor. A partir de diversas regras pré-determinadas no protocolo, as duas aplicações conseguem conversar e realizar a configuração de maneira automática.

Descrição do protocolo

O DHCPv6 é o protocolo que atua na camada de transporte utilizando pacotes UDP para transmitir informações entre o cliente e o servidor. Os clientes escutam na porta 546 enquanto que os servidores e relays escutam na porta 547 (esta é uma das mudanças desta versão para a anterior, que trabalha com o IPv4).

Na sua RFC 3315, 13 mensagens são definidas, cada uma com sua respectiva função no processo de configuração automática de máquinas. Descreveremos brevemente cada uma delas:

·Solicit(1): mensagem utilizada pelos clientes para localizarem os servidores DHCPv6;

·Advertise(2): mensagem enviada pelos servidores DHCPv6 para indicar que seus serviços DHCPv6 estão ativos para operar. Ela é enviada em resposta à mensagem Solicit;

·Request(3): mensagem enviada diretamente a um servidor DHCPv6 para requisitar parâmetros de configuração, incluindo o endereço IPv6;

·Confirm(4): mensagem enviada pelo cliente para qualquer servidor DHCPv6 disponível para confirmar se o endereço adquirido ainda é válido no enlace conectado;

·Renew(5): mensagem enviada pelo cliente para o servidor DHCPv6 que forneceu os dados de configuração para atualizar os outros parâmetros de configuração e estender o tempo de vida do endereço provido;

·Rebind(6): mensagem enviada pelo cliente a qualquer servidor DHCPv6 para atualizar os outros parâmetros de configuração e estender o tempo de vida do endereço provido. Esta mensagem é transmitida logo após ser detectado que nenhuma resposta foi capturada para a mensagem Renew;

·Reply(7): mensagem enviada pelo servidor ao cliente por diversos motivos. Resposta às mensagens Solicit, Request, Renew e Rebind contendo os outros parâmetros de configuração e o endereço assinalado. Resposta à mensagem Information-Request contendo os outros parâmetros de configuração. Resposta à mensagem Cofirm confirmando ou não se o endereço adquirido ainda é válido no enlace conectado. Resposta às mensagens Release e Decline para informar que elas foram recebidas corretamente;

·Release(8): mensagem enviada pelo cliente ao servidor para informar a este que o cliente não utilizará mais um ou mais endereços assinalados;

·Decline(9): mensagem enviada pelo cliente ao servidor para informar que um ou mais dos endereços assinalados já estão em uso no enlace conectado;

·Reconfigure(10): mensagem enviada pelo servidor ao cliente para informar que existem novos dados de configuração. O cliente, portanto, deverá iniciar o processo Renew/Reply ou Information-Request/Reply para receber estas atualizações;

·Information-Request(11): mensagem enviada pelo cliente ao servidor para requisitar informações sobre os outros parâmetros de configuração, sem o pedido de endereço IPv6;

·Relay-Forw(12): mensagem enviada pelo relay ao servidor ou a outro relay para retransmitir as mensagens emitidas, ou por uma máquina cliente ou por outro relay. As mensagens retransmitidas são encapsuladas no cabeçalho desta mensagem;

·Relay-Repl(13): mensagem enviada pelo servidor ao relay para ser retransmitida ao cliente. Esta mensagem contém a mensagem que deve ser entregue ao cliente encapsulada em seu cabeçalho.

Descrição do serviço

O serviço DHCPv6 pode ser executado em dois modos: o stateful e o stateless. No primeiro, o DHCPv6 trabalha com a distribuição de endereços IPv6 registrada em log. Ele manterá também o estado do cliente que está recebendo a informação. Ou seja, ele armazenará o endereço e seus atributos distribuídos, assim como os dados sobre qual máquina os recebeu.

Já no segundo, o DHCPv6 trabalha com a distribuição de outros parâmetros de rede que não serão armazenados em logs. Nenhum dado sobre o estado do cliente é mantido. Por causa disso, não há controle sobre os dados trafegados.

Este artigo focará no modo stateful, pois queremos trabalhar com a entrega de endereços IPv6. Logo, só descreveremos o procedimento e as configurações relativas a ele.

Procedimento: como o serviço funciona

O procedimento de operação do serviço de DHCPv6 é iniciado na aplicação da máquina do cliente. Esta enviará uma mensagem Solicit à rede à procura de servidores DHCPv6 (destino multicast All_DHCP_Relay_Agents_and_Servers) que possam informar os dados para autoconfiguração. Caso um relay DHCPv6 seja encontrado, este retransmitirá a mensagem Solicit encapsulada na mensagem Relay-Forw (destino multicast All_DHCP_Servers) até encontrar um servidor.

Quando um servidor recebe essas mensagens, ele responde com uma mensagem Advertise ao cliente se apresentando para operar. Caso exista um relay no caminho, a mensagem Advertise será encapsulada na mensagem Relay-Repl para ser retransmitida.

O cliente, ao receber as respostas Advertise de todos os servidores habilitados, escolherá um deles para se comunicar. A partir disso ele enviará uma mensagem Request para firmar a troca de dados para a autoconfiguração. O endereço de destino continuará sendo o multicast, contudo, um campo na mensagem, server identifier, identificará o servidor escolhido. Da mesma maneira que na primeira mensagem, se houver um relay DHCPv6 no caminho, essa será também encapsulada na Relay-Forw ao ser retransmitida.

O servidor, ao receber essa mensagem, irá então armazenar em log os dados do cliente e responderá com uma mensagem Reply informando o endereço e seus atributos para autoconfiguração. Além disso, se houver um relay DHCPv6, esta mensagem será encapsulada em uma mensagem Relay-Repl para alcançar o cliente.

Por fim, o cliente, ao receber essa última mensagem, começará a autoconfigurar sua interface de rede.

Atividade prática

Neste tópico aprenderemos como instalar e operar com o DHCPv6. Existem diversos aplicativos que realizam este serviço, contudo escolheu-se um que apresentava as funcionalidades do IPv6 bem implementadas.

Dibbler é uma ferramenta interoperável open source de DHCPv6. Ele foi desenvolvido por Tomasz Mrugalski e Marek Senderski como projeto de mestrado de Ciência da Computação na Gdansk University of Technology em 2003. Suas principais funcionalidades provêm do seu amplo suporte ao modo de operação stateful e stateless.

Há implementações para diversos sistemas operacionais como Windows, Linux e MAC, cuja instalação é simples e intuitiva. Neste artigo trabalharemos com o Linux Ubuntu.

Equipamentos

Para realizar a autoconfiguração de endereços IPv6 via DHCPv6, utilizaremos três tipos de equipamentos: servidor, roteador e computador. Todos com o sistema operacional Ubuntu na versão 11.10 e o Dibbler na versão 0.8.2. Na Figura 2 estão apresentados os desenhos esquemáticos que representam cada equipamento que será utilizado nas experiências.

Figura 2. Equipamentos para configuração DHCPv6.

Instalação do Dibbler

Antes de começar a instalação é preciso verificar se a ferramenta já está instalada nas respectivas máquinas e qual é sua respectiva versão. Para isso, em cada uma das máquinas, digite os seguintes comandos num terminal:

$ dibbler-client help

$ dibbler-relay help

$ dibbler-server help

Para a experiência utilizaremos a versão 0.8.2 nos três serviços. Acredita-se que versões posteriores ou pouco antigas também funcionem corretamente. Na seção Links está apresentado o site em que se encontra disponível o Dibbler para download.

Primeira experiência

Para a nossa primeira configuração montaremos um simples experimento composto por um servidor e um computador. Para isso conecte-os por algum meio de comunicação, podendo ser Wi-Fi, cabo ethernet ou outro qualquer. A Figura 3 mostra um desenho ilustrativo da topologia que deverá ser criada.

Figura 3. Cenário da primeira experiência de DHCPv6.

Após criarmos a topologia de rede, é importante observar as configurações de cada uma das máquinas. Repare também as características das interfaces conectadas entre si. Assim entenderemos a troca de mensagens e saberemos quando o endereço foi adicionado na interface do computador. Para isso, em cada uma das máquinas, digite o seguinte comando:

$ ip addr show

Após a execução desse comando, descubra qual interface está conectada em cada máquina e anote para utilizar nas configurações subsequentes.

Máquina servidor

Em seguida, trabalharemos na configuração do servidor DHCPv6. Em um terminal do servidor, edite o arquivo que se encontra no caminho /etc/dibbler/server.conf (crie-o caso ele não exista). Um editor fácil de operar é o “nano”, mas existem outros, como vi, vim, emacs, pico, etc. A escolha sobre qual ferramenta de edição utilizar deve ser feita de acordo com o conhecimento do administrador de rede que está configurando. No terminal do servidor, digite o seguinte comando para abrir o arquivo de configuração em modo de edição:

$ sudo nano /etc/dibbler/server.conf

Feito isso, adicione as linhas da Listagem 1 dentro do arquivo, já aberto para edição.

Listagem 1. Arquivo de configuração do servidor DHCPv6.

log-level 7 
log-mode short 
preference 0 
iface eth0 {
	preferred-lifetime 3600
	valid-lifetime 7200
	class {
		pool 2001:db8:cafe::
          100-2001:db8:cafe::200
	}
}

A seguir, explicaremos o motivo do uso de cada uma das linhas presente no arquivo de configuração da Listagem 1:

·log-level 7: define o nível de detalhes das mensagens de log. O valor 7 indica que as mensagens possuirão o maior nível de detalhamento quando o serviço estiver em um estado de produção;

·log-mode short: define o modo de operação do log. O modo short é o mais recomendado para a visualização a partir dos terminais que possuem um tamanho pequeno e limitado (nosso caso);

· preference 0: define o nível de preferência do serviço DHCPv6. A máquina cliente, ao receber as mensagens de todos os servidores com essa informação, preferirá se comunicar com o servidor que possuir o menor valor dessa configuração;

·iface eth0: define o nome da interface na qual será tomada as ações do serviço de servidor DHCPv6. No nosso caso, trabalharemos com a eth0, mas o leitor deverá colocar a interface previamente anotada (usando o comando ip addr show);

·preferred-lifetime 3600: define o tempo que o endereço permanecerá no estado preferido, no caso, 3600 segundos. Isso dará uma ideia ao servidor de quando o cliente enviará uma mensagem para atualizar esse tempo;

· valid-lifetime 7200: define o tempo que o endereço permanecerá no estado válido, no caso, 7200 segundos. O valor deste campo precisa ser maior que o campo preferred lifetime, pois, como já vimos, um estado engloba o outro. Além disso, ele dará uma ideia ao servidor de quando o cliente enviará uma mensagem para atualizar esse tempo;

·class: cria um pequeno escopo para colocar o pool de prefixos e suas características na configuração do servidor;

·pool 2001:db8:cafe::100-2001:db8:cafe::200: define um range de prefixos que pode ser alocado aos clientes. No nosso caso, os endereços podem variar o final de 100 até 200.

Depois de gerado o arquivo de configuração, podemos iniciar o serviço de servidor DHCPv6. Para isso, digite o seguinte comando no terminal:

$ sudo dibbler-server start

Máquina cliente

Depois de terminada a iniciação do Servidor DHCPv6, podemos configurar o computador para requisitar o endereço IPv6.

No computador, edite o arquivo que se localiza no caminho /etc/dibbler/client.conf (crie-o caso ele não exista). Utilizaremos o editor nano, mas como já dissemos, qualquer outro pode ser utilizado. Sendo assim, no terminal do cliente, digite o seguinte comando para abrir o arquivo de configuração em modo de edição:

$ sudo nano /etc/dibbler/client.conf

Em seguida, adicione as linhas da Listagem 2 neste arquivo, já aberto para edição.

Listagem 2. Arquivo de configuração do cliente DHCPv6.

log-level 7
log-mode short
iface eth0 {
	ia
}

A seguir, explicaremos o motivo do uso de cada uma das linhas presente no arquivo de configuração da Listagem 2:

·log-level 7: Essa linha possui a mesma explicação que a linha respectiva definida na Listagem 1;

·log-mode short: Essa linha possui a mesma explicação que a linha respectiva definida na Listagem 1;

·iface eth0: Essa linha possui a mesma explicação que a linha respectiva definida na Listagem 1. Contudo é preciso trocar pela interface anotada para a máquina do cliente;

·ia: representa uma requisição de um cliente a um simples endereço IP.

Vale destacar que a linha stateless precisa estar comentada, pois ela habilita outro modo de operação que não permite requisitar o endereço IP.

Depois de gerado o arquivo de configuração, podemos iniciar o serviço de cliente DHCPv6. Para isso, digite o seguinte comando no terminal:

$ sudo dibbler-client start

Depois que o serviço tiver iniciado, acontecerá uma troca de mensagens entre o cliente e o servidor até que culmine com a distribuição e a alocação de um endereço IPv6.

Para observar o endereço IPv6 adicionado à interface do computador, digite o seguinte comando no seu terminal:

$ ip addr show

Segunda experiência

Neste cenário, tornaremos as coisas um pouco mais complexas e adicionaremos um roteador. Para isso o roteador deverá ser conectado entre o computador e o servidor. A Figura 4 mostra um desenho ilustrativo da topologia que deverá ser criada.

Figura 4. Cenário da segunda experiência de DHCPv6.

Máquina Servidor

As configurações na máquina servidora são parecidas com a do exemplo anterior. Todavia, algumas alterações precisão ser feitas por causa da adição do relay no meio da comunicação entre o cliente e o servidor. Por causa disso, a Listagem 3 mostrará como deve ficar o novo arquivo de configuração (este arquivo se encontra no mesmo caminho da experiência anterior).

Listagem 3. Arquivo de configuração do servidor DHCPv6.

log-level 7 
log-mode short 
preference 0 
iface relay1 {
relay eth0
 interface-id 1000
  	preferred-lifetime 3600
  	valid-lifetime 7200
  	class {
    		pool 2001:db8:cafe::
          100-2001:db8:cafe::200
  	}
}

A seguir, explicaremos o motivo do uso das linhas, distintas em relação à Listagem 1, porém presentes no arquivo de configuração da Listagem 3:

·iface relay1: define o nome da interface na qual serão tomadas as ações do serviço de servidor DHCPv6. No nosso caso, trabalharemos com a relay1;

·relay eth0: especifica o nome da interface física que será utilizada para receber as mensagens do relay;

·interface-id 1000: especifica um valor que identifica a interface do servidor que recebe as mensagens do relay. Ele serve para auxiliar o servidor na detecção da interface na qual as mensagens foram geradas. Por essa razão, o mesmo valor deve ser usado na configuração do relay.

Assim como no exemplo anterior, depois de gerado o arquivo de configuração, deve-se iniciar o serviço de servidor DHCPv6. Para isso, digite o seguinte comando no terminal:

$ sudo dibbler-server start

Máquina Relay

Antes de começar a configurar o relay, é preciso se conhecer as características de suas interfaces, para assim conseguirmos configurar o seu serviço. Para isso, digite em um terminal:

$ ip addr show

Em seguida, descubra qual interface está conectada com o cliente e com o servidor e anote para utilizar nas configurações subsequentes.

As configurações no relay devem ser feitas depois das configurações do servidor e antes das do cliente. Dessa forma, ao iniciar o serviço no cliente, todas as máquinas operarão corretamente e a autoconfiguração ocorrerá rapidamente. Para isso, no roteador, edite o arquivo que se localiza no caminho /etc/dibbler/relay.conf (crie-o caso ele não exista) com o comando:

$ sudo nano /etc/dibbler/relay.conf

Feito isso, adicione as linhas da Listagem 4 dentro do arquivo, já aberto para edição.

Listagem 4. Arquivo de configuração do relay DHCPv6.

log-level 7
log-mode short
iface eth1{ # interface conectada 
ao cliente
	client multicast yes
	client unicast 2001:
     db8:f0ca::2 
	interface-id 1000
}
iface eth0{ # interface 
conectada ao servidor
	server multicast yes
}

A seguir, explicaremos o motivo do uso de cada uma das linhas presente no arquivo de configuração da Listagem 4:

·log-level 7: Essa linha possui a mesma explicação que a linha respectiva definida na Listagem 1;

·log-mode short: Essa linha possui a mesma explicação que a linha respectiva definida na Listagem 1;

·iface eth1: define a interface na qual serão tomadas as ações do serviço de relay DHCPv6. Nesse caso escolhemos a eth1, que está diretamente conectada ao cliente, mas o leitor deverá colocar a interface previamente anotada (usando o comando ip addr show);

·client multicast yes: instrui o Dibbler relay a escutar nessa interface as mensagens enviadas pelo cliente ao endereço Multicast (ff02::1:2);

·client unicast 2001:db8:f0ca::2: instrui o Dibbler relay a escutar mensagens providas para certo endereço unicast. Geralmente se utiliza esse comando para interligar mais de um relay;

·Interface-id 1000: especifica um valor que identifica a interface do relay que recebe as mensagens do cliente. Ele serve para auxiliar o servidor na detecção da interface de onde as mensagens foram geradas. Por essa razão, o mesmo valor deve ser usado na configuração do relay;

·iface eth0: define a interface na qual serão tomadas as ações do serviço de relay DHCPv6. Nesse caso escolhemos a eth0, que está diretamente conectada ao servidor, mas o leitor deverá colocar a interface previamente anotada (usando o comando ip addr show);

·server multicast yes: instrui o Dibbler relay a retransmitir as mensagens do cliente para o servidor utilizando o endereço Multicast (ff05::1:3);

Depois de gerado o arquivo de configuração, podemos iniciar o serviço de relay DHCPv6. Para isso, digite o seguinte comando no terminal:

$ sudo dibbler-relay start

Com o serviço operante, a configuração do cliente pode ser feita, já que as mensagens serão retransmitidas corretamente até o servidor.

Máquina cliente

As configurações na máquina cliente são idênticas às do exemplo anterior. Por causa disso nenhuma configuração precisa ser alterada e, portanto basta utilizá-la. Sendo assim, repita os mesmos passos e inicie a aplicação para adquirir o endereço.

Resultados das experiências

Para entender melhor a troca de mensagens e observar as informações que estão sendo transmitidas, pode ser utilizado o programa open source wireshark. Dessa maneira, o administrador de rede conseguirá observar os erros e dar manutenção facilmente.

No sistema operacional que estamos usando, o Ubuntu, a instalação do wireshark é bem simples, bastando digitar no terminal:

$ sudo apt-get install wireshark

Em seguida, utilize o programa para capturar os pacotes que estão passando pela sua interface de rede. Dessa maneira o leitor poderá observá-los e estudá-los para compreender melhor a troca de informações utilizadas no serviço DHCPv6.

Conclusão

Neste artigo, vimos como funciona um dos modos de operação do DHCPv6, a autoconfiguração de endereços, desde o seu conceito teórico até uma aplicação prática para auxiliar no aprendizado. Contudo, existe outro modo que não foi coberto, o stateless, que possui algumas diferenças. Além disso, o DHCPv6 possui uma nova funcionalidade, chamada prefix delegation, que opera com a entrega de prefixos em vez de endereços. Todavia, esse assunto é muito extenso e precisa ser tratado em outro artigo.

Esperamos que os ensinamentos trazidos nesse artigo facilitem o ingresso do leitor ao iminente e inevitável mundo do IPv6! Inclusive, vale a pena frisar que quem quiser se aprofundar no assunto, há materiais disponibilizados pelo NIC.br conforme exposto na seção Links.

Links
Dibbler – ferramenta DHCPv6
http://klub.com.pl/dhcpv6/#DOWNLOAD

Guia de uso do Dibbler
http://klub.com.pl/dhcpv6/doc/dibbler-user.pdf

RFC 3315 – Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
http://www.ietf.org/rfc/rfc3315.txt

Apostila “Curso IPv6 básico” do NIC.br
http://ipv6.br/download/

RFC 2460 – Internet protocol, version 6 (IPv6) Specification
http://www.ietf.org/rfc/rfc2460.txt

Núcleo de Informação e Coordenação do Ponto BR
www.nic.br