sábado, 29 de junho de 2013

VPN Site-to-Site Baseada em IPv6

Olá Pessoal.


Essa 25/06/2013 participei de mais um evento "IPv6 no Café da Manhã" realizado pelos colegas do NIC.br. Nessa edição o formato foi de um mini-tutorial com a equipe do IPv6.br e o tema foi "Endereçamento e Planejamento de Redes IPv6". Foi mais um evento de grande qualidade e me lembro de que naquela oportunidade surgiu uma discussão interessante sobre o estabelecimento de túneis virtuais privativos (VPN) em redes IPv6.

Como não houve tempo hábil para detalharmos aquela discussão, então achei por bem continuar essa sequência de artigos sobre IPv6 que venho escrevendo no blog e que seria conveniente registrar um novo artigo mostrando como seria o processo de configuração de uma VPN site-to-site em redes IPv6.

É comum o estabelecimento de VPNs para a comunicação entre unidades remotas de uma empresa (site-to-site), afinal seu custo é convidativo porque a infraestrutura da Internet pública já existente é aproveitada para viabilizar a criação de uma rede privativa virtual, como se a empresa tivesse um link privativo de longa distância, o que não seria barato. Para exemplificar esse processo vamos considerar o cenário apresentado na figura abaixo (clique na imagem para ampliar). Cabe apenas mencionar que a configuração das políticas de segurança do IPSec em VPNs IPv6 é basicamente a mesma que já era realizada em VPNs IPv4 - a solução em si não mudou!


No cenário existem roteadores de borda representando duas unidades de uma empresa, uma localizada em São Paulo (SP) e outra no Rio de Janeiro (RJ). A unidade de SP está conectada à Internet através do link 2001:DB8:AAAA:: e também está conectada à rede local 2001:DB8:CAFE::1/64, enquanto que a unidade do RJ está conectada à Internet através do link 2001:DB8:BBBB:: e também a sua rede local 2001:DB8:CAFE:2::/64.

Com os comandos abaixo será configurada uma VPN através do túnel FD00:CAFE::A/127 (FD00:CAFE::A e FD00:CAFE::B). Reparem que estamos utilizando endereços /127 no túnel porque se trata de um link ponto-a-ponto, além disso também estamos fazendo uso dos endereços privados unique-local (ULA), afinal se trata de um link privativo entre as unidades e que existe “camuflado” por trás dos links com a Internet pública.

> Configuração do Roteador de São Paulo:

01. SP(config)# ipv6 unicast-routing
02. SP(config)# ipv6 route ::/0 2001:db8:aaaa::f
03. SP(config)# interface f0/0
04. SP(config)# description Link-ISP
05. SP(config-if)# ipv6 enable
06. SP(config-if)# ipv6 address 2001:db8:aaaa::1/64
07. SP(config-if)# no shutdown
08. SP(config-if)# exit
09. SP(config-if)# interface f1/0
10. SP(config-if)# description LAN-CAFE-1
11. SP(config-if)# ipv6 enable
12. SP(config-if)# ipv6 address 2001:Db8:cafe:1::1/64
13. SP(config-if)# no shutdown
14. SP(config-if)# exit
15. SP(config)# crypto isakmp key 0 SENHA address ipv6 ::/0
16. SP(config)# crypto isakmp policy 1
17. SP(config-isakmp)# encryption aes 128
18. SP(config-isakmp)# authentication pre-share
19. SP(config-isakmp)# exit
20. SP(config)# crypto ipsec transform-set VPNv6 esp-aes 128 esp-sha-hmac
21. SP(cfg-crypto-trans)# mode tunnel
22. SP(cfg-crypto-trans)# exit
23. SP(config)# crypto ipsec profile VPNv6
24. SP(ipsec-profile)# set transform-set VPNv6
25. SP(ipsec-profile)# exit
26. SP(config)# interface tunnel 0
27. SP(config-if)# description VPN-to-RJ
28. SP(config-if)# ipv6 enable
29. SP(config-if)# ipv6 address fd00:cafe::a/127
30. SP(config-if)# tunnel source f0/0
31. SP(config-if)# tunnel destination 2001:db8:bbbb::1
32. SP(config-if)# tunnel mode ipsec ipv6
33. SP(config-if)# tunnel protection ipsec profile VPNv6

34. SP(config-if)# exit
35. SP(config)# ipv6 route 2001:db8:cafe:2::/64 tunnel 0
 

