Configuração de Redes IPv6 em GNU/Linux



Documentos relacionados
Uso do iptables como ferramenta de firewall.

Curso de extensão em Administração de sistemas GNU/Linux: redes e serviços

IPTABLES. Helder Nunes

Entendendo como funciona o NAT


Administração de Redes Redes e Sub-redes

Sistemas Operacionais de Redes. Aula: Gerenciamento de rede Professor: Jefferson Igor D. Silva

Linux Network Servers

Segurança de Redes. Firewall. Filipe Raulino

Elaboração de Script de Firewall de Fácil administração

Firewalls em Linux. Tutorial Básico. André Luiz Rodrigues Ferreira

cio Roteamento Linux

Arquitetura de Rede de Computadores

Segurança com Iptables

Firewall. Tutorial Firewall em Linux Acadêmicos: Felipe Zottis e Cleber Pivetta

Projeto e Instalação de Servidores IPv6. Prof.: Roberto Franciscatto

Iptables. Adailton Saraiva Sérgio Nery Simões

Obs: Endereços de Rede. Firewall em Linux Kernel 2.4 em diante. Obs: Padrões em Intranet. Instalando Interface de Rede.

Segurança em Sistemas de Informação

Redes de Computadores

TCP é um protocolo de TRANSMISSÃO, responsável pela confiabilidade da entrega da informação.

ADMINISTRAÇÃO DE REDES I LINUX. Firewall. Frederico Madeira LPIC 1, CCNA fred@madeira.eng.br

Instalação e Configuração Iptables ( Firewall)

Professor Claudio Silva

O Protocolo IP (2) Prof. José Gonçalves Pereira Filho Departamento de Informática

Na Figura a seguir apresento um exemplo de uma "mini-tabela" de roteamento:

Firewall Iptables. Professor: João Paulo de Brito Gonçalves. Campus - Cachoeiro Curso Técnico de Informática

PROJETO DE IMPLEMENTAÇÃO DE UM SERVIDOR FIREWALL LIVRE UTILIZANDO IPTABLES

Laboratório. Assunto: endereçamento IP e roteamento.

Curso de extensão em Administração de sistemas GNU/Linux: redes e serviços

Roteiro de Práticas de Roteamento IGP usando Quagga

Laboratório Firewall IPv6

Roteiro de Práticas de Roteamento IGP usando Quagga

PROJETO INTERDISCIPLINAR I

Firewall - IPTABLES. Conceitos e Prática. Tópicos em Sistemas de Computação Prof. Dr. Adriano Mauro Cansian adriano@acmesecurity.

Instalação e Configuração Servidor DNS

Universidade Católica de Brasília Pró-reitoria de Graduação Curso de Ciência da Computação

Segurança de Redes de Computadores

UM dos protocolos de aplicação mais importantes é o DNS. Para o usuário leigo,

Configuração de redes no Gnu/Linux

Segurança de redes com Linux. Everson Scherrer Borges Willen Borges de Deus


Sistema Operacional Unidade 12 Comandos de Rede e Acesso Remoto

1. Capturando pacotes a partir da execução do traceroute

III WTR do POP-BA III Workshop de Tecnologias de Redes Ponto de Presença da RNP na Bahia Instrutor: Ibirisol Fontes Monitor: Jundaí Abdon.

Firewalls. Prática de Laboratório. Maxwell Anderson INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DA PARAÍBA

Redes de Computadores. Guia de Laboratório Configuração de Redes

Sistemas Operacionais de Rede. Configuração de Rede

Veja abaixo um exemplo de um endereço IP de 32 bits:

Firewall Iptables - Impasses

Semestre 4 do CCNA Prova final baseada em habilidades Treinamento do aluno Diretrizes para o instrutor Visão geral e administração da prova

Configuração de Rede

Redes de Computadores

LABORATÓRIO III. ROTEAMENTO ESTÁTICO Documento versão 0.1. Aluno: Paulo Henrique Moreira Gurgel #

Trabalhando com NAT no PFSense

Laboratório - Visualização das tabelas de roteamento do host

Introdução a Firewalls no Linux (Netfilter/Iptables)

Ferramentas de Análise de Rede. Hermes Senger

Curso Técnico em Informática. Informática Aplicada Instrutor Rafael Barros Sales

Configurando o DDNS Management System

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

Autor: Armando Martins de Souza <armandomartins.souza at gmail.com> Data: 12/04/2010

APOSTILA DE REDES DE COMPUTADORES PARTE - I I

01 - Entendendo um Firewall. Prof. Armando Martins de Souza armandomartins.souza@gmail.com

Procedimento para instalação do OMNE-Smartweb em Raio-X

Curso de Pós Graduação em Redes de Computadores. Módulo Laboratório de Linux Apostila 2. Serviço DNS

18/05/2014. Problemas atuais com o IPv4

Redes. Entenda o que são ICMP, ping e traceroute Autor: Hélder Garcia hlbognfspam@sounerd.com Março de 2004

Configurando servidor de DNS no CentOS O Domain Name System Sistema de Nomes de Domínio é de fundamental importância em uma rede.

L A B O RATÓRIO DE REDES

Configuração de um servidor DNS. Campus Cachoeiro Curso Técnico em Informática

Nesse artigo abordaremos os principais aspectos de instalação e uso do NTOP no Fedora Core 4.

Arquitetura TCP/IP. Parte VI Entrega de pacotes sem conexão (IP) Fabrízzio Alphonsus A. M. N. Soares

Endereços Lógicos, Físicos e de Serviço

Formação IPv6 Maputo Moçambique 26 Agosto - 29 Agosto 08 Configuração de Sistema (Linux)

Prática DNS. Edgard Jamhour

Prof. Samuel Henrique Bucke Brito

Redes de Computadores

Load Balance / Route Policy (para series Vigor 2860 / Vigor 2925)

Capítulo 9 - Conjunto de Protocolos TCP/IP e Endereçamento. Associação dos Instrutores NetAcademy - Julho de Página

Configurando DNS Server. Prof. Armando Martins de Souza

FIREWALL COM IPTABLES. by João Eriberto Mota Filho 3. TABELAS. Tabela Filter ESQUEMA DA TABELA FILTER

Interconexão de Redes. Aula 03 - Roteamento IP. Prof. Esp. Camilo Brotas Ribeiro cribeiro@catolica-es.edu.br

Compartilhamento da internet, firewall

Troubleshooting em rede básica

Prof. Samuel Henrique Bucke Brito

Segurança em Sistemas de Informação Tecnologias associadas a Firewall

Laboratório 3. Configurando o Serviço DNS

Capítulo 4 - Aprendendo sobre Outros Dispositivos

Exercícios de Revisão Edgard Jamhour. Quarto Bimestre: IPv6 e Mecanismos de Transiçao

Endereço IP Privado. Endereçamento IP. IP Protocolo da Internet. Protocolos da. Camada de Inter-Rede (Internet)

Prof. Samuel Henrique Bucke Brito

Endereçamento IP. Figura 1 Estrutura hierárquica do endereço IP

Introdução Introduç ão Rede Rede TCP/IP Roteame Rotea nto nto CIDR

Fernando Albuquerque - fernando@cic.unb.br ADMINISTRAÇÃO TCP/IP. Fernando Albuquerque fernando@cic.unb.br

