O Linux suporta muitos tipos de túneis. Isso confunde os iniciantes que acham difícil entender as diferenças de tecnologia e entender qual túnel é melhor usar em uma situação específica. O material, cuja tradução publicamos hoje, fornecerá uma breve visão geral das interfaces de encapsulamento comumente usadas do kernel Linux. Não vamos nos aprofundar neste tópico, considerando apenas os recursos gerais de túneis e opções para seu uso no Linux.

O autor deste material acredita que o que será discutido aqui pode ser do interesse de todos que têm algo a ver com o gerenciamento de redes de computadores. A lista de interfaces de encapsulamento, bem como as informações de referência em uma configuração específica, podem ser obtidas usando o comando iproute2
ip link help
.
As seguintes interfaces comumente usadas serão abordadas aqui: IPIP, SIT, ip6tnl, VTI e VTI6, GRE e GRETAP, GRE6 e GRE6TAP, FOU, GUE, GENEVE, ERSPAN e IP6ERSPAN.
Depois de ler este artigo, você aprenderá sobre os recursos dessas interfaces e descobrirá as diferenças entre elas. Você aprenderá como criá-los e aprenderá sobre situações nas quais eles são mais bem utilizados.
IPIP
O túnel IPIP, como o próprio nome indica, é um túnel operando no modo IP sobre IP (
RFC 2003 ). O cabeçalho do pacote de encapsulamento IPIP é como mostrado abaixo.
Cabeçalho de pacote de encapsulamento IPIPEsses túneis são comumente usados para conectar duas sub-redes IPv4 internas em uma rede IPv4 pública (Internet). O uso do IPIP cria uma carga adicional mínima no sistema, mas apenas a transmissão de dados unidirecional (unicast) pode ser realizada nesse túnel. Ou seja, tendo construído esse túnel, não será possível usá-lo para transmissão de dados multicast.
Os túneis IPIP suportam os modos IP sobre IP e MPLS sobre IP.
Observe que quando o módulo ipip é carregado ou quando o dispositivo IPIP é criado pela primeira vez, o kernel do Linux cria um dispositivo
tunl0
padrão em cada espaço de nome com os atributos
local=any
e
remote=any
. Ao receber pacotes IPIP, o kernel, em certos casos, os redirecionará para
tunl0
como o dispositivo padrão. Isso acontece quando o kernel não consegue encontrar outro dispositivo cujos atributos
local/remote
correspondam mais aos endereços de origem e destino dos pacotes.
Veja como criar um túnel IPIP:
No servidor A:
# ip link add name ipip0 type ipip local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR # ip link set ipip0 up # ip addr add INTERNAL_IPV4_ADDR/24 dev ipip0 Add a remote internal subnet route if the endpoints don't belong to the same subnet # ip route add REMOTE_INTERNAL_SUBNET/24 dev ipip0
No servidor B:
# ip link add name ipip0 type ipip local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR # ip link set ipip0 up # ip addr add INTERNAL_IPV4_ADDR/24 dev ipip0 # ip route add REMOTE_INTERNAL_SUBNET/24 dev ipip0
Observe que, ao usar esta configuração, ela deve ser alinhada com dados reais. Em particular,
LOCAL_IPv4_ADDR
,
REMOTE_IPv4_ADDR
,
INTERNAL_IPV4_ADDR
e
REMOTE_INTERNAL_SUBNET
precisam ser substituídos pelos endereços usados em seu ambiente. O mesmo vale para outros exemplos de configurações, que consideraremos posteriormente.
Sente-se
O SIT (Transição Simples da Internet) é uma tecnologia de encapsulamento, cujo objetivo principal é conectar redes IPv6 isoladas via Internet usando o protocolo IPv4.
Inicialmente, a tecnologia SIT só podia funcionar no modo de encapsulamento "IPv6 sobre IPv4". No entanto, ao longo dos anos de desenvolvimento, ganhou o apoio de vários outros modos. Em particular, é
ipip
(o mesmo aconteceu com o túnel IPIP),
ip6ip
,
mplsip
e
any
.
any
modo é usado para trabalhar com tráfego IP e IPv6, o que pode ser útil em algumas situações. Os túneis SIT também suportam
ISATAP . Aqui está
um exemplo do uso dessa tecnologia.
O cabeçalho do pacote SIT é como mostrado abaixo.
Cabeçalho do pacote de túnel SITQuando o módulo
sit
carregado, o kernel do Linux cria o
sit0
padrão do
sit0
.
Veja como criar um túnel SIT (estas etapas devem ser executadas nos servidores A e B):
# ip link add name sit1 type sit local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR mode any # ip link set sit1 up # ip addr add INTERNAL_IPV4_ADDR/24 dev sit1
Ip6tnl
A interface ip6tnl funciona no modo IPv4 / IPv6 sobre IPv6. É semelhante à versão IPv6 do túnel SIT. É assim que o cabeçalho do pacote ip6tnl se parece.
Cabeçalho do pacote de túnel Ip6tnlOs túneis Ip6tnl suportam
ip6ip6
,
ipip6
e
any
modo. O modo
ipip6
representado pelo esquema IPv4 sobre IPv6, o modo
ip6ip6
é IPv6 sobre IPv6.
any
modo suporta os dois esquemas.
Quando o módulo
ip6tnl
, o kernel do Linux cria um dispositivo padrão chamado
ip6tnl0
.
Veja como criar um túnel ip6tnl:
# ip link add name ipip6 type ip6tnl local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR mode any
VTI e VTI6
A interface Linux VTI (Virtual Tunnel Interface) é semelhante à interface Cisco VTI e à implementação do Juniper de um túnel seguro (st.xx).
Esse driver de encapsulamento implementa o encapsulamento IP, que pode ser usado com o xfrm para criar túneis seguros e, em seguida, usar túneis de roteamento no nível do kernel sobre esses túneis.
Em geral, os túneis VTI funcionam como IPIP ou SIT. A exceção é que eles usam o encapsulamento / decapsulamento fwmark e IPsec.
VTI6 é o equivalente IPv6 do VTI.
Veja como criar um túnel VTI:
# ip link add name vti1 type vti key VTI_KEY local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR # ip link set vti1 up # ip addr add LOCAL_VIRTUAL_ADDR/24 dev vti1 # ip xfrm state add src LOCAL_IPv4_ADDR dst REMOTE_IPv4_ADDR spi SPI PROTO ALGR mode tunnel # ip xfrm state add src REMOTE_IPv4_ADDR dst LOCAL_IPv4_ADDR spi SPI PROTO ALGR mode tunnel # ip xfrm policy add dir in tmpl src REMOTE_IPv4_ADDR dst LOCAL_IPv4_ADDR PROTO mode tunnel mark VTI_KEY # ip xfrm policy add dir out tmpl src LOCAL_IPv4_ADDR dst REMOTE_IPv4_ADDR PROTO mode tunnel mark VTI_KEY
Além disso, o IPsec pode ser configurado usando
libreswan ou
strongSwan .
GRE e GRETAP
A tecnologia GRE (Encapsulamento de roteamento genérico) é descrita na
RFC 2784 . No encapsulamento GRE, um cabeçalho GRE adicional é adicionado entre os cabeçalhos dos pacotes IP internos e externos.
Teoricamente, o GRE pode encapsular pacotes de qualquer protocolo da Camada 3 com um tipo Ethernet válido. Isso distingue a tecnologia GRE da tecnologia IPIP, que suporta apenas o encapsulamento de pacotes IP. Aqui está a aparência do cabeçalho do pacote ao usar a tecnologia GRE.
Cabeçalho do pacote de túnel GREObserve que os túneis GRE permitem suporte a multicast e IPv6.
Ao carregar o módulo
gre
, o kernel do Linux cria o
gre0
padrão
gre0
.
Veja como criar um túnel GRE:
# ip link add name gre1 type gre local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR [seq] key KEY
Enquanto os túneis GRE operam na camada OSI 3, os túneis GRETAP operam na camada OSI 2. Isso significa que um dos cabeçalhos internos dos respectivos pacotes é Ethernet.
Cabeçalho do pacote de túnel GRETAPVeja como criar um túnel GRETAP:
# ip link add name gretap1 type gretap local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR
GRE6 e GRE6TAP
GRE6 é o equivalente IPv6 do GRE. Os túneis GRE6 permitem encapsular qualquer protocolo da camada 3 no IPv6. É assim que o cabeçalho do pacote GRE6 se parece.
Cabeçalho do pacote de túneis GRE6Nos túneis GRE6TAP, como nos túneis GRETAP, existem cabeçalhos Ethernet entre os cabeçalhos de pacotes internos.
Cabeçalho do pacote de túnel GRE6TAPVeja como criar um túnel GRE:
# ip link add name gre1 type gre6 local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR # ip link add name gretap1 type gretap6 local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR
Fou
O encapsulamento pode ser realizado em diferentes níveis da pilha de rede. Os túneis IPIP, SIT e GRE existem na camada IP. E os túneis FOU (eles são organizados de acordo com o esquema “foo over UDP”) operam no nível UDP.
Existem algumas vantagens em usar o encapsulamento UDP sobre o encapsulamento IP. O fato é que o protocolo UDP funciona com a infraestrutura de hardware existente.
Por exemplo, este é
RSS em placas de rede,
ECMP em comutadores, são tecnologias para calcular somas de verificação sem a participação de um processador central. A aplicação do
patch FOU apropriado aos desenvolvedores mostra um aumento significativo no desempenho para SIT e IPIP.
Atualmente, os túneis FOU suportam encapsulamento de protocolo com base em IPIP, SIT e GRE. Aqui está a aparência do cabeçalho de um pacote FOU.
Cabeçalho do pacote de túneis FOUVeja como criar um túnel FOU:
# ip fou add port 5555 ipproto 4 # ip link add name tun1 type ipip remote 192.168.1.1 local 192.168.1.2 ttl 225 encap fou encap-sport auto encap-dport 5555
O primeiro comando configura a porta FOU de recebimento do IPIP vinculada a 5555. Para usar o GRE, você precisa usar o
ipproto 47
. O segundo comando configura a nova interface IPIP virtual (
tun1
), projetada para o encapsulamento FOU, cuja porta de destino é 5555.
Observe que os túneis FOU não são suportados no Red Hat Enterprise Linux.
Gue
Outro tipo de encapsulamento UDP é introduzido pela tecnologia GUE (
Generic UDP Encapsulation ). A diferença entre FOU e GUE é que o GUE tem seu próprio cabeçalho, que contém informações de protocolo e outros dados.
Atualmente, os túneis GUE suportam o encapsulamento interno de IPIP, SIT e GRE. Aqui está a aparência de um cabeçalho de pacote GUE.
Cabeçalho do pacote de túnel GUEVeja como criar um túnel GUE:
# ip fou add port 5555 gue # ip link add name tun1 type ipip remote 192.168.1.1 local 192.168.1.2 ttl 225 encap gue encap-sport auto encap-dport 5555
Graças a esses comandos, uma porta GUE de recebimento para IPIP vinculada ao número 5555 e um túnel IPIP configurado para encapsulamento de GUE serão criados.
Os túneis GUE não são suportados no Red Hat Enterprise Linux.
GENEVE
Os túneis GENEVE (encapsulamento de virtualização de rede genérica) suportam todos os recursos de XLAN, NVGRE e STT. A tecnologia GENEVE foi projetada para contornar as limitações identificadas dessas três tecnologias. Muitos acreditam que essa tecnologia é capaz, a longo prazo, de substituir completamente esses três formatos mais antigos. Aqui está a aparência do cabeçalho do pacote de encapsulamento GENEVE.
Cabeçalho do pacote de túneis GENEVEEste cabeçalho é semelhante ao cabeçalho de um pacote
VXLAN . A principal diferença entre os dois é que o cabeçalho GENEVE é mais flexível. Isso facilita muito a implementação de novos recursos, expandindo os cabeçalhos usando os campos Tipo-Comprimento-Valor (TLV).
Detalhes sobre GENEVE podem ser encontrados
aqui e
aqui .
GENEVE é usado na solução SDN de
rede virtual aberta (OVN) como uma ferramenta de encapsulamento padrão. Veja como criar um túnel GENEVE:
# ip link add name geneve0 type geneve id VNI remote REMOTE_IPv4_ADDR
ERSPAN e IP6ERSPAN
A tecnologia do analisador de porta comutada remota encapsulada (ERSPAN) usa o encapsulamento GRE para estender os recursos básicos do espelhamento de porta da camada 2 para a camada 3. Isso permite encaminhar tráfego espelhado por uma rede IP roteada. É assim que o cabeçalho do pacote ERSPAN se parece.
Cabeçalho do pacote de túnel ERSPANOs túneis do ERSPAN permitem que os hosts Linux atuem como uma fonte de tráfego ERSPAN e enviem o tráfego espelhado do ERSPAN para um host remoto ou para um destino do ERSPAN que recebe e processa pacotes ERSPAN gerados por switches Cisco ou outros dispositivos que suportam o ERSPAN. Um sistema semelhante pode ser usado para analisar e diagnosticar a rede, para detectar tráfego malicioso.
Atualmente, o Linux suporta a maioria dos recursos das duas versões do ERSPAN - v1 (tipo II) e v2 (tipo III).
Veja como criar túneis ERSPAN:
# ip link add dev erspan1 type erspan local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR seq key KEY erspan_ver 1 erspan IDX
Você também pode fazer isso:
# ip link add dev erspan1 type erspan local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR seq key KEY erspan_ver 2 erspan_dir DIRECTION erspan_hwid HWID
Adicione um filtro tc para monitorar o tráfego:
# tc qdisc add dev MONITOR_DEV handle ffff: ingress # tc filter add dev MONITOR_DEV parent ffff: matchall skip_hw action mirred egress mirror dev erspan1
Sumário
Nós cobrimos algumas tecnologias de encapsulamento no Linux aqui. Aqui está uma tabela de resumo para eles.
Observe que todos os túneis, cujos exemplos de criação são mostrados aqui, existem apenas até o servidor ser reiniciado. Se você deseja criar um túnel que se recupera após a reinicialização, considere usar um daemon para configurar a rede, como o
NetworkManager , ou use o mecanismo apropriado da distribuição Linux que você está usando.
Caros leitores! Quais túneis Linux você usa?