Os comandos das linhas de 01 até 13 representam apenas as configurações básicas para assegurar conectividade entre as unidades através da Internet, nada que mereça destaque no contexto da configuração de uma VPN IPv6. Nas linhas de 14 a 24 são definidas as políticas de segurança onde informamos a chave compartilhada (SENHA) que será utilizada nas pontas, escolhemos o algoritmo de criptografia (AES de 128 bits), etc. 

 Nas linhas de 25 a 33 é criada uma interface lógica do tipo túnel que representa a VPN propriamente dita, sendo que nessa interface temos que vincular nossa rede privativa com a Internet pública (endereços de origem e destino). Por fim, na linha 34 é criada uma rota estática apontando para rede local da unidade remota através do túnel virtual recém criado. As configurações do roteador localizado no RJ são exatamente a mesmas, mudando apenas os endereços.

> Configuração do Roteador do Rio de Janeiro:

RJ(config)# ipv6 unicast-routing
RJ (config)# ipv6 route ::/0 2001:db8:bbbb::f
RJ(config)# interface f0/0
RJ(config)# description Link-ISP
RJ(config-if)# ipv6 enable
RJ(config-if)# ipv6 address 2001:db8:bbbb::1/64
RJ(config-if)# no shutdown
RJ(config-if)# exit
RJ(config-if)# interface f1/0
RJ(config-if)# description LAN-CAFE-2
RJ(config-if)# ipv6 enable
RJ(config-if)# ipv6 address 2001:db8:cafe:2::1/64
RJ(config-if)# no shutdown
RJ(config-if)# exit
RJ(config)# crypto isakmp key 0 SENHA address ipv6 ::/0
RJ(config)# crypto isakmp policy 1
RJ(config-isakmp)# encryption aes 128
RJ(config-isakmp)# authentication pre-share
RJ(config-isakmp)# exit
RJ(config)# crypto ipsec transform-set VPNv6 esp-aes 128 esp-sha-hmac
RJ(cfg-crypto-trans)# mode tunnel
RJ(cfg-crypto-trans)# exit
RJ(config)# crypto ipsec profile VPNv6
RJ(ipsec-profile)# set transform-set VPNv6
RJ(ipsec-profile)# exit
RJ(config)# interface tunnel 0
RJ(config-if)# description VPN-to-SP
RJ(config-if)# ipv6 enable
RJ(config-if)# ipv6 address fd00:cafe::b/127
RJ(config-if)# tunnel source f0/0
RJ(config-if)# tunnel destination 2001:db8:aaaa::1
RJ(config-if)# tunnel mode ipsec ipv6
RJ(config-if)# tunnel protection ipsec profile VPNv6

RJ(config-if)# exit
RJ(config)# ipv6 route 2001:db8:cafe:1::/64 tunnel 0

Acredito que esse é um caso em que a prática ajuda no entendimento dos conceitos por trás do processo de estabelecimento do túnel em redes baseadas no IPv6. Na opotunidade do evento eu e o colega Antonio Moreiras (do NIC.br) nos esforçamos para tentar explicar esse conceito em tempo mínimo (o assunto não era foco do evento), mas tenho certeza que não ficou claro para todos que estavam presentes ou acompanhando via Internet. Por isso espero que esse artigo possa ajudá-los...

Abraço.

Samuel.

domingo, 23 de junho de 2013

Listas de Controle de Acesso em Redes IPv6

Olá Pessoal.

Uma das tarefas que mais preocupa na transição de uma rede IPv4 para IPv6 ou mesmo na adição do IPv6 em modo pilha-dupla para ganhar experiência com o novo protocolo consiste no processo de escrita das regras de controle de acesso (firewall) que já estão implementadas no IPv4 e agora precisam ser reescritas no contexto do IPv6.

O objetivo desse artigo é mostrar que o processo de escrita dessas regras de controle de acesso em redes baseadas no IPv6 não é tão diferente daquilo que já se fazia, até mesmo porque, via de regra, a sintaxe se mantém basicamente a mesma na maioria das soluções. 

Talvez o maior obstáculo sejam as novas funcionalidades do IPv6 e seu modus operandi, afinal agora existem algumas diferenças relevantes. Por exemplo, em IPv6 o ICMPv6 não pode mais ser sumariamente bloqueado como se fazia com o ICMP no IPv4, uma vez que o ICMPv6 é responsável por várias funcionalidades importantes para assegurar a operação de uma rede IPv6. Por isso o profissional de segurança deve estudar os detalhes de operação do novo protocolo para saber exatamente quais funcionalidades ele deseja bloquear a quais ele não pode!!! O objetivo desse artigo não é detalhar essas questões, mas fiquem tranquilos que vocês poderão aprender esses detalhes no meu novo livro sobre IPv6 que será lançado em breve...

