Informática Numaboa - Linux
Túneis em redes Linux
Qui 19 Abr 2007 10:36 |
- Detalhes
- Categoria: Como fazer configurações
- Atualização: Domingo, 12 Abril 2009 17:04
- Autor: vovó Vicki
- Acessos: 11919
Existem três tipos de túneis no Linux: IP em tunelamento IP, tunelamento GRE e túneis fora do kernel, por exemplo, PPTP.
Introdução
Os túneis podem ser usados para algumas coisas fora do comum e muito interessantes, mas também podem fazer uma bagunça horrorosa se não forem corretamente configurados. Não aponte sua rota default para um dispositivo túnel se você não souber EXATAMENTE o que está fazendo Também é bom lembrar que que o tunelamento aumenta o overhead porque precisa de um conjunto extra de cabeçalhos IP. Tipicamente são 20 bytes por pacote de modo que, se o tamanho (MTU) do pacote normal numa rede for de 1500 bytes, um pacote enviado através de um túnel só pode levar 1480 bytes de dados. Isto não é necessariamente um problema, mas, se você está pensando em conectar grandes redes com túneis, informe-se sobre fragmentação/recomposição de pacotes IP para não ser pego de calça curta. Tem mais uma pequena observação: o modo mais rápido de cavar um túnel é cavando dos dois lados
IP em tunelamento IP
Há muito tempo este tipo de tunelamento está disponível no Linux. Ele requer dois módulos do kernel, ipip.o e new_tunnel.o.
Digamos que você tenha 3 redes: as redes internas A e B e uma rede intermediária C (que pode ser a Internet). As redes são as seguintes:
REDE A rede 10.0.1.0 máscara 255.255.255.0 roteador 10.0.1.1 O roteador tem o endereço 172.16.17.18 na rede C. REDE B rede 10.0.2.0 máscara 255.255.255.0 roteador 10.0.2.1 O roteador tem o endereço 172.19.20.21 na rede C.
Referente à rede C, vamos considerar que ela passe qualquer pacote enviado de A para B e vice-versa. A Internet pode ser usada como rede C sem maiores problemas.
Para configurar um túnel IP em tunelamento IP verifique inicialmente se os módulos necessários estão instalados:
insmod ipip.o insmod new_tunnel.o
Depois, no roteador da rede A, faça o seguinte:
ifconfig tunl0 10.0.1.1 pointopoint 172.19.20.21 route add -net 10.0.2.0 netmask 255.255.255.0 dev tunl0
Da mesma forma, no roteador da rede B:
ifconfig tunl0 10.0.2.1 pointopoint 172.16.17.18 route add -net 10.0.1.0 netmask 255.255.255.0 dev tunl0
Pronto! O túnel está operante. Quando você quiser fechá-lo, use o seguinte comando:
ifconfig tunl0 down
Um túnel IP-in-IP não permite retransmitir broadcast nem aceita tráfego IPv6. Só é possível conectar duas redes IPv4 que normalmente não seriam capazes de se comunicar. Este tipo de túnel existe no Linux desde a versão 1.3, mas é exclusivo do pinguim - não funciona com outros sistemas operacionais ou com roteadores - mas é simples e funciona que é uma beleza. Apesar disto, só use o IP-in-IP se não tiver outro jeito (dê preferência ao túnel GRE).
Tunelamento GRE
GRE é um protocolo de tunelamento originalmente desenvolvido pela Cisco. O tunelamento GRE pode fazer muito mais do que um tunelamento IP-in-IP porque pode, entre outras coisas, transportar tráfego multicast e IPv6. Para funcionar no Linux, o módulo ip_gre.o precisa estar instalado.
Tunelamento IPv4
Vamos começar com o mais fácil, o tunelamento IPv4. Novamente vamos considerar três redes, as internas A e B e a intermediária C (que pode ser a Internet). As redes são:
REDE A rede 10.0.1.0 máscara 255.255.255.0 roteador 10.0.1.1 O roteador tem o endereço 172.16.17.18 na rede C. O nome desta rede é redeA. REDE B rede 10.0.2.0 máscara 255.255.255.0 roteador 10.0.2.1 O roteador tem o endereço 172.19.20.21 na rede C. O nome desta rede é redeB.
Em relação à rede C assumimos que ela passa qualquer pacote enviado de A para B e vice-versa. Como e porque não nos interessa.
No roteador da rede A faça o seguinte:
ip tunnel add redeB mode gre remote 172.19.20.21 local 172.16.17.18 ttl 255 ip link set redeB up ip addr add 10.0.1.1 dev redeB ip route add 10.0.2.0/24 dev redeB
Vamos dar uma clareada no assunto. Com a primeira linha foi adicionado um dispositivo túnel, chamado redeB (o que é autoexplicativo porque é para onde queremos ir ). A linha 1 ainda determina que seja usado o protocolo GRE (mode gre), que o endereço remoto é 172.19.20.21 (o roteador na outra ponta), que os pacotes tunelados devem ser originados de 172.16.17.18 (o que permite que o roteador tenha vários endereços IP na rede C e deixa para nós a decisão de determinar qual deles será usado no tunelamento) e que o campo TTL (Time To Live - Tempo de Vida) do pacote deve ser fixado em 255 (ttl 255).
A segunda linha habilita o dispositivo.
Na terceira, a interface redeB recém-nascida recebe o endereço 10.0.1.1. Isto pode ser feito em redes menores, mas, se você estiver iniciando uma expedição de mineração (ZILHÕES de túneis), talvez seja melhor usar uma outra faixa de IP para as interfaces de tunelamento (neste exemplo podemos usar 10.0.3.0).
Na quarta linha foi determinada a rota para a rede B. Observe a notação diferente usada para a máscara. Se você não tiver idéia do que vem a ser isto, leia o tópico Máscaras de Rede no tutorial Redes Linux. Aqui vai uma explicaçãozinha bem simples: escreva a máscara na forma binária e conte todos os 1. Por exemplo, 255.0.0.0 é /8, 255.255.0.0 é /16 e 255.255.255.0 é /24. Só para ilustrar mais um pouco, 255.255.254.0 é /23.
Bem, agora chegou a hora de mexer no roteador da rede B.
ip tunnel add redeA mode gre remote 172.16.17.18 local 172.19.20.21 ttl 255 ip link set redeA up ip addr add 10.0.2.1 dev redeA ip route add 10.0.1.0/24 dev redeA
Prontinho, está tudo no ar. E quando você quiser fechar o túnel no roteador A, basta "baixar" o link e deletar o túnel:
ip link set redeB down ip tunnel del redeB
É claro que o mesmo pode (e deve) ser feito no roteador B - basta trocar redeB por redeA.
Tunelamento IPv6
Vamos assumir que temos uma rede IPv6 e queremos abrir uma passagem para um amigo no roteador 6bone:
rede 3ffe:406:5:1:5:a:2:1/96 O endereço IPv4 é 172.16.17.18 O roteador 6bone tem o endereço IPv4 172.22.23.24
Com estes dados é possível criar o túnel:
ip tunnel add sixbone mode sit remote 172.22.23.24 local 172.16.17.18 ttl 255 ip link set sixbone up ip addr add 3ffe:406:5:1:5:a:2:1/96 dev sixbone ip route add 3ffe::/15 dev sixbone
Aqui vão as explicações do que foi feito. Primeiro criamos um dispositivo túnel chamado sixbone. Estabelecemos o modo sit (que é IPv6 em tunelamento IPv4) e indicamos onde ir (remote) e de onde vir (local). TTL é colocado no máximo, 255. Depois ativamos o dispositivo (up) e, em seguida, adicionamos o nosso endereço de rede e estabelecemos uma rota para 3ffe::/15 (ou seja, todo o 6bone) através do túnel.
Túneis GRE são o tipo preferido de tunelamento. É um padrão que também é largamente adotado fora da camunidade Linux - vamos e venhamos, uma coisa muuuito boa.
Existem dúzias de implementações de tunelamento fora do kernel, algumas proprietárias, algumas seguras e até as que nem mesmo usam IP. É impraticável falar sobre cada uma delas, mas, a título de informação, as mais conhecidas são PPP e PPTP.
Fonte de Referência
- Linux Advanced Routing & Traffic Control HOWTO de Thomas Graf, Gregory Maxwell, Remco van Mook, Martijn van Oosterhout, Paul B. Schroeder, Jasper Spaans e Pedro Larroy.