Mudanças entre as edições de "IER60808: Endereçamento IPv6"
(21 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
[[PJI11103:_Introdução_a_LAN|Próxima aula]]<br> | [[PJI11103:_Introdução_a_LAN|Próxima aula]]<br> | ||
− | [[IER60808: | + | [[IER60808:_Subredes_IPv4_e_Roteamento|Aula anterior]] |
− | |||
− | |||
+ | __notoc__ | ||
Endereços IPv4 têm 32 bits e são capazes de endereçarem até pouco mais de 4 bilhões de hosts, e isso parecia mais do que suficiente quando o protocolo IP foi criado, nos primórdios da Internet. Mas desde os anos 1990, quando se massificou essa rede, constatou-se que os endereços IPv4 se esgotariam num horizonte próximo. Para evitar esse problema, e possibilitar que a Internet continuasse se expandindo (e também por outros motivos), foi criado o protocolo IPv6, cujos endereços têm 128 bits. Essa questão está bem descrita na introdução do livro [http://ipv6.br/lab/ Laboratório de IPv6]: | Endereços IPv4 têm 32 bits e são capazes de endereçarem até pouco mais de 4 bilhões de hosts, e isso parecia mais do que suficiente quando o protocolo IP foi criado, nos primórdios da Internet. Mas desde os anos 1990, quando se massificou essa rede, constatou-se que os endereços IPv4 se esgotariam num horizonte próximo. Para evitar esse problema, e possibilitar que a Internet continuasse se expandindo (e também por outros motivos), foi criado o protocolo IPv6, cujos endereços têm 128 bits. Essa questão está bem descrita na introdução do livro [http://ipv6.br/lab/ Laboratório de IPv6]: | ||
Linha 13: | Linha 12: | ||
<br>''Número de hosts na Internet mundial registrados no DNS (a quantidade total deve ser bem maior !). As quantidades são expressadas em milhões de hosts. Obtido de: [https://www.statista.com/statistics/264473/number-of-internet-hosts-in-the-domain-name-system/ Statista]'' | <br>''Número de hosts na Internet mundial registrados no DNS (a quantidade total deve ser bem maior !). As quantidades são expressadas em milhões de hosts. Obtido de: [https://www.statista.com/statistics/264473/number-of-internet-hosts-in-the-domain-name-system/ Statista]'' | ||
− | = Endereço IPV6 | + | = Laboratórios = |
+ | |||
+ | {{collapse top|Endereço IPV6}} | ||
Um endereço IPV6 possui 128 bits disponíveis para endereçar hosts, possibilitando 340 undecilhões de endereços possíveis. Para se ter uma ideia do que isto representa, se convertêssemos cada IPv6 possível em um cm2, poderíamos envolver toda a superfície do planeta Terra com 7 camadas de endereços.. | Um endereço IPV6 possui 128 bits disponíveis para endereçar hosts, possibilitando 340 undecilhões de endereços possíveis. Para se ter uma ideia do que isto representa, se convertêssemos cada IPv6 possível em um cm2, poderíamos envolver toda a superfície do planeta Terra com 7 camadas de endereços.. | ||
Linha 19: | Linha 20: | ||
[[Arquivo:End1.png|600px]] | [[Arquivo:End1.png|600px]] | ||
− | + | = Adoção no Brasil = | |
O Brasil está entre os 10 países com maior adoção de IPv6, segundo o Google: | O Brasil está entre os 10 países com maior adoção de IPv6, segundo o Google: | ||
Linha 31: | Linha 32: | ||
<br>''Cópia de tela de um celular mostrando o uso de endereço IPv6 em seu link de dados'' | <br>''Cópia de tela de um celular mostrando o uso de endereço IPv6 em seu link de dados'' | ||
− | + | = Atividade = | |
− | + | Para realizar estas atividades serão necessários alguns comandos: | |
+ | * '''Teste com ping6 para endereço de escopo local''': deve-se especificar a interface de rede por onde as mensagens do ping6 serão transmitidas: <br><br>'''ping6 -I eth0''' ''endereço_IPv6_a_ser_pingado''<br><br> | ||
+ | * '''Teste com ping6 para endereço de escopo global''': não é prciso especificar a interface de rede por onde as mensagens do ping6 serão transmitidas: <br><br>'''ping6 ''' ''endereço_IPv6_a_ser_pingado''<br><br> | ||
+ | * '''Tabela de rotas''':<br><br>''' route -A inet6'''<br><br> | ||
− | = Tipos de Endereços IPV6 | + | # Verifique quais provedores de conteúdo já usam IPv6. Isso pode ser feito com consultas DNS como esta: <syntaxhighlight lang=bash> |
+ | host -t aaaa www.google.com | ||
+ | </syntaxhighlight>Algumas sugestões para procura: | ||
+ | #* IFSC | ||
+ | #* UFSC | ||
+ | #* UDesc | ||
+ | #* UOL | ||
+ | #* Epagri | ||
+ | #* Facebook | ||
+ | #* ... e outros ! | ||
+ | # Em seu computador use o programa ifconfig para identificar o endereço IPv6 associado a sua interface ethernet. | ||
+ | # Use o [http://manpages.ubuntu.com/manpages/trusty/man8/ping.8.html ping6] para testar a comunicação com IPv6 entre seu computador e o de um colega. Há alguma diferença no resultado, em relação ao ''ping'' baseado em IPv4 ? | ||
+ | # Com o ''ping6'' em execução ative a captura de pacotes com ''wireshark'' ou ''tcpdump''. Visualize os pacotes enviados e recebidos pelo ''ping6'' ... identifique os protocolos envolvidos. Qual a diferença em relação ao ''ping'' baseado em IPv4 ? | ||
+ | # Adicione outro endereço IPv6 ao seu computador. Escolha um endereço formado pelo prefixo ''AA:BB::/64'' e o endereço MAC da sua interface de rede. | ||
+ | # Teste novamente com ''ping6'' a comunicação com os computadores de seus colegas. | ||
+ | # Assim como no caso de IPv4, existe uma tabela de rotas IPv6 em cada ''host''. Visualize a tabela de rotas IPv6 em seu computador com este comando: <syntaxhighlight lang=bash> | ||
+ | route -A inet6 | ||
+ | </syntaxhighlight>... e procure identificar as subredes ali listadas. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top|Tipos de Endereços IPV6}} | ||
* [https://community.cisco.com/t5/switching/ipv6-global-unicast-address-range/m-p/1510629/highlight/true#M148325 Faixas de endereços IPv6] | * [https://community.cisco.com/t5/switching/ipv6-global-unicast-address-range/m-p/1510629/highlight/true#M148325 Faixas de endereços IPv6] | ||
− | |||
O IPV6 possui categorias de endereços, conforme a tabela a seguir: | O IPV6 possui categorias de endereços, conforme a tabela a seguir: | ||
Linha 51: | Linha 74: | ||
*Endereços '''Global unicast''': Equivalente aos endereços públicos IPv4, o endereço global unicast é globalmente roteável e acessível na Internet IPv6. | *Endereços '''Global unicast''': Equivalente aos endereços públicos IPv4, o endereço global unicast é globalmente roteável e acessível na Internet IPv6. | ||
− | + | = Endereços Unicast = | |
− | |||
− | |||
[[Arquivo:Lla.png|600px]] | [[Arquivo:Lla.png|600px]] | ||
Linha 69: | Linha 90: | ||
Atualmente, está reservada para atribuição de endereços a faixa 2000::/3 (001), ou seja, 3 primeiros bits utilizados para registros da faixa 2000. Equivalente aos endereços públicos IPv4, o endereço global unicast é globalmente roteável e acessível na Internet IPv6. Ele é constituído por três partes: o prefixo de roteamento global, utilizado para identificar o tamanho do bloco atribuído a uma rede; a identificação da sub-rede, utilizada para identificar um enlace em uma rede; e a identificação da interface, que deve identificar de forma única uma interface dentro de um enlace.Sua estrutura foi projetada para utilizar os 64 bits mais a esquerda para identificação da rede e os 64 bits mais a direita para identificação da interface. | Atualmente, está reservada para atribuição de endereços a faixa 2000::/3 (001), ou seja, 3 primeiros bits utilizados para registros da faixa 2000. Equivalente aos endereços públicos IPv4, o endereço global unicast é globalmente roteável e acessível na Internet IPv6. Ele é constituído por três partes: o prefixo de roteamento global, utilizado para identificar o tamanho do bloco atribuído a uma rede; a identificação da sub-rede, utilizada para identificar um enlace em uma rede; e a identificação da interface, que deve identificar de forma única uma interface dentro de um enlace.Sua estrutura foi projetada para utilizar os 64 bits mais a esquerda para identificação da rede e os 64 bits mais a direita para identificação da interface. | ||
− | + | = Endereço Multicast = | |
− | |||
− | |||
− | |||
[[Arquivo:Multcast.png|600px]] | [[Arquivo:Multcast.png|600px]] | ||
O IPV6 não possui endereço broadcast, e sim multicast. Endereços multicast são utilizados para identificar grupos de interfaces, sendo que cada interface pode pertencer a mais de um grupo. Os pacotes enviados para esses endereço são entregues a todos as interfaces que compõe o grupo. Seu funcionamento é similar ao do broadcast, dado que um único pacote é enviado a vários hosts, diferenciando-se apenas pelo fato de que no broadcast o pacote é enviado a todos os hosts da rede, sem exceção, enquanto que no multicast apenas um grupo de hosts receberá esse pacote. | O IPV6 não possui endereço broadcast, e sim multicast. Endereços multicast são utilizados para identificar grupos de interfaces, sendo que cada interface pode pertencer a mais de um grupo. Os pacotes enviados para esses endereço são entregues a todos as interfaces que compõe o grupo. Seu funcionamento é similar ao do broadcast, dado que um único pacote é enviado a vários hosts, diferenciando-se apenas pelo fato de que no broadcast o pacote é enviado a todos os hosts da rede, sem exceção, enquanto que no multicast apenas um grupo de hosts receberá esse pacote. | ||
− | |||
− | |||
− | |||
− | |||
= Cabeçalho IPV6 = | = Cabeçalho IPV6 = | ||
Linha 95: | Linha 109: | ||
[[Arquivo:Header_ipv4.png|600px]] | [[Arquivo:Header_ipv4.png|600px]] | ||
− | |||
= Atividade = | = Atividade = | ||
− | + | # Em seu computador, identifique os tipos de endereços IPv6 que estão configurados nas interfaces. | |
− | + | # Compare o endereço do tipo ''link local'' da interface ethernet do seu computador, com o endereço MAC dessa mesma interface. Que relação existe entre eles ? | |
− | + | # Experimente testar a comunicação entre seu computador e algum outro host fora do IFSC. Por exemplo teste um ''ping6'' com um servidor externo ao IFSC o qual possui endereço IPv6. Explique o resultado desse teste, e relacione-o com o tipo de endereço IPv6 usado por seu computador. | |
+ | # Execute o wireshark para capturar datagramas IPv6 na rede. Procure datagramas cujos endereços de destino sejam: | ||
+ | #* ''Unicast global'' | ||
+ | #* ''Link local'' | ||
+ | #* ''Multicast'' | ||
+ | <!-- # Identifique as aplicações que geraram os datagramas identificados no passo anterior. Com isso, pode-se entender como essas aplicações se comunicam. --> | ||
+ | {{collapse bottom}} | ||
+ | {{collapse top| Auto-configuração de endereços}} | ||
* [http://ipv6.br/post/funcionalidades-basicas/ Um resumo sobre ICMPv6 e seu papel na auto-configuração] | * [http://ipv6.br/post/funcionalidades-basicas/ Um resumo sobre ICMPv6 e seu papel na auto-configuração] | ||
Linha 109: | Linha 129: | ||
* '''DHCPv6''': similar ao serviço DHCP para IPv4, um host obtém toda sua configuração de rede (incluindo seu endereço IPv6) de um servidor DHCPv6. Esse servidor mantém informações sobre que host usa qual endereço IPv6. | * '''DHCPv6''': similar ao serviço DHCP para IPv4, um host obtém toda sua configuração de rede (incluindo seu endereço IPv6) de um servidor DHCPv6. Esse servidor mantém informações sobre que host usa qual endereço IPv6. | ||
− | + | = SLAAC = | |
Com SLAAC, um host IPv6 tem a capacidade de auto-configurar seu endereço em uma subrede. Com isso, facilita-se a configuração de rede de um equipamento, pois torna-se desnecessário obter e definir manualmente seu endereço IPv6, além de outras informações tais como máscara de rede, gateway e servidores DNS. No entanto, isso depende de o gateway (ou algum outro equipamento) fornecer essas informações de configuração para os hosts em sua(s) subrede(s). Isso não é novidade, pois em redes IPv4 o serviço DHCP tem exatamente esse papel. Porém, com o surgimento de IPv6, a auto-configuração se tornou uma função do próprio protocolo de rede. Em redes IPv4, DHCP é um serviço que depende de softwares específicos tanto nos hosts (clientes) quanto no servidor. A auto-configuração IPv6 é muito mais simples, e não demanda nenhum software adicional nos hosts. | Com SLAAC, um host IPv6 tem a capacidade de auto-configurar seu endereço em uma subrede. Com isso, facilita-se a configuração de rede de um equipamento, pois torna-se desnecessário obter e definir manualmente seu endereço IPv6, além de outras informações tais como máscara de rede, gateway e servidores DNS. No entanto, isso depende de o gateway (ou algum outro equipamento) fornecer essas informações de configuração para os hosts em sua(s) subrede(s). Isso não é novidade, pois em redes IPv4 o serviço DHCP tem exatamente esse papel. Porém, com o surgimento de IPv6, a auto-configuração se tornou uma função do próprio protocolo de rede. Em redes IPv4, DHCP é um serviço que depende de softwares específicos tanto nos hosts (clientes) quanto no servidor. A auto-configuração IPv6 é muito mais simples, e não demanda nenhum software adicional nos hosts. | ||
Linha 127: | Linha 147: | ||
[[Arquivo:Sufix ipv62.jpg|600px]] | [[Arquivo:Sufix ipv62.jpg|600px]] | ||
− | + | == Protocolo NDP (Neighbor Discovery Protocol) == | |
− | |||
A auto-configuração IPv6 depende do protocolo NDP, implementado usando mensagens ICMPv6. De acordo com [http://ipv6.br/post/funcionalidades-basicas/ este tutorial do site IPv6.br], no caso da autoconfiguração de ''hosts'', o protocolo fornece suporte para a realização de três funcionalidades: | A auto-configuração IPv6 depende do protocolo NDP, implementado usando mensagens ICMPv6. De acordo com [http://ipv6.br/post/funcionalidades-basicas/ este tutorial do site IPv6.br], no caso da autoconfiguração de ''hosts'', o protocolo fornece suporte para a realização de três funcionalidades: | ||
Linha 160: | Linha 179: | ||
[[image:pji11103-Radv.jpg|800px]] | [[image:pji11103-Radv.jpg|800px]] | ||
− | + | = Atividade = | |
+ | # Execute o ''netkit2'' | ||
+ | # Arraste este [http://tele.sj.ifsc.edu.br/~msobral/pji3/lab5/rede0.conf link para o arquivo de configuração ''rede0.conf''] e solte-o sobre a janela do ''netkit2'' | ||
+ | # Use o menu ''File->Graph'' para visualizar a topologia da rede | ||
+ | # Use o menu ''Network->Start'' para iniciar a rede | ||
+ | # Verifique os endereços IPv6 globais usado por ''pc1'' e ''pc2''. Compare-os com os endereços globais usados por ''r1''. | ||
+ | # Teste a comunicação entre ''pc1'' e ''pc2'' com ping6. | ||
+ | # Em ''r1'' crie o arquivo ''/etc/radvd.conf'' com este conteúdo: <syntaxhighlight lang=text> | ||
+ | interface eth1 { | ||
+ | AdvSendAdvert on; | ||
+ | MinRtrAdvInterval 3; | ||
+ | MaxRtrAdvInterval 10; | ||
+ | prefix ccdd:0:0:0:0:0:0:0/64 { | ||
+ | AdvOnLink on; | ||
+ | AdvAutonomous on; | ||
+ | }; | ||
+ | }; | ||
+ | interface eth0 { | ||
+ | AdvSendAdvert on; | ||
+ | MinRtrAdvInterval 3; | ||
+ | MaxRtrAdvInterval 10; | ||
+ | prefix aabb:0:0:0:0:0:0:0/64 { | ||
+ | AdvOnLink on; | ||
+ | AdvAutonomous on; | ||
+ | }; | ||
+ | }; | ||
+ | </syntaxhighlight> | ||
+ | # Em ''r1'' execute este comando: <syntaxhighlight lang=bash> | ||
+ | /etc/init.d/radvd start | ||
+ | </syntaxhighlight> | ||
+ | # Verifique os endereços IPv6 globais usado por ''pc1'' e ''pc2''. Compare-os com os endereços globais usados por ''r1''. | ||
+ | # Teste a comunicação entre ''pc1'' e ''pc2'' com ping6. | ||
+ | # Verifique a tabela de rotas IPv6 em ''pc1'' e ''pc2''. Compare o endereço do roteador default com o do gateway. | ||
+ | # Selecione o host ''pc1'' e, em seguida, o menu ''Wireshark->eth0''. | ||
+ | # Observe as mensagens de anúncio de roteador recebidas. Que informações elas contêm ? | ||
+ | # Agora experimente por [http://tele.sj.ifsc.edu.br/~msobral/pji3/lab5/rede1.conf esta rede] no ar usando SLAAC ! Talvez seja necessário algo mais ... | ||
+ | {{collapse bottom}} | ||
+ | {{collapse top|Descoberta de Vizinhança}} | ||
+ | * [http://mesonpi.cat.cbpf.br/ipv6/textos/sobre_%20ipv6/6.htm Funcionalidades baseadas no protocolo ICMPv6] | ||
− | |||
− | == | + | Obs.: texto copiado literalmente de: [http://ipv6.br/lab/ Laboratório de IPv6]. |
+ | |||
+ | |||
+ | A '''descoberta de vizinhança''' por meio do protocolo ''Neighbor Discovery'' no | ||
+ | IPv6 é um procedimento realizado pelos nós de uma rede para descobrir endereços físicos dos dispositivos vizinhos presentes no mesmo enlace. A função deste protocolo se assemelha à função do ARP e do RARP no IPv4. | ||
+ | *O procedimento é iniciado quando um dispositivo tenta enviar um pacote cujo endereço físico de destino é desconhecido. O nó solicitante envia uma mensagem ''Neighbor Solicitation'' (NS) para todos os nós do enlace pertencentes ao grupo ''multicast solicited-node'' (ff02::1:ffXX:XXXX), de modo que XX:XXXX são os últimos 24 bits do endereço IPv6 em que está interessado. | ||
+ | *É possível notar que, por uma coincidência dos últimos 24 bits, é bastante provável que apenas o nó de destino faça realmente parte deste grupo. Isto é um ''truque'' interessante do IPv6 para diminuir o tráfego deste tipo de pacote na rede. | ||
+ | *Na mensagem NS, o endereço IPv6 a ser resolvido é informado no campo ''Target''. O campo ''Source link-layer address'' informa ao nó de destino o endereço MAC do nó de origem, poupando-o de ter que fazer o mesmo procedimento no sentido inverso. | ||
+ | *O nó de destino, dono do IPv6 requisitado, ao receber este pacote, envia uma mensagem ''Neighbor Advertisement'' (NA) como resposta diretamente ao nó requisitante. O seu endereço físico será informado no campo ''Target link-layer address''. | ||
+ | *A informação de mapeamento entre endereços IP e endereços físicos é armazenada em uma tabela chamada ''neighbor cache''. Nela também fica registrado o ''status'' de cada destino, informando se o mesmo é alcançável ou não. | ||
+ | |||
+ | =Atividades: ETAPA 1 = | ||
+ | |||
+ | A figura abaixo apresenta o diagrama esquemático da rede a ser montada/analisada. Observe que todos os IPv6 ''Global Unicast'' já estão definidos na mesma, são esses IPs que utilizaremos em nosso experimento. | ||
+ | |||
+ | [[Arquivo:Diagrama_rede_IPv6.jpg]] | ||
+ | |||
+ | # Obtenha o arquivo de configuração [http://tele.sj.ifsc.edu.br/~msobral/ier/redes/ns.conf ns.conf] | ||
+ | #Rode o NetKit em seu computador. Em um terminal digite: <syntaxhighlight lang=bash> | ||
+ | netkit2 & </syntaxhighlight> | ||
+ | #No menu '''File''' - '''Load and Run''', procure o arquivo '''/home/aluno/Downloads/ns.conf''' e clique em OK. Abrirá uma janela com 6 abas, onde cada uma delas é um terminal de configuração do respectivo equipamento: '''pc1-4''' ou '''r1-2'''. | ||
+ | #Ao clicar no menu '''File''' - '''Graph''', pode-se ter uma visão da rede a ser simulada e conferir se é equivalente ao diagrama proposto. | ||
+ | #Faça um '''ping6''' entre o '''pc1''' ao '''pc3''': <syntaxhighlight lang=bash> | ||
+ | ping6 -c4 2001:bcc:1f0:1::103 </syntaxhighlight> | ||
+ | #Faça um '''ping6''' entre o '''pc1''' e '''pc2'''. | ||
+ | #No '''pc1''' use o seguinte comando para verificar como ficou a configuração dos endereços da interface de rede. O resultado é similar ao apresentado pelo comando '''ifconfig''': <syntaxhighlight lang=bash> | ||
+ | ip addr show dev eth0 </syntaxhighlight> | ||
+ | #Confira as rotas estabelecidas em todos os ''hosts'' com o comando abaixo. | ||
+ | ##São coerentes com os dados apresentados no diagrama acima?<syntaxhighlight lang=bash> | ||
+ | ip -6 route show </syntaxhighlight> | ||
+ | #No '''pc1''' use os seguintes comandos para ver a rota para alguns vizinhos: <syntaxhighlight lang=bash> | ||
+ | traceroute6 2001:bcc:1f0:1::103 | ||
+ | traceroute6 2001:bcc:1f0:1::104 </syntaxhighlight> | ||
+ | #*Anote as rotas. | ||
+ | #Deixe um '''ping6''' entre o '''pc1''' ao '''pc3''' rodando: <syntaxhighlight lang=bash> | ||
+ | ping6 2001:bcc:1f0:1::103 </syntaxhighlight> | ||
+ | #Para visualizar os pacotes que trafegam por '''r1''', faça o seguinte: | ||
+ | ##Em '''r1''' execute: <syntaxhighlight lang=bash> | ||
+ | tcpdump -i any -w /hostlab/r1.cap | ||
+ | </syntaxhighlight> | ||
+ | ## Na máquina real, execute o '''wireshark'''. Nele clique no menu ''File->Open'', e selecione o arquivo ''r1.cap'', que está na pasta ''lab''. | ||
+ | #Analisando a captura do Wireshark, você verá os pacotes relativos ao ping6 e também pacotes parecidos com: <syntaxhighlight lang=bash> fe80::4cd6:19ff:fedc:2b52 2001:db8:dead:1::1 ICMPv6 86 Neighbor Solicitation for 2001:db8:dead:1::1 from 4e:d6:19:dc:2b:52 | ||
+ | 2001:db8:dead:1::1 fe80::4cd6:19ff:fedc:2b52 ICMPv6 78 Neighbor Advertisement 2001:db8:dead:1::1 (rtr, sol) </syntaxhighlight> | ||
+ | #Explique o processo de descoberta de vizinhança (''Neighbor Discovery'' / ''Neighbor Solicitation'' - '''NS''' e ''Neighbor Advertisement'' - '''NA'''), citando o endereço '''link local''' utilizado. | ||
+ | #*Alguns exemplos de campos visualizáveis para uma mensagem do tipo ''Neighbor Advertisement'': | ||
+ | ##Destination (camada Ethernet) | ||
+ | ##*O endereço MAC do nó requisitante que foi obtido por meio da mensagem NS enviada anteriormente. | ||
+ | ##Source (camada Ethernet) | ||
+ | ##*A origem é o endereço MAC da interface do dispositivo que enviou a resposta. | ||
+ | ##Type (camada Ethernet) | ||
+ | ##*Indica que a mensagem utiliza IPv6. | ||
+ | ##Next header (camada IPv6) | ||
+ | ##*Indica qual é o próximo cabeçalho. Neste caso, o valor 58 (0x3a) refere-se a uma mensagem ICMPv6. | ||
+ | ##Source (camada IPv6) | ||
+ | ##*A origem é o endereço IP da interface diretamente ligada ao enlace em que a requisição foi recebida. | ||
+ | ##Destination (camada IPv6) | ||
+ | ##*Diferentemente da mensagem NS, a mensagem NA possui como destino o endereço IPv6 global do nó requisitante. | ||
+ | ##Type (camada ICMPv6) | ||
+ | ##*Indica que a mensagem é do tipo 136 (Neighbor Advertisement). | ||
+ | ##Flags (camada ICMPv6) | ||
+ | ##*Uma mensagem NA possui três flags: | ||
+ | ###Indica se quem está enviando é um roteador. Neste caso, o valor marcado é 0, pois não é um roteador. | ||
+ | ###Indica se a mensagem é uma resposta a um NS. Neste caso, o valor marcado é 1, pois é uma resposta. | ||
+ | ###Indica se a informação carregada na mensagem é uma atualização de endereço de algum nó da rede. Neste caso, o valor marcado é 1, pois está informando o endereço pela primeira vez. | ||
+ | ##Target Address (camada ICMPv6) | ||
+ | ##*Indica o endereço IP associado às informações das flags. Neste caso, é o próprio endereço da interface do dispositivo em questão. | ||
+ | ##ICMPv6 option (camada ICMPv6) | ||
+ | ##*Indica as opções do pacote ICMPv6: | ||
+ | ###Target link-layer address | ||
+ | ##Type | ||
+ | ##*Indica o tipo de opção. Neste caso, Target link-layer address. | ||
+ | ##Link-layer address | ||
+ | ##*Indica o endereço MAC da interface do dispositivo em questão. | ||
+ | #Em todos os ''hosts'' rode o comando <syntaxhighlight lang=bash> ip -6 neighbor show </syntaxhighlight> | ||
+ | ##Qual é a funcionalidade desse comando? | ||
+ | ##Qual é o significado do conteúdo dessa tabela? | ||
+ | ##A tabela mostrada em cada um dos casos é compatível com o diagrama da rede montado? | ||
+ | ##Por que, por exemplo, na tabela do '''pc3''' não há uma referência explícita ao '''pc1'''? | ||
+ | {{collapse bottom}} | ||
+ | {{collapse top|DHCPv6}} | ||
* [https://tools.ietf.org/html/rfc3315 RFC 3315: DHCPv6] | * [https://tools.ietf.org/html/rfc3315 RFC 3315: DHCPv6] | ||
Linha 199: | Linha 334: | ||
Muitas opções para DHCPv6 podem ser usadas. Maiores detalhes podem ser encontrados na [http://manpages.ubuntu.com/manpages/xenial/man5/dhcp-options.5.html documentação sobre as opções]. | Muitas opções para DHCPv6 podem ser usadas. Maiores detalhes podem ser encontrados na [http://manpages.ubuntu.com/manpages/xenial/man5/dhcp-options.5.html documentação sobre as opções]. | ||
− | === | + | = Atividade = |
+ | |||
+ | # Execute o ''netkit2'' | ||
+ | # Arraste este [http://tele.sj.ifsc.edu.br/~msobral/pji3/lab5/rede0.conf link para o arquivo de configuração ''rede0.conf''] e solte-o sobre a janela do ''netkit2'' | ||
+ | # Use o menu ''File->Graph'' para visualizar a topologia da rede | ||
+ | # Use o menu ''Network->Start'' para iniciar a rede | ||
+ | # Verifique os endereços IPv6 globais usado por ''pc1'' e ''pc2''. Compare-os com os endereços globais usados por ''r1''. | ||
+ | # Teste a comunicação entre ''pc1'' e ''pc2'' com ping6. | ||
+ | # Em ''r1'' crie o arquivo ''/etc/radvd.conf'' com este conteúdo: <syntaxhighlight lang=text> | ||
+ | interface eth1 { | ||
+ | AdvSendAdvert on; | ||
+ | MinRtrAdvInterval 3; | ||
+ | MaxRtrAdvInterval 10; | ||
+ | prefix ccdd:0:0:0:0:0:0:0/64 { | ||
+ | AdvOnLink on; | ||
+ | AdvAutonomous on; | ||
+ | }; | ||
+ | }; | ||
+ | interface eth0 { | ||
+ | AdvSendAdvert on; | ||
+ | MinRtrAdvInterval 3; | ||
+ | MaxRtrAdvInterval 10; | ||
+ | AdvManagedFlag on; | ||
+ | }; | ||
+ | </syntaxhighlight>Mesmo que se use DHCPv6 é necessário usar SLAAC para obter o endereço do gateway. Por isso em ''r1'' se ativou o serviço ''radvd'', porém indicando que o ''host'' deve usar configuração de endereço ''stateful'' (opção ''AdvManagedFlag''). | ||
+ | # Em ''r1'' crie o arquivo ''/etc/dhcp/dhcpd6.conf'' com este conteúdo: <syntaxhighlight lang=text> | ||
+ | default-lease-time 600; | ||
+ | max-lease-time 7200; | ||
+ | |||
+ | subnet6 aabb::/64 { | ||
+ | range6 aabb::10 aabb::a00; | ||
+ | option dhcp6.name-servers aabb::2; | ||
+ | } | ||
+ | |||
+ | subnet6 ccdd::/64 { | ||
+ | range6 ccdd::10 ccdd::a00; | ||
+ | option dhcp6.name-servers aabb::2; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | # Em ''r1'' execute este comando: <syntaxhighlight lang=bash> | ||
+ | /etc/init.d/radvd start | ||
+ | </syntaxhighlight> | ||
+ | # Verifique os endereços IPv6 globais usado por ''pc1'' e ''pc2''. Compare-os com os endereços globais usados por ''r1''. | ||
+ | # Teste a comunicação entre ''pc1'' e ''pc2'' com ping6. | ||
+ | # O host ''pc1'' não obteve seu endereço IPv6, pois ele deve fazê-lo via DHCPv6. Sendo assim, faça o seguinte: | ||
+ | #* Em ''r1'' ative o servidor DHCPv6 com este comando: <syntaxhighlight lang=bash> | ||
+ | touch /var/lib/dhcp/dhcpd6.leases | ||
+ | chown dhcpd.dhcpd /var/lib/dhcp/dhcpd6.leases | ||
+ | dhcpd -6 -cf /etc/dhcp/dhcpd6.conf | ||
+ | </syntaxhighlight> | ||
+ | #* Em ''pc1'' execute o cliente DHCPv6 com este comando: <syntaxhighlight lang=bash> | ||
+ | dhclient -6 eth0 | ||
+ | </syntaxhighlight> | ||
+ | # Verifique o endereços IPv6 global usado por ''pc1''. Compare-o com os endereços globais usados por ''r1''. | ||
+ | # Teste a comunicação entre ''pc1'' e ''pc2'' com ping6. | ||
+ | # Verifique a tabela de rotas IPv6 em ''pc1'' e ''pc2''. Compare o endereço do roteador default com o do gateway. | ||
+ | # Uma reflexão: qual benefício existe em usar DHCPv6, ao invés de somente SLAAC ? | ||
+ | {{collapse bottom}} | ||
+ | {{collapse top|Subredes IPv6}} | ||
+ | |||
+ | = Atividades = | ||
+ | |||
+ | Estes experimentos devem ser realizados no [[Netkit2]], que deve ser executado na máquina real. | ||
− | + | Para realizar estas atividades serão necessários alguns comandos: | |
+ | * '''Teste com ping6 para endereço de escopo local''': deve-se especificar a interface de rede por onde as mensagens do ping6 serão transmitidas: <br><br>'''ping6 -I eth0''' ''endereço_IPv6_a_ser_pingado''<br><br> | ||
+ | * '''Teste com ping6 para endereço de escopo global''': não é prciso especificar a interface de rede por onde as mensagens do ping6 serão transmitidas: <br><br>'''ping6 ''' ''endereço_IPv6_a_ser_pingado''<br><br> | ||
+ | * '''Tabela de rotas''':<br><br>''' route -A inet6'''<br><br> | ||
+ | * '''Configuração de interface de rede:''' usa-se o programa ifconfig desta forma:<br><br>'''ifconfig''' ''nome_interface'' '''inet6 add''' ''endereço_IPv6''<br><br> | ||
+ | * '''Criação de rota:''' uma rota IPv6 pode ser adiciona assim: <br><br>'''route -A inet6 add''' ''prefixo/máscara'' '''gw''' ''IPv6_do_próximo_roteador'' | ||
− | |||
− | + | '''1. Para esquentar: uma rede mais simples:''' | |
+ | # Transfira para seu computador [http://tele.sj.ifsc.edu.br/~msobral/pji3/lab3/rede0.conf o arquivo de configuração ''rede0.conf''] | ||
+ | # Execute o Netkit2, e no menu ''File->Load Only'' selecione o arquivo de configuração ''rede1.conf'' | ||
+ | # Use o menu ''File->Graph'' para visualizar a topologia da rede | ||
+ | # Use o menu ''Network->Start'' para iniciar a rede | ||
+ | # Sabendo que ''pc1'' está na subrede 2804:1454:1004:200::/64 e ''pc2'' está na subrede 3ABB:CCDD:EEFF::/64, faça o seguinte: | ||
+ | ## Configure os endereços IP de todas as interfaces dos ''hosts'' dessa rede | ||
+ | ## Crie rotas estáticas nos ''hosts'' para que ''pc1'' e ''pc2''consigam se comunicar | ||
+ | '''2. Praticamente a mesma rede, mas com um roteador a mais:''' | ||
+ | # Transfira para seu computador [http://tele.sj.ifsc.edu.br/~msobral/pji3/lab3/rede00.conf o arquivo de configuração ''rede00.conf''] | ||
+ | # Execute o Netkit2, e no menu ''File->Load Only'' selecione o arquivo de configuração ''rede1.conf'' | ||
+ | # Use o menu ''File->Graph'' para visualizar a topologia da rede | ||
+ | # Use o menu ''Network->Start'' para iniciar a rede | ||
+ | # Sabendo que ''pc1'' está na subrede 2010:1aba:4455::/64 e ''pc2'' está na subrede 3ABB:EEFF::/64, faça o seguinte: | ||
+ | ## Configure os endereços IP de todas as interfaces dos ''hosts'' dessa rede | ||
+ | ## Crie rotas estáticas nos ''hosts'' para que ''pc1'' e ''pc2'' consigam se comunicar | ||
− | |||
− | + | '''3. Agora uma rede um pouco maior:''' | |
+ | # Transfira para seu computador [http://tele.sj.ifsc.edu.br/~msobral/pji3/lab3/rede1.conf o arquivo de configuração ''rede1.conf''] | ||
+ | # Execute o Netkit2, e no menu ''File->Load Only'' selecione o arquivo de configuração ''rede1.conf'' | ||
+ | # Use o menu ''File->Graph'' para visualizar a topologia da rede | ||
+ | # Use o menu ''Network->Start'' para iniciar a rede | ||
+ | # Sabendo que ''pc1'' está na subrede 2804:1454:1004:200::/64, ''pc2'' está na subrede AABB:CCDD:EEFF::/64 e ''pc3'' está na subrede 1234:5678::/56, faça o seguinte: | ||
+ | ## Configure os endereços IP de todas as interfaces dos ''hosts'' dessa rede | ||
+ | ## Crie rotas estáticas nos ''hosts'' para que ''pc1'', ''pc2'' e ''pc3'' consigam se comunicar | ||
+ | {{collapse bottom}} |
Edição atual tal como às 13h01min de 30 de agosto de 2019
Endereços IPv4 têm 32 bits e são capazes de endereçarem até pouco mais de 4 bilhões de hosts, e isso parecia mais do que suficiente quando o protocolo IP foi criado, nos primórdios da Internet. Mas desde os anos 1990, quando se massificou essa rede, constatou-se que os endereços IPv4 se esgotariam num horizonte próximo. Para evitar esse problema, e possibilitar que a Internet continuasse se expandindo (e também por outros motivos), foi criado o protocolo IPv6, cujos endereços têm 128 bits. Essa questão está bem descrita na introdução do livro Laboratório de IPv6:
Considerando que a concepção da Internet data da década de 70 e que, de lá para cá, houve uma explosão inesperada do seu uso, o IPv4 mostrou-se inadequado para acompanhar esta evolução.Uma das deficiências mais apontadas do IPv4 foi o espaço de endereçamento baseado num valor inteiro de 32 bits, que é tipicamente representado por quatro octetos em decimal, sendo possível disponibilizar apenas 4.294.967.296 endereços IPV4 diferentes. Para contornar essa deficiência, inúmeras soluções paliativas foram propostas e adotadas, como por exemplo o NAT (Network Address Solution) e o CIDR (Classless InterDomain Routing). Contudo, à medida que novas tecnologias de redes surgiram e o IP continuava sendo um dos protocolos chaves para sua operação, outras deficiências começaram a ser detectadas, especialmente aquelas referentes à segurança e ao suporte a parâmetros de QoS (Quality of Service) e mobilidade. Como consequência, no inicio da década de 90 é publicada a proposta da nova geração do IP (IPng – IP next generation) ou IPv6. Este novo protocolo traz a solução para muitas das deficiências de seu predecessor, o IPv4, incluindo espaço de endereçamento de 128 bits gerando a possibilidade de 340.282.366.920.938.463.463.374.607.431.768.211.456 endereços disponíveis, suporte a roteamento e segmentação de pacotes na estação origem, suporte a mobilidade e mecanismos de segurança.
Número de hosts na Internet mundial registrados no DNS (a quantidade total deve ser bem maior !). As quantidades são expressadas em milhões de hosts. Obtido de: Statista
Laboratórios
Endereço IPV6 |
---|
Um endereço IPV6 possui 128 bits disponíveis para endereçar hosts, possibilitando 340 undecilhões de endereços possíveis. Para se ter uma ideia do que isto representa, se convertêssemos cada IPv6 possível em um cm2, poderíamos envolver toda a superfície do planeta Terra com 7 camadas de endereços.. Adoção no BrasilO Brasil está entre os 10 países com maior adoção de IPv6, segundo o Google:
AtividadePara realizar estas atividades serão necessários alguns comandos:
|
Tipos de Endereços IPV6 |
---|
O IPV6 possui categorias de endereços, conforme a tabela a seguir:
Endereços UnicastLink Local pode ser usado apenas no enlace específico onde a interface está conectada, o endereço link local é atribuído automaticamente utilizando o prefixo FE80::/64. Os 64 bits reservados para a identificação da interface são configurados utilizando o formato IEEE EUI-64. Vale ressaltar que os roteadores não devem encaminhar para outros enlaces, pacotes que possuam como origem ou destino um endereço link-local.
Atualmente, está reservada para atribuição de endereços a faixa 2000::/3 (001), ou seja, 3 primeiros bits utilizados para registros da faixa 2000. Equivalente aos endereços públicos IPv4, o endereço global unicast é globalmente roteável e acessível na Internet IPv6. Ele é constituído por três partes: o prefixo de roteamento global, utilizado para identificar o tamanho do bloco atribuído a uma rede; a identificação da sub-rede, utilizada para identificar um enlace em uma rede; e a identificação da interface, que deve identificar de forma única uma interface dentro de um enlace.Sua estrutura foi projetada para utilizar os 64 bits mais a esquerda para identificação da rede e os 64 bits mais a direita para identificação da interface. Endereço MulticastO IPV6 não possui endereço broadcast, e sim multicast. Endereços multicast são utilizados para identificar grupos de interfaces, sendo que cada interface pode pertencer a mais de um grupo. Os pacotes enviados para esses endereço são entregues a todos as interfaces que compõe o grupo. Seu funcionamento é similar ao do broadcast, dado que um único pacote é enviado a vários hosts, diferenciando-se apenas pelo fato de que no broadcast o pacote é enviado a todos os hosts da rede, sem exceção, enquanto que no multicast apenas um grupo de hosts receberá esse pacote. Cabeçalho IPV6O cabeçalho IPv6 possui menos informações, quando comparado ao cabeçalho IPv4. Várias informações foram removidas do cabeçalho IPV6, como por exemplo o checksum, considerado uma informação desnecessária uma vez que o controle de erro é atribuído às camadas inferiores. Os campos presentes no cabeçalho IPV6 são definidos a seguir:
Atividade
|
Auto-configuração de endereços |
---|
SLAACCom SLAAC, um host IPv6 tem a capacidade de auto-configurar seu endereço em uma subrede. Com isso, facilita-se a configuração de rede de um equipamento, pois torna-se desnecessário obter e definir manualmente seu endereço IPv6, além de outras informações tais como máscara de rede, gateway e servidores DNS. No entanto, isso depende de o gateway (ou algum outro equipamento) fornecer essas informações de configuração para os hosts em sua(s) subrede(s). Isso não é novidade, pois em redes IPv4 o serviço DHCP tem exatamente esse papel. Porém, com o surgimento de IPv6, a auto-configuração se tornou uma função do próprio protocolo de rede. Em redes IPv4, DHCP é um serviço que depende de softwares específicos tanto nos hosts (clientes) quanto no servidor. A auto-configuração IPv6 é muito mais simples, e não demanda nenhum software adicional nos hosts. A autoconfiguração do IPV6, chamada stateless, é o procedimento com que os hosts de uma subrede podem definir seus próprios endereços, baseados em informações locais (ex: endereço MAC de sua interfaces de rede Ethernet, Wifi, ou Bluetooth), e em informações recebidas de roteadores, denominadas mensagens Router Advertisement. Sendo assim, o roteador é o responsável por fornecer informações sobre a SUBrede para que seja possível que hosts que nela residem se autoconfigurem. A autoconfiguração do IPV6 é chamada de stateless porque o roteador não mantém nenhum registro sobre a configuração de cada host. Isso é consequência da capacidade dos hosts se autoconfigurarem apenas sabendo a subrede a que pertencem. No entanto, para que seja possível a autoconfiguração em redes baseadas em IPV6, duas etapas de configuração devem ser aplicadas, sendo elas:
Protocolo NDP (Neighbor Discovery Protocol)A auto-configuração IPv6 depende do protocolo NDP, implementado usando mensagens ICMPv6. De acordo com este tutorial do site IPv6.br, no caso da autoconfiguração de hosts, o protocolo fornece suporte para a realização de três funcionalidades:
Atividade
|
Descoberta de Vizinhança |
---|
Atividades: ETAPA 1A figura abaixo apresenta o diagrama esquemático da rede a ser montada/analisada. Observe que todos os IPv6 Global Unicast já estão definidos na mesma, são esses IPs que utilizaremos em nosso experimento.
|
DHCPv6 |
---|
default-lease-time 600;
max-lease-time 7200;
subnet6 2001:db8::/64 {
range6 2001:db8::1234 2001:db8::abcd;
option dhcp6.name-servers 2001:db8::abc;
}
Atividade
|
Subredes IPv6 |
---|
AtividadesEstes experimentos devem ser realizados no Netkit2, que deve ser executado na máquina real.
2. Praticamente a mesma rede, mas com um roteador a mais:
|