Voltando ao foco desse artigo, vamos considerar o cenário da figura abaixo em que existem três departamentos, cada um vinculado a uma sub-rede, conectados entre si através do dispositivo denominado Roteador-Firewall. Nesse dispositivo iremos configurar uma simples lista de controle de acesso (ACL) para impedir que as máquinas na sub-rede do departamento de marketing tenham acesso à intranet (serviço www) no Server-B (2001:db8:cafe:3::12).



Nesse caso, para bloquear um serviço (web) ou mesmo todo o tráfego (ipv6) de uma rede para outra ou para uma máquina específica o processo de escrita da ACL é exatamente igual àquilo que seria feito em redes IPv4, mudando apenas os endereços para IPv6. A única mudança mais significativa está na sintaxe de aplicação da ACL na interface, conforme pode ser observado abaixo:

Roteador-Firewall(config)# ipv6 access-list FIREWALL
Roteador-Firewall(config-acl-ipv6)# deny tcp 2001:db8:cafe:1::/64 
                                    host 2001:db8:cafe:3::12 eq www
Roteador-Firewall(config-acl-ipv6)# permit ipv6 any any
Roteador-Firewall(config-acl-ipv6)# exit
Roteador-Firewall(config)# int g0/0
Roteador-Firewall(config-if)# ipv6 traffic-filter FIREWALL in

Criamos uma ACL denominada FIREWALL que bloqueia o acesso das máquinas da rede do departamento de marketing (2001:db8:cafe:1::/64) ao Server-B (2001:db8:cafe:3::12). Observem que somente o serviço web está sendo bloqueado (eq www), ou seja, todos os demais acessos são permitidos nesse exemplo! Esse é apenas um exemplo de como escrever as regras de firewall e não deve ser utilizado em ambientes de produção porque também é muito permissivo. O leitor pode (e deve) utilizar esse mesmo cenário para explorar o processo de escrita de novas ACLs.

Abraço.

Samuel.

segunda-feira, 17 de junho de 2013

Túnel Manual 6over4 (6in4) no Simulador Packet Tracer

Olá Pessoal.

No Laboratório 17 do livro "Laboratórios de Tecnologias Cisco" eu explico ao leitor como configurar um túnel manual 6over4 (6in4), um cenário que será comum na fase de transição do IPv4 para IPv6, principalmente para ambientes com redes IPv6 que somente tenham trânsito para a Internet via IPv4. 

Naquela oportunidade do livro foi utilizado o emulador GNS3 para tornar possível a configuração desse cenário, afinal até então o simulador Packet Tracer da Cisco não tinha suporte a esse recurso. Acontece que esse recurso passou a ser suportado a partir do Packet Tracer 6.0.0 (Beta) e continua funcional no PT 6.0.1.

Estive fazendo os testes para realmente garantir que esse recurso está funcional e por isso vou compartilhar o cenário e o processo de configuração para aqueles que queiram fazer o experimento em casa e não têm muita afinidade com o GNS3. O cenário que utilizei é ilustrado na figura abaixo, basicamente uma reprodução daquilo que já havia no livro com apenas algumas mudanças nos endereços.


As configurações dos roteadores de SP e RJ são basicamente idênticas, com mudanças apenas nos seus endereços. Reparem que nas linhas de 01 até 08 estamos fazendo apenas as configurações básicas das interfaces e, somente então, vamos efetivamente criar o túnel com encapsulamento 6in4 para que o tráfego IPv6 das duas unidades possa trafegar via Internet IPv4. Nas linhas de 09 a 14 criamos o túnel manual utilizando encapsulamento 6in4 (ipv6ip), na linha 15 ativamos o roteamento IPv6 e na linha 16 criamos uma rota estática apontando todo tráfego direcionado à rede da unidade remota através do túnel.

01. Roteador-SP(config)# int serial 0/0/0
02. Roteador-SP(config-if)# clock 500000 
03. Roteador-SP(config-if)# ip address 203.0.113.1 255.255.255.252
04. Roteador-SP(config-if)# no shut
05. Roteador-SP(config-if)# interface g0/0
06. Roteador-SP(config-if)# ipv6 enable
07. Roteador-SP(config-if)# ipv6 address 2001:db8:cafe:1::1/64
08. Roteador-SP(config-if)# no shut
09. Roteador-SP(config-if)# int tunnel 0
10. Roteador-SP(config-if)# ipv6 address fd00:cafe::0/127
11. Roteador-SP(config-if)# tunnel source s0/0/0
12. Roteador-SP(config-if)# tunnel destination 203.0.113.2
13. Roteador-SP(config-if)# tunnel mode ipv6ip
14. Roteador-SP(config-if)# exit
15. Roteador-SP(config)# ipv6 unicast-routing
16. Roteador-SP(config)# ipv6 route 2001:db8:cafe:2::/64 fd00:cafe::1