Mecanismos de QoS em Linux Hierarchical Token Bucket (HTB)

ICORLI. INSTALAÇÃO, CONFIGURAÇÃO e OPERAÇÃO EM REDES LOCAIS e INTERNET

Transcrição:

Configuração de Redes IPv6 em GNU/Linux Elmer Sens José Ricardo Simões Rodrigues Maio de 2003. Resumo Neste breve artigo pretendemos, com base na extensa documentação já existente na web, explorar os passos para a configuração de uma rede usando do novíssimo protocolo da Internet: o IP versão 6. A configuração será baseada em uma instalação do sistema operacional GNU/Linux com pacotes disponíveis em quase qualquer distribuição padronizada. Sumário 1 Introdução 2 1.1 Sobre o IPv6............................. 2 1.2 Um pouco de história........................ 3 2 O Protocolo IP, versão 6 3 2.1 Endereçamento IPv6......................... 3 2.2 Checando sua distribuição...................... 4 2.2.1 Ferramentas de configuração................ 4 2.2.2 Ferramentas de teste e debug................ 5 2.2.3 Outros programas...................... 5 3 Procedimentos de configuração 5 3.1 Configurando interfaces....................... 5 3.1.1 Levantando interfaces.................... 6 3.1.2 Configurando endereços IPv6................ 6 3.1.3 Configurando rotas normais IPv6.............. 7 3.1.4 Descobrindo a vizinhança.................. 8 3.2 Túneis IPv6-in-IPv4......................... 8 3.2.1 Configurando túneis ponto-a-ponto............. 9 3.2.2 Configurando túneis 6to4.................. 10 3.3 Firewalling.............................. 10 3.3.1 Firewalling com netfilter6.................. 10 3.3.2 Rápida referência de netfilter6............... 11 Os autores são estudantes do curso de Pós Graduação Lato Sensu em Administração de Redes Linux da Universidade Federal de Lavras. O presente artigo foi escrito como atividade da disciplina Administração de Redes Linux ministrada pelo Prof. Joaquim Quinteiro Uchôa. Endereços para correspondência eletrônica: elmer@linuxmail.org e simoes@uni.de, respectivamente 1

4 Configuração de uma rede fictícia 14 4.1 Pre-configuração do ambiente de rede............... 14 4.1.1 Configuração da rede IPv4................. 15 4.1.2 Configuração da rede IPv6................. 15 4.1.3 Configuração do ambiente de rede............. 15 4.1.4 Suporte IPv6 do kernel................... 16 4.2 Configuração de um túnel 6to4 entre dois roteadores....... 16 4.3 Configuração de um roteador IPv6 do tipo backbone e rede-interna 16 4.3.1 Configuração das interfaces de rede............. 16 4.3.2 Configuração da rota default................ 17 4.3.3 Configuração do Zebra.................... 17 4.4 Configuração do firewall para o roteador-túnel.......... 18 4.5 Configuração das demais máquinas internas de uma rede IPv6.. 20 4.6 Configuração do DNS reverso e direto em IPv6.......... 20 4.7 Alguns testes simples em IPv6................... 24 5 Conclusões 25 Referências 26 1 Introdução 1.1 Sobre o IPv6 IPv6 é a nova versão do Protocolo de Internet (Internet Protocol version 6). Tal implementação do protocolo IP é também, com razão, chamada de IPng (Next Generation Internet Protocol). Ela deverá substituir progressivamente o protocolo atual da Internet, o IPv4 (Internet Protocol version 4), estendendo o espaço de endereçamento corrente, que se tornou insuficiente para acomodar a atual taxa de crescimento da rede. Os novos endereços têm 128 bits de comprimento (contra os atuais 32 bits do IPv4), possibilitando um aumento significativo no número de hosts. As características do IPv6 IPv6 são, dentre outras: 128 bits de espaço de endereçamento; Características do IPng arquitetura de endereçamento melhor estruturada; suporte para datagramas jumbo (o IPv4 suporta somente 64 Kbytes no tamanho do pacote); mobilidade; configuração plug-and-play (stateless address config); mecanismos de segurança, incluindo encriptação e autenticação; suporte para multicasting e anycasting; e suporte a aplicações multimídia em tempo real. Embora pilhas IPv6 nativas não possam interoperar diretamente com pilhas IPv4, mecanismos de compatibilidade IPv4 foram introduzidos no IPv6 para assegurar uma transição mais fácil. 2

1.2 Um pouco de história Como já dissemos, o protocolo IP nova geração ou IP versão 6 (IPv6), é a nova especificação do protocolo IP recomendada pelos responsáveis da área de trabalho IPng da Internet Engineering Task Force (IETF), a 25 de Julho de 1994. Esta especificação foi aprovada pelo Internet Engineering Steering Group (IESG) em 17 de Novembro de 1994 e tornada standard em Dezembro de 1995 [1]. Em 1995, surgiu a idéia de criar uma rede internacional de desenvolvimento e testes do protocolo com objetivos semelhantes aos do Mbone (teste multicast). Esta idéia foi concretizada em Março de 1996 numa reunião da IETF em Los Angeles e teve início em Junho desse mesmo ano. A rede assim criada, com a designação 6Bone, arrancou com a ligação de 6 instituições de ensino superior localizadas na Europa (UL, UNIC/DK, G6/FR), América do Norte (CISCO/US, NRL/US) e Ásia (WIDE/JP). As primeiras linhas de código relativas a networking com IPv6 foram adicionadas ao kernel 2.1.8 em novembro de 1996 por Pedro Roque. Era baseada na API do BSD. 6Bone 2 O Protocolo IP, versão 6 2.1 Endereçamento IPv6 Como já mencionado, os endereços IPv6 tem comprimento de 128 bits, o que gera números, em base decimal, com mais de 39 dígitos: 2 128 1 = 340282366920938463463374607431768211455. O uso da notação hexadecimal reduz o comprimento dos endereços IPv6 para 32 caracteres: 2 128 1 = 0xffffffffffffffffffffffffffffffff. Esta representação ainda não é muito conveniente. Então os desenvolvedores do IPv6 escolheram o formato hexadecimal com separadores (dois pontos) a cada grupo de 16 bits e removeram o indicador 0x. 2 128 1 =ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff. Endereços IPv6 Um endereço do mundo real poderia ser 3ffe:ffff:0100:f101:0210:a4ff:fee3:9566. Para simplificações, zeros no início de cada bloco são omitidos. O endereço 3ffe:ffff:0100:f101:0210:a4ff:fee3:9566 pode ser representado por 3ffe:ffff:100:f101:210:a4ff:fee3:9566. Uma sequência de blocos contendo apenas zeros pode ser substituída por ::. 3ffe:ffff:100:f101:0:0:0:1 3ffe:ffff:100:f101::1. 3

