Apresentando as interfaces virtuais do Linux: túneis

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 IPIP

Esses 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 SIT

Quando 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 Ip6tnl

Os 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 GRE

Observe 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 GRETAP

Veja 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 GRE6

Nos 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 GRE6TAP

Veja 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 FOU

Veja 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 GUE

Veja 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 GENEVE

Este 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 ERSPAN

Os 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.

Tipo de conexão / túnel
Cabeçalho externo
Cabeçalho Encapsulado
Cabeçalho interno
ipip
IPv4
Nenhuma
IPv4
sente-se
IPv4
Nenhuma
IPv4 / IPv6
ip6tnl
IPv4
Nenhuma
IPv4 / IPv6
vti
IPv4
IPsec
IPv4
vti6
IPv6
IPsec
IPv6
gre
IPv4
GRE
IPv4 / IPv6
agarrar
IPv4
GRE
Éter + IPv4 / IPv6
gre6
IPv6
GRE
IPv4 / IPv6
gre6tap
IPv6
GRE
Éter + IPv4 / IPv6
fou
IPv4 / IPv6
UDP
IPv4 / IPv6 / GRE
gue
IPv4 / IPv6
UDP + GUE
IPv4 / IPv6 / GRE
Genebra
IPv4 / IPv6
UDP + Geneve
Éter + IPv4 / IPv6
erspan
IPv4
GRE + ERSPAN
IPv4 / IPv6
ip6erspan
IPv6
GRE + ERSPAN
IPv4 / IPv6

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?

Source: https://habr.com/ru/post/pt457386/


All Articles