Roteador-RJ(config)# int serial 0/0/0
Roteador-RJ(config-if)# ip address 203.0.113.2 255.255.255.252
Roteador-RJ(config-if)# no shut
Roteador-RJ(config-if)# interface g0/0
Roteador-RJ(config-if)# ipv6 enable
Roteador-RJ(config-if)# ipv6 address 2001:db8:cafe:2::1/64
Roteador-RJ(config-if)# no shut
Roteador-RJ(config-if)# int tunnel 0
Roteador-RJ(config-if)# ipv6 address fd00:cafe::1/127
Roteador-RJ(config-if)# tunnel source s0/0/0
Roteador-RJ(config-if)# tunnel destination 203.0.113.1
Roteador-RJ(config-if)# tunnel mode ipv6ip
Roteador-RJ(config-if)# exit
Roteador-RJ(config)# ipv6 unicast-routing
Roteador-RJ(config)# ipv6 route 2001:db8:cafe:1::/64 fd00:cafe::0

Depois de configurado o cenário, observem na figura abaixo (clique na imagem para ampliar) que o simulador nos mostra que os pacotes IPv6 gerados nas redes das unidades é reencapsulado em um novo pacote IPv4 (encapsulamento 6in4) que recebe o código PROTO 41 (0x29 em Hexadecimal). Ou seja, tudo funcionando!


Vocês devem ter observado que recentemente tenho escrito vários artigos relacionados a IPv6, isso porque em breve será lançado um novo livro meu especificamente sobre IPv6 e essa é uma maneira para vocês se "aquecerem" até que o livro seja publicado - o que deve ocorrer já nos próximos meses!

O livro foi escrito com uma abordagem bastante didática e está repleto de ilustrações para facilitar o entendimento dos conceitos, além de trazer vários exemplos de configuração. Será mais uma publicação da Editora Novatec, grande parceira que trabalhou comigo na publicação do livro "Laboratórios de Tecnologias Cisco". Além disso, o livro é baseado no programa educacional mundial do IPv6 Forum, sendo que o prefácio foi escrito pelo próprio fundador/presidente do fórum internacional!!! 

Tenho certeza que vocês vão gostar! ;-)
Abraço.

Samuel.

quarta-feira, 12 de junho de 2013

Alocação de Endereços IPv6

Olá Pessoal.

Em post anterior intitulado Governança da Internet no Mundo foi explicado que os recursos da Internet (nomes de domínio, ASN, IPv4 e IPv6) estão sob gestão e coordenação central da autoridade mundial da Internet (IANA). No contexto específico do IPv6, a IANA distribuiu um prefixo /12 para cada uma das cinco autoridades regionais (RIRs) administrarem.

Um único prefixo /12 representa um espaço enorme de endereços e a figura abaixo relaciona os prefixos que estão sob gestão de cada RIR, onde podemos observar que o LACNIC (autoridade da América Latina e Caribe) possui o prefixo 2800:: /12

Fonte: NRO (Number Resources Organization), setembro de 2012.

Essa figura foi extraída do último relatório oficial publicado pela NRO acerca da utilização dos recursos da Internet no mundo. A NRO é uma organização composta por todas as cinco autoridades regionais da Internet. Essa figura é muito interessante porque mostra que a IANA reservou 506 prefixos /12 para atribuição mundial, no entanto apenas 5 desses prefixos foram oficialmente distribuídos, o que quer dizer que os estoques da IANA estão carregados. Reparem, ainda, que os prefixos distribuídos representam apenas uma parte muito pequena do total de endereços disponíveis.

O planejamento para alocação dos prefixos IPv6 é responsabilidade de cada autoridade da Internet e é importante ficar claro que cada autoridade tem suas próprias estratégias e recomendações na sua região de atuação. No contexto do Brasil, o NIC.br (autoridade nacional da Internet) recebeu do LACNIC um prefixo /16 (2801:: /16) para coordenar e distribuir no cenário nacional. O NIC.br, através do grupo de trabalho IPv6.br, recomenda que as operadoras de telecomunicações recebam um prefixo /32 (e grandes instituições), as empresas recebam um prefixo /48 e os usuários residenciais recebam um prefixo /56. Pode ser atribuído um prefixo /64 para usuários de tecnologias móveis que normalmente não têm necessidade de mais de uma rede, mas a recomendação é que a operadora faça a reserva de um prefixo /56 para esse usuário.