A maior redução de zeros pode ser vista no endereço reservado pelo IPv6 para o localhost: 0000:0000:0000:0000:0000:0000:0000:0001 ::1 Há também a representação chamada de compacta (codificação base85) definida na RFC 1924 [2] cujo exemplo segue abaixo 1. # ipv6calc --addr_to_base85 3ffe:ffff:0100:f101:0210:a4ff:fee3:9566 Itu&-ZQ82s>J%s99FJXT Maiores informações sobre endereços especiais, de host e de rede, podem ser encontradas no Linux IPv6 HOWTO obtido em http://www.ibiblio.org/pub/ Linux/docs/HOWTO/other-formats/html_single/Linux+IPv6-HOWTO.html. 2.2 Checando sua distribuição Uma relação completa de distros IPv6 ready pode ser vista em http://www. bieringer.de/linux/ipv6/status/ipv6+linux-status-distributions.html.ipv6 e seu Se você deseja testar a distribuição instalada para ver se suporta o protocolo, kernel verifique se a entrada /proc/net/if_inet6 existe. Um teste rápido pode ser feito com: # test -f /proc/net/if_inet6 && echo "Kernel pronto para IPv6" Se o teste falhar, o módulo IPv6 não foi carregado. Pode-se tentar carregar o módulo com modprobe ipv6. Evidentemente, é possível carregar o módulo por demanda inserindo a entrada alias net-pf-10 ipv6 no arquivo /etc/modules.conf. Nem todos os dispositivos de redes, atualmente, tem a capacidade de transportar pacotes IPv6. Uma lista de dispositivos capacitados está em http:// www.bieringer.de/linux/ipv6/status/ipv6+linux-status-kernel.html. 2.2.1 Ferramentas de configuração Ter um kernel que suporte IPv6 não é suficiente. Você precisará das ferramentas adequadas para configurar o sistema. net-tools: Este pacote de ferramentas inclui ifconfig e route os quais permitem a configuração das interfaces de rede. Veja as saídas de ifconfig -? ou route -?; se alguma coisa como IPv6 ou inet6 é mostrada, então você tem as ferramentas aptas para IPv6. iproute: Esta ferramenta oferece mais funcionalidade que net-tools, apesar da escassa documentação. Cheque a saída de net-tools e iproute /sbin/ip 2>&1 grep -qw inet6 && echo " ip is IPv6-ready"! para verificar se o utilitário ip está pronto para IPv6. 1 ipv6calc é uma calculadora de endereços no formato IPv6 que pode ser obtida em http: //www.bieringer.de/linux/ipv6/ipv6calc/. 4

2.2.2 Ferramentas de teste e debug São os bons e velhos ping6 e traceroute6 em suas versões preparadas para IPv6. ping6: Normalmente incluído no pacote iputils. Realiza testes de transporte de pacotes enviando pacotes ICMPv6 echo-request e esperando por pacotes ICMPv6 echo-reply. Uso: # ping6 <hostwithipv6address> # ping6 <ipv6address> # ping6 [-I<device>]<link-local-ipv6address> Exemplo de ping6 para a interfacee loopback: # ping6 -c 1 ::1 PING ::1(::1) from ::1 : 56 data bytes 64 bytes from ::1: icmp_seq=0 hops=64 time=292 usec --- ::1 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max/mdev = 0.292/0.292/0.292/0.000 ms traceroute6: Normalmente incluído no pacote iputils. IPv4. Abaixo um exemplo. É similar ao traceroute # traceroute6 www.6bone.net traceroute to 6bone.net (3ffe:b00:c18:1::10) from 3ffe:ffff:0000:f101::2, 30 hops max, 16 byte packets 1 localipv6gateway (3ffe:ffff:0000:f101::1) 1.354 ms 1.566 ms 0.407 ms 2 swi6t1-t0.ipv6.switch.ch (3ffe:2000:0:400::1) 90.431 ms 91.956 ms 92.377 ms 3 3ffe:2000:0:1::132 (3ffe:2000:0:1::132) 118.945 ms 107.982 ms 114.557 ms 4 3ffe:c00:8023:2b::2 (3ffe:c00:8023:2b::2) 968.468 ms 993.392 ms 973.441 ms 5 3ffe:2e00:e:c::3 (3ffe:2e00:e:c::3) 507.784 ms 505.549 ms 508.928 ms 6 www.6bone.net (3ffe:b00:c18:1::10) 1265.85 ms * 1304.74 ms tcpdump: É a melhor ferramenta para captura de pacotes. Suporte a IPv6 está incluso nos releases a partir de 3.6. 2.2.3 Outros programas Comece verificando em http://www.bieringer.de/linux/ipv6/status/ipv6+ Linux-status-distributions.html ou http://www.bieringer.de/linux/ipv6/ status/ipv6+linux-status-apps.html a existência de aplicativos prontos para IPv6. 3 Procedimentos de configuração 3.1 Configurando interfaces Interfaces como Ethernet ou Token-Ring não precisam de tratamento especial. Já as interfaces virtuais, como as abaixo, precisam. 5

Túneis IPv6-in-IPv4: Normalmente nomeadas como sitx. Estes dispositivos tem a capacidade de encapsular pacote IPv6 em pacotes IPv4. sit0 tem um significado especial e não pode ser usada para túneis dedicados. Interfaces IPv6 PPP: É preciso ter um daemon PPP capacitado para IPv6. ISDN HDLC: Interfaces IPv6 com capacidade para HDLC com encapsulamento de IP são suportadas pelo kernel. ISDN PPP: Não são habilitadas no kernel. SLIP + PLIP: Estas interfaces não suportam transporte de pacotes IPv6. 3.1.1 Levantando interfaces Podem ser usados ip ou ifconfig para levantar ou derrubar interfaces. Uso de ip: # ip link set dev <interface> up # ip link set dev <interface> down Uso de ifconfig: # /sbin/ifconfig <interface> up # /sbin/ifconfig <interface> down 3.1.2 Configurando endereços IPv6 Primeiramente vo cê precisa checar se os endereços IPv6 já foram configurados. Usando ip: # /sbin/ip -6 addr show dev <interface> Exemplo da saída para um host configurado estaticamente: # /sbin/ip -6 addr show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_ fast qlen 100 inet6 fe80::210:a4ff:fee3:9566/10 scope link inet6 3ffe:ffff:0:f101::1/64 scope global inet6 fec0:0:0:f101::1/64 scope site Adicionar um endereço IPv6 address é similar ao mecanismo de IP ALIAS usando em interfaces IPv4. Usando ip: # /sbin/ip -6 addr add <ipv6address>/<prefixlength> dev <interface> Usando ip para remover endereços: # /sbin/ip -6 addr del <ipv6address>/<prefixlength> dev <interface> 6

