IPv6 (Parte 2: Mecanismos de Transição) Edgard Jamhour 2008, Edgard Jamhour Problemas de Transição • Como evitar reescrever aplicações? • Como permitir um cliente IPv4 conectar-se com um servidor IPv6? • Como permitir um cliente IPv6 conectar-se com um servidor IPv4? • Como permitir um cliente IPv6 alcançar um roteador IPv6 através de uma rede IPv4? • Como permitir a um host IPv6 se conectar a outro host IPv6 através da Internet? 2008, Edgard Jamhour Por que as aplicações precisam ser reescritas? • No sistema operacional, a aplicação escolhe a pilha de protocolos quando abre um socket. • O socket IPv6 é definido pela RFC 2133 (April 1997). – Basic Socket Interface Extensions for IPv6 Aplicação socketIPv6 socketIPv4 Porta Porta TCP IPv4 IPv6 2008, Edgard Jamhour Core Functions • Criação do Socket: • Socket TCP (IPv4): – s = socket(PF_INET, SOCK_STREAM, 0); • Socket UDP (IPv4): – s = socket(PF_INET, SOCK_DGRAM, 0); • Socket TCP (IPv6) – s = socket(PF_INET6, SOCK_STREAM, 0); • Socket UDP (IPv6) – s = socket(PF_INET6, SOCK_DGRAM, 0); 2008, Edgard Jamhour Estrutura de Endereços IPv6 • Ao abrir um socket IPv6 , o “endpoint” é especificado pela seguinte estrutura: • struct sockaddr_in6 { u_char sin6_len; /* Tamanho da estrutura */ u_char sin6_family; /* AF_INET6 */ u_int16m_t sin6_port; /* Porta TCP ou UDP */ u_int32m_t sin6_flowinfo; /* Flow Label + prioridade */ struct in6_addr sin6_addr; /* Endereço IPv6 */ }; • struct in6_addr { u_int8_t s6_addr[16]; /* Endereço IPv6 */ } 2008, Edgard Jamhour Tradução de Nomes em Endereços • API´s para tradução de nomes: – gethostbyname() • Retorna o endereço do host • O comportamento da função gethostbyname() pode ser modificado pela variável de ambiente: – RES_OPTIONS=inet6 • Esta função retorna endereços IPv4 mapeados para aplicações IPv6: – ::FFFF: <IPv4 address> 2008, Edgard Jamhour Dual Stack • A forma mais simples de integração entre IPv4 e IPv6 é utilizar S.O. dual stack. Dual Stack Host Aplicação Aplicação Aplicação Aplicação TCP TCP TCP TCP IPv4 IPv4 IPv6 IPv6 Enlace Enlace Enlace 2008, Edgard Jamhour BIS – Bump in the Stack • Mecanismo interno no host que traduz cabeçalhos IPv4 em IPv6 e vice-versa (RFC 2767). IPv4 Application gethostbyname TCP Name Resolver IPv4 Address Mapper Translator IPv6 Placa de Rede HOST REDE IPv6 2008, Edgard Jamhour Exemplo 1: Cliente IPv4 e Servidor IPv6 DNS 3FFE:1:2:3:4 www6.pucpr.br Aplicação IPv6 Aplicação IPv4 Dual Stack Single Stack 192.168.0.1 3FFE::A:B:C:D Rede IPv6 3FFE::1:2:3:4 2008, Edgard Jamhour Exemplo: Cliente IPv4 e Servidor IPv6 Aplicação IPv4 1. www6.pucpr.br? 7. 10.0.0.1 3. 3FFE::12:34 Name Resolver DNS 6. 10.0.0.1 4. 3FFE::12:34 Endereços Falsos 10.0.0.0 ... 10.0.0.255 2. www6.pucpr.br 5. Mapping Table Address Mapper 3FFE::12:34 = 10.0.0.1 2008, Edgard Jamhour Exemplo: Cliente IPv4 e Servidor IPv6 IPv4 Application 192.168.0.1 Translator 3FFE::A:B:C:D 10.0.0.1 payload 3FFE::12:34 3FFE:12:34 Address Mapper payload Mapping Table IPv6 3FFE::12:34 = 10.0.0.1 2008, Edgard Jamhour Exemplo 2: Cliente IPv6 e Servidor IPv4 3FFE::12:34 www4.pucpr.br DNS Aplicação IPv4 Aplicação IPv6 Single Stack Dual Stack 3FFE:AB:CD 192.168.0.1 3FFE::12:34 Rede IPv6 2008, Edgard Jamhour Exemplo: Cliente IPv6 e Servidor IPv4 IPv4 Application 10.0.0.1 Translator 3FFE::AB:CD IPv6 192.168.01 payload 10.0.0.1 3FFE:12:34 Address Mapper payload Mapping Table 3FFE::AB:CD = 10.0.0.1 2008, Edgard Jamhour BIA - Bump-In-The-API • Similar ao BIS mas traduz API em vez de cabeçalhos IP. IPv4 Application Interface Sockets Function Mapper TCP gethostbyname Name Resolver TCP Address Mapper IPv4 IPv6 Placa de Rede REDE IPv6 2008, Edgard Jamhour BIA Aplicação IPv4 IPv4 API: sends payload to 10.0.0.1 Function Mapper 3FFE::A:B:C:D IPv6 3FFE::1:2:3:4 3FFE:1:2:3:4 Address Mapper payload Mapping Table 3FFE::1:2:3:4 = 10.0.0.1 2008, Edgard Jamhour NAT-PT e NAPT-PT • NAT-PT: – Network Address Translation - Protocol Translation – Similar ao NAT • NAPT-PT – Network Address and Port Translation - Protocol Translation – Similar ao NAPT • NAT-PT é também baseado nos seguintes padrões: – DNS-ALG: DNS Application Level Gateway (DNS Extension) – SIIT: Stateless IP/ICMP Translation Algorithm (SIIT) 2008, Edgard Jamhour NAT-PT • Similar ao NAT convencional. Trabalha através do mapeamento entre endereços IPv4 e IPv6. Endereço de destino mapeado: ::FFFF: <IPv4 address> Aplicação IPv6 Endereço de origem é o endereço do NAT IPv4 IPv6 IPv6 Host Aplicação IPv4 IPv4 Host NAT-PT IPv6 IPv4 Rede IPv4 Rede IPv6 DNS_ALG 2008, Edgard Jamhour NAT-PT 3ffe::12:34 ::ffff:<200.1.2.3> payload ::ffff:<200.1.2.3> 3ffe::12:34 payload 210.0.0.1 200.1.2.3 payload 200.1.2.3 210.0.0.1 payload 3FFE::12:34 200.1.2.3 3ffe::12:34 = 210.0.0.1 IPv6 Network IPv4 Network 210.0.0.1 to 210.0.0.10 2008, Edgard Jamhour Bi-directional NAT-PT • O NAT-PT bidirecional é implementado utilizando-se um DNS-ALG (definido pela RFC 2694). Aplicação IPv6 3. Mapeamento IPv4IPv6. 7. IPv6 6. IPv4 IPv4 Host IPv6 Host IPv4 2. Trigger 4. Endereço IPv4 mapeado Aplicação IPv4 DNS ALG 1. DNS query 5. Endereço IPv4 mapeado 2008, Edgard Jamhour NAPT-PT • Similar ao NAPT, necessita de apenas um endereço IPv4 público, mas não é bidirecional. Pacote IPv6 Pacote IPv4 Mapeamento IPv6:PortaH - IPv4:PortaN Aplicação IPv6 Aplicação IPv4 PortaN PortaH IPv6 IPv6 Host IPv4 IPv6 NAT-PT IPv4 IPv4 Host 2008, Edgard Jamhour NAPT-PT • Um endereço IPv4 permite atender até 63K IPv6 hosts. IPv6a IPv6a:1030 IPv4:1030 IPv6a:1030 IPv4:1030 IPv6b:1030 IPv4:1040 IPv4 IPv6c:1050 IPv4:1050 IPv6b:1030 IPv4:1040 IPv6b:1050 IPv4:1050 IPv6b 2008, Edgard Jamhour NAPT-PT não é Bidirecional clientes request 1024 Private IP:Port Public IP:Port 3FFE::a :1024 3FFE::b :1024 3FFE::c :1025 200.0.0.1 :1025 200.0.0.1 :1026 200.0.0.1 :1027 reply 3FFE::a 1025 1024 1026 IPv4 3FFE::b 1025 1027 Endereço IP Público 200.0.0.1 IPv4 servidor 3FFE::c 2008, Edgard Jamhour Proxy SOCKS64 • Definido pela RFC 3089 (april 2001) • SOCKS64 é similar ao SOCKS. Redes que já utilizam SOCKS podem ser facilmente adaptadas para IPv6. single stack IPv4 host single stack IPv6 host IPv4 Application IPv6 Application SOCKS LIB IPv4+6 SOCKS LIB IPv6+4 TCP UDP IPv4 TCP UDP IPv6 2008, Edgard Jamhour Socks64: Cenário 1 • Cliente IPv4 e Servidor IPv6. IPv4 Packet IPv6 Packet Aplicação IPv4 Socket IPv4 Socks LIB Socket IPv6 PORT PORT PORT PORT IPv6 IPv4 IPv4 Host Aplicação IPv6 Socks64 IPv6 Host 2008, Edgard Jamhour Socks64: Cenário 2 • Um cliente IPv6 envia um pacote para um servidor IPv4. IPv4 Packet Aplicação IPv4 IPv6 Packet Socks64 Socket IPv4 Socket IPv6 PORT Socks LIB PORT PORT PORT IPv4 IPv4 Host Aplicação IPv6 IPv6 IPv6 Host 2008, Edgard Jamhour Técnicas de Tunelamento • Permite que hosts ou redes IPv6 isoladas se comunique pela Internet. • Pacotes IPv6 são encapsulados como dados de pacotes IPv4. Tunnel Endpoints SRC IPv4 DST IPv4 SRC IPv6 TIPO DST IPv6 payload payload 2008, Edgard Jamhour ISATAP • ISATAP é um mecanismo para atribuição automática de endereço e configuração automática de túneis que permite que hosts IPv6 se comuniquem através da Internet. 192.168.1.2 10.32.1.2 IPv6 IPv4 FE80::5EFE:192.168.1.2 FE80::5EFE:10.32.1.2 2008, Edgard Jamhour Tunelamento 6to4 Allocation Fraction of Prefix (binary) Address Space Reserved 0000 0000 1/256 Unassigned … … NSAP Allocation 0000 001 1/128 IPXAllocation 0000 010 1/128 Unassigned … … Aggregatable Global Unicast Addresses Unassigned 001 1/8 … … Link-Local Unicast Addresses . Site-Local Unicast Addresses 1111 1110 10 1/1024 1111 1110 11 1111 1111 1/1024 Multicast Addresses 1/256 AGGR (1/8) 6to4 scheme 1/65535 2008, Edgard Jamhour Endereços 6to4 • Classe de endereços especiais definidas para o tunelamento 6to4 (RFC 2529) – 2002::/16 3 13 32 001 0 0000 0000 0010 2002: V4ADDR 16 SLA ID 64 Interface ID Site Address 80 bits Interface externa do roteador que se conecta com a Internet. 2008, Edgard Jamhour Example IPv6 packet payload 2002:C811:6201… IPv4 header 2002:C8C0:7801… C8.11.62.1 IPv4 header C8.C0.78.1 IPv6 packet C8.11.62.1 C8.C0.78.1 2002:C811:6201… V4ADDR C8.C0.78.1 (200.192.116.1) 2002:C8C0:7801… V4ADDR C8.11.62.1 (200.17.98.1) IPv6 host IPv6 host IP6to4 router IPv6 Network 2002:C8C0:7801::/48 payload IP6to4 router Internet (IPv4 Network) IPv6 Network 2002:C811:6201::/48 2008, Edgard Jamhour Roteadores 6to4 Relay • Roteadores Relay são utilizados para permitir a comunicação entre Hosts 6to4 através de backbones puramente IPv6. Os roteadores Relay são vistos como o verdadeiro “gateway default” para acessar redes puramente IPv6. • Muitas instituições que participam dos projetos de backbones IPv6, como Microsoft e Cisco, oferecem roteadores relay. 2008, Edgard Jamhour O endereço Anycast mágico • A RFC 3068 definiu que o prefixo 192.88.99.0/24 é utilizado para anunciar o roteador relay mais próximo de uma rede utilizando BGP. • O endereço IPv6 equivalente é 2002:c058:6301::". roteadores relay Rede Privada BACKBONE IPv6 BACKBONE IPv4 Rede Privada roteador 6to4 tunel 2008, Edgard Jamhour Exemplo • A tabela abaixo ilustra as rotas criadas automaticamente pelo Windows XP para acessar redes IPv6. • ::/0 -> 3/2002:c058:6301::1741 pref 1331 • ::/0 -> 3/2002:836b:213c::836b:213c pref 2147483647 (rota tornada obsoleta) • ::/96 -> 2 pref 1000 • 2002::/16 -> 3 pref 1000 2008, Edgard Jamhour 6over4 Tunneling (Virtual Ethernet) • Permite que hosts IPv6 isolados se comunique com roteadores IPv6 através de uma rede IPv4. – RFC 2529: Transmission of IPv6 over IPv4 Domains without Explicit Tunnels IPv6 Application IPv6 Application 6over 4 Route r Multicast IPv6 IPv4 IPv4 Net IPv6 Host IPv6 IPv6 Net Host IPv6 2008, Edgard Jamhour Formato dos Pacotes • Pacotes IPv6 são encapsulados no interior de pacotes IPv4 utilizando o tipo de protocolo 41. • Pelo menos um roteador da rede deve suportar o serviço IPv6over4. SRC IPv4 DST IPv4 SRC IPv6 41 DST IPv6 payload payload 2008, Edgard Jamhour Mapeamento de Endereços Multicast • Os serviços IPv6 são baseados em mensagens multicast: – Neighbor Discovering, Router Discovering and Prefix Discovering • IPv6over4 define um mapeamento entre mensagens multicast IPv4 e IPv6: – Pv4 multicast base address: 239.192.0.0/16 – 239 .192.< 2 bytes menos significativos do endereço multicast IPv6> 2008, Edgard Jamhour Mapeamento de Endereços • all-nodes multicast address: 239.192.0.1 – FF02::1: all nodes of the link (link local) • all-routers multicast address: 239.192.0.2 – FF01::2 all link local routers • solicited-node multicast address: 239.192.Y.Z – FF02::1::FFxx:xxxx – xx:xxxx 24 less significant bits of the host unicast address. 2008, Edgard Jamhour Conclusão • O IPv6 é necessidade real para permitir a continuidade do crescimento dos serviços Internet devido: – Ao esgotamento de endereços IPv4 públicos – Ao grande número de rotas dos roteadores de borda. • A transição para IPv6 ocorrerá gradualmente. – Redes IPv4 e IPv6 podem e irão coexistir. – Atualmente, já é possível utilizar endereços IPv6 e mecanismos de transição. 2008, Edgard Jamhour