É importante ter em mente que, segundo recomendações da RFC 4291, prefixos IPv6 jamais devem ultrapassar a fronteira /64 para assegurar o funcionamento correto do mecanismo de autoconfiguração utilizado na identificação dos hosts. Os detalhes desse processo de autoconfiguração foram explicados no artigo de 26/05/2012 intitulado Autoconfiguração de Endereços IPv6 (SLAAC). Os links ponto-a-ponto são exceções a essa regra porque a RFC 6164 permite o uso de prefixos /127, uma prática que vocês podem observar no Laboratório 05 do livro "Laboratórios de Tecnologias Cisco".

Portanto, segundo essa recomendação de jamais ultrapassar a fronteira dos primeiros 64 bits para identificar a rede (prefixo /64), uma empresa que receber um prefixo /48 poderá criar 65.356 sub-redes, afinal sobram 16 bits entre as posições 48 e 64, o que implica em 2^16 (65.536) combinações possíveis de novas sub-redes. Já os usuários residenciais poderão criar 256 sub-redes, afinal com o prefixo /56 sobram 8 bits sem ultrapassar a barreira /64 (2^8=256). 

Outro detalhe é que um único prefixo /32 que será atribuído às operadoras é enorme e permite a criação de um plano de endereçamento com mais de 4 bilhões de sub-redes /64. Cada sub-rede /64, por sua vez, possui muitos, muitos, muitos mais endereços do que o total de endereços IPv4. Esses números reforçam aquilo que estamos falando de números astronômicos, além da nossa imaginação! A figura abaixo traz ilustra o processo de atribuição de um prefixo /48 a uma empresa por uma operadora que possui um prefixo /32. Reparem que os prefixos maiores sempre têm os mesmos bits iniciais do prefixo principal a partir do qual ele foi gerado.


Uma discussão “calorosa” acerca do novo protocolo que ainda não traz consenso e que divide opiniões entre os especialistas da área diz respeito ao reflexo do IPv6 no tamanho das tabelas de roteamento dos roteadores no núcleo operacional da Internet.

Quando o IPv6 foi concebido, uma das propostas era que haveria uma política efetivamente organizada de distribuição de endereços para que não ocorresse a mesma experiência caótica de distribuição vivida anteriormente com o IPv4. Através de uma distribuição organizada dos prefixos IPv6 existe a possibilidade real de diminuição das tabelas de roteamento, afinal os roteadores terão menos rotas em virtude do processo de agregação. A figura abaixo traz um exemplo desse contexto em que pode ser observado que uma única rota pode apontar para toda uma grande região geográfica.


No entanto, a figura é demasiadamente otimista e existe uma vertente de especialistas que defende exatamente a ideia oposta, ou seja, de que junto com grande expansão na quantidade de redes e endereços, também haverá um crescimento proporcional nas tabelas de roteamento dos roteadores, já que eles terão que conhecer mais rotas porque haverá mais anúncios de prefixos na Internet. Eu compartilho dessa opinião, até mesmo porque muitas vezes as empresas não têm um plano de sumarização das suas rotas e por isso acabam tendo que anunciar rotas "fragmentadas"... Por outro lado o IPv6 é um protocolo novo operacionalmente e por isso junto com sua adoção surge a oportunidade das empresas repensarem o planejamento dos seus endereços de forma organizada!

O que realmente irá acontecer nos próximos ainda é nebuloso e vai depender da dinâmica de mercado e do grau de crescimento da adoção do IPv6. Esse é um dos motivos de considerarmos o IPv6 um protocolo recente, mesmo ele já sendo padronizado desde o final da década de 90! Diferente do IPv4 que já é uma tecnologia madura, o IPv6 trará com sua adoção novas particularidades até então não conhecidas.

Abraço.

Samuel.

quinta-feira, 6 de junho de 2013

IPv6 nas Universidades

Olá Pessoal.

Em 28 de maio estive no NIC.br (Núcleo de Informação e Coordenação do Ponto BR) para participar do evento "IPv6 no Café da Manhã". Por isso estou compartilhando o vídeo aqui no blog para aqueles que me pediram a gravação. O evento foi um sucesso e acredito que a contribuição foi importante para o cenário nacional!


Obs.: Para quem ainda não conhece, é importante destacar que o NIC.br é a autoridade local de abrangência nacional na hierarquia da governança da Internet, que desde dezembro de 2005 implementa as decisões e projetos do Comitê Gestor da Internet no Brasil (CGI.br).

Abraço.

Samuel.