3.1.3 Configurando rotas normais IPv6 Você precisará de roteamento se quiser enviar pacotes para a Internet. Se houver um roteador IPv6 em seu link, é possível adicionar rotas. Use ip para visualizar as rotas já adicionadas automaticamente. # /sbin/ip -6 route show [dev <device>] Exemplo: # /sbin/ip -6 route show dev eth0 3ffe:ffff:0:f101::/64 proto kernel metric 256 mtu 1500 advmss 1440 fe80::/10 proto kernel metric 256 mtu 1500 advmss 1440 ff00::/8 proto kernel metric 256 mtu 1500 advmss 1440 default proto kernel metric 256 mtu 1500 advmss 1440 Use ip para adicionar rotas para um roteador IPv6-enabled em seu link. Rotas IPv6 # /sbin/ip -6 route add <ipv6network>/<prefixlength> via <ipv6address> [dev <device>] Exemplo: # /sbin/ip -6 route add 2000::/3 via 3ffe:ffff:0:f101::1 ip também pode ser usado para apagar rotas adicionadas. # /sbin/ip -6 route del <ipv6network>/<prefixlength> via <ipv6address> [dev <device>] Exemplo: # /sbin/ip -6 route del 2000::/3 via 3ffe:ffff:0:f101::1 Às vezes é necessário adicionar ou apagar uma rota IPv6 por uma interface em casos de links ponto-a-ponto. Isso pode ser feito usando ip ou route. Usando ip: # /sbin/ip -6 route add <ipv6network>/<prefixlength> dev <device> metric 1 Exemplo: # /sbin/ip -6 route add 2000::/3 dev eth0 metric 1 Usando route: # /sbin/route -A inet6 add <network>/<prefixlength> dev <device> Exemplo: # /sbin/route -A inet6 add 2000::/3 dev eth0 Usando route para remover rotas: # /sbin/route -A inet6 del <network>/<prefixlength> dev <device> Exemplo: # /sbin/route -A inet6 del 2000::/3 dev eth0 7

3.1.4 Descobrindo a vizinhança Neighbor discovery é o sucessor, em IPv6, para ARP (Address Resolution Protocol). Você pode receber informação acerca da vizinhança bem como adicionar e editar entradas na sua tabela de vizinhança usando ip. Usando ip para exibir os vizinhos da estação: Neighbor discovery # ip -6 neigh show [dev <device>] O exemplo a seguir mostra um vizinho, que é um roteador. # ip -6 neigh show fe80::201:23ff:fe45:6789 dev eth0 lladdr 00:01:23:45:67:89 router nud reachable 3.2 Túneis IPv6-in-IPv4 Para alcançar o mundo externo, formado principalmente por redes IPv4, sera preciso configurar tunelamento IPv6-in-IPv4 para alcançar outras redes IPv6. São tipos de túneis para envio de pacotes IPv6 em redes IPv4: Tunelamente estático ponto-a-ponto: é um túnel dedicado a um ponto final que conhece sua rede IPv6 e o endereço IPv4 da terminação do túnel. É especificado em [3]. Requer: Túneis 6to4 1. O endereço IPv4 da terminação local de seu túnel precisa ser estático, global, único e alcançável. 2. Um prefixo IPv6 global disponibilizado. 3. Uma terminação remota (do túnel) que seja capaz de rotear seu prefixo IPv6 a sua terminação local (do túnel). Túneis automáticos: acontece quando um nó conecta um outro nó conhecendo o endereço IPv4 desse nó com antecedência. Tunelamento 6to4: Especificado em [4], usa mecanismos simples para criar túneis automaticamente. Cada nó com um endereço IPv4 global e único está apto a ser uma terminação (endpoint) de um túnel 6to4 (isso se não houver um firewall de pacotes IPv4 que restrinja o tráfego). O endereço 6to4 é definido como a seguir (o esquema foi retirado de [4] : Tabela 1: Esquema dos endereços 6to4 conforme o RFC 3056 3+13 32 16 64 bits FP+TLA V4ADDR SLA ID Interface ID 0x2002 Aqui FP é o prefixo para endereços globais, TLA é o agregador de mais alto nível. V4ADDR é o endereço global do nó IPv4 em notação hexadecimal. SLA é o indicador de sub-rede. Dessa maneira o prefixo geralmente usa SLA 0000 e um sufixo ::1 atribuído á interface do túnel 6to4. O tunelamento 6to4 é usado em uma das situações seguintes: 8

de 6to4 para 6to4: diretamente tunelado entre os dois hosts; de 6to4 para não-6to4: enviado via tunelamento upstream; e não-6to4 para 6to4: enviado via tunelamento downstream. Use ip para visualizar túneis criados: # /sbin/ip -6 tunnel show [<device>] Exemplo: # /sbin/ip -6 tunnel show sit0: ipv6/ip remote any local any ttl 64 nopmtudisc sit1: ipv6/ip remote 195.226.187.50 local any ttl 64 3.2.1 Configurando túneis ponto-a-ponto Há três possibilidades para adicionar ou remover túneis ponto-a-ponto: ip, ifconfig e route. Vamos usar apenas o utilitário ip. Um bom artigo acerca da configuração de túneis usando ip pode ser encontrado em http://www.deepspace6.net/docs/iproute2tunnel-en.html. Sintaxe genérica: # /sbin/ip -6 tunnel show sit0: ipv6/ip remote any local any ttl 64 nopmtudisc sit1: ipv6/ip remote 195.226.187.50 local any ttl 64 Exemplo genérico para três túneis: Setup de Túneis # /sbin/ip tunnel add sit1 mode sit ttl <ttldefault> remote <ipv4addressofforeigntunnel1> local <ipv4addresslocal> # /sbin/ip link set dev sit1 up # /sbin/ip -6 route add <prefixtoroute1> dev sit1 metric 1 # /sbin/ip tunnel add sit2 mode sit ttl <ttldefault> <ipv4addressofforeigntunnel2> local <ipv4addresslocal> #/sbin/ip link set dev sit2 up # /sbin/ip -6 route add <prefixtoroute2> dev sit2 metric 1 # /sbin/ip tunnel add sit3 mode sit ttl <ttldefault> <ipv4addressofforeigntunnel3> local <ipv4addresslocal> # /sbin/ip link set dev sit3 up # /sbin/ip -6 route add <prefixtoroute3> dev sit3 metric 1 ip também pode ser usado para remover interfaces criadas Sintaxe genérica: # /sbin/ip tunnel del <device> Exemplo genérico para três túneis: # /sbin/ip -6 route del <prefixtoroute1> dev sit1 # /sbin/ip link set sit1 down # /sbin/ip tunnel del sit1 # /sbin/ip -6 route del <prefixtoroute2> dev sit2 # /sbin/ip link set sit2 down # /sbin/ip tunnel del sit2 # /sbin/ip -6 route del <prefixtoroute3> dev sit3 # /sbin/ip link set sit3 down # /sbin/ip tunnel del sit3 9

3.2.2 Configurando túneis 6to4 Preliminarmente você deverá calcular o prefixo 6to4 usando seu endereço IPv4 global. Assumindo que o endereço IPv4 é 1.2.3.4 o prefixo 6to4 será 2002:0102:0304::. Gateways 6to4 locais devem sempre ter o sufixo ::1, por conseguinte seu endereço 6to4 será 2002:0102:0304::1. Agora, use ip e um dispositivo de túnel dedicado. Este é o modo recomendado (TTL deve ser especificado porque o valor default é 0). Crie um novo dispositivo de túnel: # /sbin/ip tunnel add tun6to4 mode sit ttl <ttldefault> remote any local <localipv4address> Ative a interface: # /sbin/ip link set dev tun6to4 up Adicione um endereço 6to4 local à interface: # /sbin/ip -6 addr add <local6to4address>/16 dev tun6to4 Adicione a rota default para a rede global IPv6 usando o endereço de anycast all-6to4-routers IPv4. # /sbin/ip -6 route add 2000::/3 via ::192.88.99.1 dev tun6to4 metric 1 Para remover um túnel, use ip e remova todas as rotas que passam pelo dispositivo: # /sbin/ip -6 route flush dev tun6to4 Desative a interface: # /sbin/ip link set dev tun6to4 down Remova o dispositivo de túnel criado: # /sbin/ip tunnel del tun6to4 A descrição da implementação de tunelamento de pacotes IPv4 em redes IPv6 é descrita em [5]. 3.3 Firewalling A implementação de um firewall é importante em IPv6, especialmente se estivermos usando IPv6 em redes internas com endereços globais. Diferentemente das redes IPv4 que em geral tem seus hosts protegidos automaticamente com o uso de endereços descritos em [6], em IPv6 normalmente se trabalha com endereços globais e alguém com conectividade IPv6 pode alcançar seus hosts IPv6 internos. 3.3.1 Firewalling com netfilter6 Filtragem nativa 2 de pacotes IPv6 é suportada apenas a das versões 2.4+ do kernel. O procedimento para configuração de um kernel para filtragem de pacotes IPv6 é descrito na Seção 16.2 de [7] disponível em http://www.ibiblio.org/ pub/linux/docs/howto/other-formats/html_single/linux+ipv6-howto.html# CHAPTER-FIREWALLING-SECURITY. 2 http://www.netfilter.org/ netfilter6 e firewalling 10

3.3.2 Rápida referência de netfilter6 Primeiramente, carregue o módulo de filtragem de pacotes IPv6: # modprobe ip6_tables Cheque a compatibilidade no kernel: # [! -f /proc/net/ip6_tables_names ] && echo "O kernel atual n~ao suporta firewalling IPv6" Listar todas entradas IPv6 no netfilter: Saída curta: # ip6tables -L Saída extendida Refer^encia rápida netfilter6 # ip6tables -n -v --line-numbers -L Listar filtro específico: \normalsize# ip6tables -n -v --line-numbers -L INPUT Inserir uma regra de log no filto de entrtada com opções: # ip6tables --table filter --append INPUT -j LOG --log-prefix "INPUT:" --log-level 7 Inserir uma regra de descarte (drop) no filtro de entrada: # ip6tables --table filter --append INPUT -j DROP Apagar uma regrar por número: # ip6tables --table filter --delete INPUT 1 Aceita pacotes ICMPv6 chegando através dos túneis: # ip6tables -A INPUT -i sit+ -p icmpv6 -j ACCEPT Aceita pacotes ICMPv6 saindo através dos túneis: # ip6tables -A OUTPUT -o sit+ -p icmpv6 -j ACCEPT Exemplo de taxa de limitação de pacotes ICMPv6 (importante para evitar ataques do tipo negação de serviço): # ip6tables -A INPUT --protocol icmpv6 --icmpv6-type echo-request -j ACCEPT --match limit --limit 30/minute Conexão SSH (Secure Shell) a partir do endereço 3ffe:ffff:100::1/128 # ip6tables -A INPUT -i sit+ -p tcp -s 3ffe:ffff:100::1/128 --sport 512:65535 --dport 22 -j ACCEPT Para aceitar pacotes IPv6-in-IPv4, você deverá inserir regras em seu firewall IPv4 relativamente a esses pacotes, e.g.: Aceitar pacotes IPv6-in-IPv4 chegando pela interface ppp0: # iptables -A INPUT -i ppp0 -p ipv6 -j ACCEPT Aceitar pacotes IPv6-in-IPv4 deixando a rede pela interface ppp0: # iptables -A OUTPUT -o ppp0 -p ipv6 -j ACCEPT 11

Tendo sido configurado um túnel estático, você poderá especificar um endereço IPv4 também, como: Aceitar pacotes IPv6-in-IPv4 chegando pela interface ppp0 a partir do túnel terminado em 1.2.3.4: # iptables -A INPUT -i ppp0 -p ipv6 -s 1.2.3.4 -j ACCEPT Aceitar pacotes IPv6-in-IPv4 deixando a rede pela interface ppp0 ao túnel terminado em 1.2.3.4: # iptables -A OUTPUT -o ppp0 -p ipv6 -d 1.2.3.4 -j ACCEPT Bloquear requisições para conexões TCP para este host: # ip6tables -I INPUT -i sit+ -p tcp --syn -j DROP Bloquear requisições para conexões TCP para host atrás deste roteador: # ip6tables -I FORWARD -i sit+ -p tcp --syn -j DROP Bloquear pacotes UDP chegando para este host: # ip6tables -I INPUT -i sit+ -p udp! --dport 32768:60999 -j DROP Bloquear pacotes UDP chegando que não podem ser respostas de requisições de hosts atrás deste roteador: # ip6tables -I FORWARD -i sit+ -p udp! --dport 32768:60999 -j DROP As linhas seguintes mostram um exemplo de configuração bem mais sofisticado disponível em [7]. ip6tables # ip6tables -n -v -L Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 extin all sit+ * ::/0 ::/0 4 384 intin all eth0 * ::/0 ::/0 0 0 ACCEPT all * * ::1/128 ::1/128 0 0 ACCEPT all lo * ::/0 ::/0 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 7 prefix INPUT-default: 0 0 DROP all * * ::/0 ::/0 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 int2ext all eth0 sit+ ::/0 ::/0 0 0 ext2int all sit+ eth0 ::/0 ::/0 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 7 prefix FORWARD-default: 0 0 DROP all * * ::/0 ::/0 Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 extout all * sit+ ::/0 ::/0 4 384 intout all * eth0 ::/0 ::/0 0 0 ACCEPT all * * ::1/128 ::1/128 0 0 ACCEPT all * lo ::/0 ::/0 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 7 prefix OUTPUT-default: 0 0 DROP all * * ::/0 ::/0 12

Chain ext2int (1 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT icmpv6 * * ::/0 ::/0 0 0 ACCEPT tcp * * ::/0 ::/0 tcp spts:1:65535 dpts:1024:65535 flags:!0x16/0x02 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 7 prefix ext2int-default: 0 0 DROP tcp * * ::/0 ::/0 0 0 DROP udp * * ::/0 ::/0 0 0 DROP all * * ::/0 ::/0 Chain extin (1 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp * * 3ffe:400:100::1/128 ::/0 tcp spts:512:65535 dpt:22 0 0 ACCEPT tcp * * 3ffe:400:100::2/128 ::/0 tcp spts:512:65535 dpt:22 0 0 ACCEPT icmpv6 * * ::/0 ::/0 0 0 ACCEPT tcp * * ::/0 ::/0 tcp spts:1:65535 dpts:1024:65535 flags:!0x16/0x02 0 0 ACCEPT udp * * ::/0 ::/0 udp spts:1:65535 dpts:1024:65535 0 0 LOG all * * ::/0 ::/0 limit: avg 5/min burst 5 LOG flags 0 level 7 prefix extin-default: 0 0 DROP all * * ::/0 ::/0 Chain extout (1 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp * * ::/0 3ffe:ffff:100::1/128tcp spt:22 dpts:512:65535 flags:!0x16/0x02 0 0 ACCEPT tcp * * ::/0 3ffe:ffff:100::2/128tcp spt:22 dpts:512:65535 flags:!0x16/0x02 0 0 ACCEPT icmpv6 * * ::/0 ::/0 0 0 ACCEPT tcp * * ::/0 ::/0 tcp spts:1024:65535 dpts:1:65535 0 0 ACCEPT udp * * ::/0 ::/0 udp spts:1024:65535 dpts:1:65535 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 7 prefix extout-default: 0 0 DROP all * * ::/0 ::/0 Chain int2ext (1 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT icmpv6 * * ::/0 ::/0 0 0 ACCEPT tcp * * ::/0 ::/0 tcp spts:1024:65535 dpts:1:65535 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 7 prefix int2ext: 0 0 DROP all * * ::/0 ::/0 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 7 prefix int2ext-default: 0 0 DROP tcp * * ::/0 ::/0 0 0 DROP udp * * ::/0 ::/0 0 0 DROP all * * ::/0 ::/0 Chain intin (1 references) pkts bytes target prot opt in out source destination 13

0 0 ACCEPT all * * ::/0 fe80::/ffc0:: 4 384 ACCEPT all * * ::/0 ff02::/16 Chain intout (1 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT all * * ::/0 fe80::/ffc0:: 4 384 ACCEPT all * * ::/0 ff02::/16 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 7 prefix intout-default: 0 0 DROP all * * ::/0 ::/0 4 Configuração de uma rede fictícia Nesta seção mostraremos alguns procedimentos de configuração básica para IPv6. As principais distribuições de Linux e os BSD-Like (e.g., Red Hat 7.3, Conectiva 7.0, Conectiva 8.0, e FreeBSD 4.4) já estão vindo com suporte à IPv6 em suas últimas versões. Assim, não nos preocuparemos em demonstrar como compilar kernel e/ou aplicativos em IPv6. Caso o leitor pretenda configurar um túnel 6to4 em seu roteador, recomendamos fortemente que utilize um Linux no roteador, dado o fato que o Netfilter/IPtables do Linux possui algumas características que o tornam melhor para gerenciar um firewall, como por exemplo a distinção entre trafego entrado e saindo das interfaces de rede de um roteador (INPUT e OUTPUT) e trafego passado através de um roteador, ou seja de uma interface de rede para outra (FORWARD). Os procedimentos seguem a ordem: 1. Pré-configuração do ambiente de rede; 2. Configuração de um túnel 6to4 entre dois roteadores; 3. Configuração de um roteador IPv6 do tipo backbone e rede-interna (utilizando Zebra 3 ); 4. Configuração do firewall para o roteador-túnel (fragmento); 5. Configuração das demais máquinas internas de uma rede IPv6; 6. Configuração do DNS reverso e direto em IPv6; e 7. Alguns testes simples em IPv6. Uma rede IPng na prática Os endereços IP (tanto IPv4 como IPv6) mostrados nos procedimentos de configuração abaixo são ilustrativos. Não os utilize em sua configuração sob nenhuma hipótese. 4.1 Pre-configuração do ambiente de rede A configuração em uma distribuição GNU/Linux com kernel 2.4.20 e net-tools 1.60 é exemplificada nas seguintes subseções. 3 Software GNU para roteamento. Obtido em http://www.zebra.org/ 14

4.1.1 Configuração da rede IPv4 eth0: 146.164.7.6 rede: 146.164.7.0 netmask: 255.255.255.192 Backbone eth1: 146.164.89.1 rede: 146.164.89.0 netmask: 255.255.255.192 Rede interna eth2: Sem nenhuma configuração IPv4 gateway default: 146.164.7.1 4.1.2 Configuração da rede IPv6 eth0: 3ffe:2b00:102:400::1 rede: 3ffe:2b00:102:400:: netmask: /80 Backbone Rede interna: 3ffe:2b00:102:400:100::/72 eth1: 3ffe:2b00:102:400:100:: rede: 3ffe:2b00:102:400:100:: netmask: /80 1 a Rede interna eth2: 3ffe:2b00:102:400:101:: rede: 3ffe:2b00:102:400:101:: netmask: /80 2 a Rede interna 4.1.3 Configuração do ambiente de rede Acrescente as seguintes linhas ao arquivo /etc/protocols, se elas ainda não existirem: ipv6 41 IPv6 IPv6 ipv6-route 43 IPv6-Route # Routing Header for IPv6 ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6 ipv6-crypt 50 IPv6-Crypt # Encryption Header for IPv6 ipv6-auth 51 IPv6-Auth # Authentication Header for IPv6 ipv6-icmp 58 IPv6-ICMP icmpv6 icmp6 # ICMP for IPv6 ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6 ipv6-opts 60 IPv6-Opts # Destination Options for IPv6 Acrescente as seguintes linhas ao arquivo /etc/hosts, se elas ainda não existirem: /etc/protocols /etc/hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts 15

4.1.4 Suporte IPv6 do kernel Como dissemos anteriormente na página 4, é necessário carregar o suporte ao IPv6 do kernel com o comando modprobe ipv6. Sugere-se colocar este comando no início do arquivo de inicialização da configuração IPv6 da rede. 4.2 Configuração de um túnel 6to4 entre dois roteadores O tunelamento 6to4 [4] usa um mecanismo simples para criar túneis automaticamente. Cada nó com um IP global está habilitado para ser um ponto final em um túnel 6to4. A subrede para túnel usada neste exemplo é 3ffe:2b00:0102:0108:0011::/80 Túnel 6to4 # Configurar Endereço IPv6 (eth0, eth1 e eth2) /sbin/ifconfig eth0 add 3ffe:2b00:102:400::1/80 /sbin/ifconfig eth0 add 3ffe:2b00:102:400::/80 /sbin/ifconfig eth1 add 3ffe:2b00:102:400:100::/80 /sbin/ifconfig eth2 add 3ffe:2b00:102:400:101::/80 # Ativar Roteamento de IPv6 no Kernel echo "1" > /proc/sys/net/ipv6/conf/all/forwarding # Ativar Túnel Default (sit0) /sbin/ifconfig sit0 up # Configurar Endereço IPv4 da Ponta Remota do Túnel #(número IPv4 do concentrador de tuneis) /sbin/ifconfig sit0 tunnel ::146.164.5.209 # OBS.: Endereço real do concentrador de tuneis # Ativar Túnel com o concentrador de tuneis /sbin/ifconfig sit1 up # Configurar Endereço IPv6 da Ponta Local do Túnel #(usar um IPv6 da subrede do túnel) /sbin/ifconfig sit1 inet6 add 3ffe:2b00:0102:0108:0011::2/126 # Configurar Rota Default (utilize ::0/0 no lugar de default) /sbin/route -A inet6 add ::0/0 gw 3ffe:2b00:0102:0108:0011::1 dev sit1 # Configurar a Rota do Túnel /sbin/route -A inet6 add 3ffe:2b00:0102:0108:0011::0/126 dev sit1 4.3 Configuração de um roteador IPv6 do tipo backbone e rede-interna Se você configurou um túnel com o concentrador de túneis como acima mostrado, então você deve pular esta parte e ir direto a configuração do Zebra, porque as interfaces de rede, a ativação do roteamento IPv6 e a rota default já foram configuradas. Neste exemplo estamos assumindo que nós fizemos o túnel, então as demais redes do nosso backbone devem apontar para nós (3ffe:2b00:102:400::). 4.3.1 Configuração das interfaces de rede # Configurar Endereço IPv6 (demais redes do nosso backbone) 16 Um roteador IPv6

/sbin/ifconfig eth0 add 3ffe:2b00:102:400::xx/80 /sbin/ifconfig eth1 add 3ffe:2b00:102:400:xx00::/80 /sbin/ifconfig eth2 add 3ffe:2b00:102:400:xx01::/80 # Ativar Roteamento de IPv6 (demais redes do nosso backbone) echo "1" > /proc/sys/net/ipv6/conf/all/forwarding 4.3.2 Configuração da rota default # Configura rota default (demais redes do nosso backbone) /sbin/route -A inet6 add ::0/0 gw 3ffe:2b00:102:400:: dev eth0 4.3.3 Configuração do Zebra Focaremos apenas nas configurações em IPv6, ou seja, dos daemons zebra e ripngd. Se você for configurar o ripd para IPv4, utilize o Zebra-0.93b e aplique os patches para o ripd nele. O Zebra tem uma interface semelhante a de um roteador CISCO, porém isto poderá confundir os mais novatos, por isso preferimos fornecer arquivos de exemplos de configurações já testadas. Será necessário adicionar estas linhas no arquivo /etc/services. Se a sua distribuição já vem com o Zebra, isto não será necessário. # GNU Zebra services zebrasrv 2600/tcp # zebra service zebra 2601/tcp # zebra vty ripd 2602/tcp # RIPd vty ripngd 2603/tcp # RIPngd vty ospfd 2604/tcp # OSPFd vty bgpd 2605/tcp # BGPd vty ospf6d 2606/tcp # OSPF6d vty Um exemplo funcional para o arquivo /etc/zebra.conf segue na listagem abaixo. /etc/services /etc/zebra.conf hostname <coloque_o_hostname_do_seu_gateway_aqui> password <coloque_uma_senha_de_acesso_n~ao-privilegiado_aqui> enable password <coloque_uma_senha_de_acesso_privilegiado_aqui> log file /var/log/zebra.log! Somente habilite as linhas abaixo se estiver no período de testes! Sen~ao os logs ficam gigantescos, desabilite depois dos testes!debug zebra events!debug zebra packet!debug zebra kernel interface lo! Atenç~ao! A instruç~ao "ipv6 nd suppress-ra" é para prevenir o! router advertisement na interface. Se for utiliza-lo, habilite-o! somente nas usas interfaces de rede interna!! As interfaces virtuais sit0 e sit1 s~ao interfaces de túnel! interface sit0 ipv6 nd suppress-ra interface sit1 ipv6 nd suppress-ra interface eth0 ipv6 nd suppress-ra interface eth1 ipv6 nd suppress-ra interface eth2 ipv6 nd suppress-ra line vty 17

Um exemplo funcional para o arquivo /etc/ripngd.conf: /etc/ripngd.conf hostname <coloque_o_hostname_do_seu_gateway_aqui> password <coloque_uma_senha_de_acesso_n~ao-privilegiado_aqui> enable password <coloque_uma_senha_de_acesso_privilegiado_aqui> log file /var/log/ripng.log! Somente habilite as linhas abaixo se estiver no período de testes!! Sen~ao os logs ficam gigantescos, desabilite depois dos testes!!debug ripng events!debug ripng packet!debug ripng zebra interface lo interface sit0 interface sit1 interface eth0 interface eth1 interface eth2 router ripng! A linha abaixo só deve ser habilitada pela rede que faz o túnel e exporta! a rota default. É uma forma elegante de se exportar a rota default, é o! mesmo que "route ::/0".!default-information originate! Habilite ripng somente nas interfaces de backbone e internas.! N~ao há necessidade (e nem se deve fazer isto) de se exportar rota pela! interface de túnel, pois o concentrador de tuneis já exporta a rota! agregada de todo o /64 da rede do nosso bloco. network eth0 network eth1 network eth2 redistribute static! A linha abaixo só deve ser habilitada pela rede que faz o túnel e exporta! a rota default. Define uma rota para a 1 a sub-rede do backbone e que será! exportada para as demais redes nele.! Isto é para o caso de existirem redes do nosso bloco que necessitem fazer túnel! direto conosco sem passar pelo backbone IPv6 do mesmo usando RIPng. É o caso de! redes com uma Netware/Novell no backbone e um roteador Linux roteando o IPv6! dentro da referida rede (o que desaconselhamos fortemente).!route 3ffe:2b00:102:400::/80! Para a rede que faz o túnel e exporta a rota default e também para as demais! redes do nosso backbone route 3ffe:2b00:102:400:100::/80 route 3ffe:2b00:102:400:101::/80 line vty Finalmente, deve-se rodar o zebra e o ripngd, nesta ordem: /usr/sbin/zebra -d /usr/sbin/ripngd -d 4.4 Configuração do firewall para o roteador-túnel Este exemplo é parte de um shell script /etc/rc.d/firewall que só lhe será útil se você tiver configurado um túnel com o concentrador de túneis. Se este não for o seu caso, desconsidere e vá para a configuração das demais máquinas internas de uma rede IPv6 a seguir. /etc/rc.d/firewall #!/bin/sh # Regras de firewall parciais para um roteador-tunel IPv6 PATH=/bin:/sbin:/usr/bin:/usr/sbin IPFW=iptables IPFW6=ip6tables # Rede IPv6 especial do tunel com o concentrador de tuneis TUNNEL_NET_IPV6=3ffe:2b00:102:108:11::/126 # Endereço IPv6 especial da ponta remota do túnel CONCENTRADOR_TUNNEL_NET_IPV6=3ffe:2b00:102:108:11::1 18

# Endereço IPv6 especial da ponta local do túnel GW_TUNNEL_NET_IPV6=3ffe:2b00:102:108:11::2 # Rede IPv6 no nosso bloco BLOCO_NET_IPV6=3ffe:2b00:102:400::/64 # Redes internas da nossa rede (IPv4 e IPv6) INTERNAL_NET=146.164.89.0/26 INTERNAL_NET_IPV6=3ffe:2b00:102:400:100::/72 GW_BBONE_ETH0_IPV6=3ffe:2b00:102:400::1 # Este aqui é somente para quem está fazendo o túnel e # exportando a rota default GW_BBONE_ETH0_ALIAS_IPV6=3ffe:2b00:102:400:: GW_INTERNAL_ETH1=146.164.89.1 GW_INTERNAL_ETH1_IPV6=3ffe:2b00:102:400:100:: #GW_INTERNAL_ETH2=INEXISTENTE EM IPv4 GW_INTERNAL_ETH2_IPV6=3ffe:2b00:102:400:101:: # Endereços da administraç~ao do MEUDOMINIO6Bone que podem acessar os # nossos Zebra daemons. MEUDOMINIO6BONE="146.164.5.209 146.164.5.210 146.164.5.212 146.164.10.3" # Nos endereços IPv6, observe que o primeiro endereço se refere ao # concentrador de tuneis ao qual estamos ligados. Este endereço irá # mudar para o endereço real do tunel que VOC^E esteja realmente # configurando e que será diferente do deste exemplo. MEUDOMINIO6BONE_IPV6="3ffe:2b00:102:108:11::1 3ffe:2b00:102:108::1 3ffe:2b00:102:108::3 \ 3ffe:2b00:102:108::4 3ffe:2b00:100:10d:1::1" # Limpa as nossas tabelas de firewall antes de adicionar novas # regras ${IPFW} --flush ${IPFW6} --flush # Criaç~ao do chain LOGDROP, uma vez que a flag -l inexiste no # iptables. Agora se deve usar -j LOG seguido de -j DROP, o target # DENY n~ao existe mais no IPTABLES. ${IPFW} -N LOGDROP ${IPFW} -A LOGDROP -j LOG -m limit --limit 100/m --limit-burst 100 --log-level 1 \ --log-prefix "iptables DROPPED: " ${IPFW} -A LOGDROP -j DROP # A parte IPV6 ${IPFW6} -N LOGDROP ${IPFW6} -A LOGDROP -j LOG -m limit --limit 100/m --limit-burst 100 --log-level 1 \ --log-prefix "ip6tables DROPPED: " ${IPFW6} -A LOGDROP -j DROP # Criaç~ao do chain LOGREJECT, uma vez que a flag -l inexiste no #iptables. Agora se deve usar -j LOG seguido de -j REJECT, o #target REJECT existe mas a sua filosofia mudou um pouco no #IPTABLES. ${IPFW} -N LOGREJECT ${IPFW} -A LOGREJECT -j LOG -m limit --limit 100/m --limit-burst 100 --log-level 4 \ --log-prefix "iptables REJECTED: " ${IPFW} -A LOGREJECT -j REJECT # A parte IPV6 ${IPFW6} -N LOGREJECT ${IPFW6} -A LOGREJECT -j LOG -m limit --limit 100/m --limit-burst 100 --log-level 4 \ --log-prefix "ip6tables REJECTED: " # O ip6tables ainda n~ao tem a implementacao do REJECT em IPv6, devemos usar DROP mesmo! #${IPFW6} -A LOGREJECT -j REJECT ${IPFW6} -A LOGREJECT -j DROP # Regras para o concentrador de tuneis: Deixa passar tudo do # concentrador de tuneis para o que existir no nosso backbone, # através das interfaces de túnel e do backbone, e vice-versa ${IPFW6} -A FORWARD -i sit1 -o eth0 -s ${CONCENTRADOR_TUNNEL_NET_IPV6} -d any/0 -j ACCEPT ${IPFW6} -A FORWARD -i eth0 -o sit1 -s any/0 -d ${CONCENTRADOR_TUNNEL_NET_IPV6} -j ACCEPT # Regras especiais para o IPv6 do nosso bloco: Deixa passar tudo # do nosso bloco para o resto da Internet, através das interfaces # de túnel e do backbone, e vice-versa ${IPFW6} -A FORWARD -i eth0 -o sit1 -s ${BLOCO_NET_IPV6} -d any/0 -j ACCEPT ${IPFW6} -A FORWARD -i sit1 -o eth0 -s any/0 -d ${BLOCO_NET_IPV6} -j ACCEPT # A partir daqui, podemos adicionar as regras para a nossa rede #interna # Regras para proteç~ao das portas 2600 a 2606 (GNU Zebra Routers 19

# Daemons) Somente o proprio roteador e a administraç~ao do # MEUDOMINIO6Bone podem acessar o Zebra for i in ${MEUDOMINIO6BONE}; do ${IPFW} -A INPUT -p tcp -s ${i} -d ${GW_BBONE_ETH0} --dport 2600:2606 -j ACCEPT ${IPFW} -A INPUT -p tcp -s ${i} -d ${GW_INTERNAL_ETH1} --dport 2600:2606 -j ACCEPT done ${IPFW} -A INPUT -p tcp -s any/0 -d ${GW_BBONE_ETH0} --dport 2600:2606 -j LOGREJECT ${IPFW} -A INPUT -p tcp -s any/0 -d ${GW_INTERNAL_ETH1} --dport 2600:2606 -j LOGREJECT # A parte IPv6 for i in ${MEUDOMINIO6BONE_IPV6}; do ${IPFW6} -A INPUT -p tcp -s ${i} -d ${GW_TUNNEL_NET_IPV6} --dport 2600:2606 -j ACCEPT ${IPFW6} -A INPUT -p tcp -s ${i} -d ${GW_BBONE_ETH0_IPV6} --dport 2600:2606 -j ACCEPT # Este aqui é somente para quem está fazendo o tunel e exportando a rota default! ${IPFW6} -A INPUT -p tcp -s ${i} -d ${GW_BBONE_ALIAS_IPV6} --dport 2600:2606 -j ACCEPT ${IPFW6} -A INPUT -p tcp -s ${i} -d ${GW_INTERNAL_ETH1_IPV6} --dport 2600:2606 -j ACCEPT ${IPFW6} -A INPUT -p tcp -s ${i} -d ${GW_INTERNAL_ETH2_IPV6} --dport 2600:2606 -j ACCEPT done ${IPFW6} -A INPUT -p tcp -s any/0 -d ${GW_TUNNEL_NET_IPV6} --dport 2600:2606 -j LOGREJECT ${IPFW6} -A INPUT -p tcp -s any/0 -d ${GW_BBONE_ETH0_IPV6} --dport 2600:2606 -j LOGREJECT # Este aqui é somente para quem está fazendo o tunel e exportando a rota # default! ${IPFW6} -A INPUT -p tcp -s any/0 -d ${GW_BBONE_ALIAS_IPV6} --dport 2600:2606 -j LOGREJECT ${IPFW6} -A INPUT -p tcp -s any/0 -d ${GW_INTERNAL_ETH1_IPV6} --dport 2600:2606 -j LOGREJECT ${IPFW6} -A INPUT -p tcp -s any/0 -d ${GW_INTERNAL_ETH2_IPV6} --dport 2600:2606 -j LOGREJECT Devemos fazer a chamada das regras de firewall no boot, por exemplo no arquivo rc.local devemos colocar um comando do tipo: if [ -x /etc/rc.d/firewall ]; then /etc/rc.d/firewall; fi 4.5 Configuração das demais máquinas internas de uma rede IPv6 A configuração para os demais máquinas Linux de uma rede IPv6 é mais simples, como vemos abaixo: Configuração para máquinas na 1 a rede interna: ifconfig eth0 add 3ffe:2b00:102:400:100::2/80 route -A inet6 add ::0/0 gw 3ffe:2b00:102:400:100:: dev eth0 Configuração para máquinas na 2 a rede interna: Redes internas ifconfig eth0 add 3ffe:2b00:102:400:101::10/80 route -A inet6 add ::0/0 gw 3ffe:2b00:102:400:101:: dev eth0 Note-se que em IPv6 usa-se ::0/0 e não default para se representar a rota default. 4.6 Configuração do DNS reverso e direto em IPv6 Deve-se acrescentar apenas as configurações para IPv6, o DNS reverso IPv6 e as entradas IPv6 no DNS direto. No arquivo named.conf, deve-se fazer os acréscimos abaixo. Estamos usando a faixa de exemplo; no seu arquivo named.conf você deverá substituir pela faixa IPv6 delegada à sua rede. named.conf // Exemplo de named.conf com suporte IPv6 options { // 20