Presentación de las interfaces virtuales de Linux: túneles

Linux soporta muchos tipos de túneles. Esto confunde a los principiantes a quienes les resulta difícil comprender las diferencias tecnológicas y comprender qué túnel es mejor usar en una situación particular. El material, cuya traducción publicamos hoy, brindará una breve descripción de las interfaces de túnel de uso común del kernel de Linux. No profundizaremos en este tema, considerando solo las características generales de los túneles y las opciones para su uso en Linux.



El autor de este material cree que lo que se discutirá aquí puede ser de interés para todos los que tengan algo que ver con la administración de redes informáticas. La lista de interfaces de túnel, así como la información de referencia sobre una configuración específica, se puede obtener utilizando el comando iproute2 ip link help .

Aquí se cubrirán las siguientes interfaces de uso común: IPIP, SIT, ip6tnl, VTI y VTI6, GRE y GRETAP, GRE6 y GRE6TAP, FOU, GUE, GENEVE, ERSPAN e IP6ERSPAN.

Después de leer este artículo, aprenderá sobre las características de estas interfaces y descubrirá las diferencias entre ellas. Aprenderá cómo crearlos y aprenderá sobre las situaciones en las que se utilizan mejor.

IPIP


El túnel IPIP, como su nombre lo indica, es un túnel que funciona en modo IP sobre IP ( RFC 2003 ). El encabezado del paquete del túnel IPIP se muestra a continuación.


Encabezado de paquete de túnel IPIP

Tales túneles se usan comúnmente para conectar dos subredes IPv4 internas a través de una red pública IPv4 (Internet). El uso de IPIP crea una carga adicional mínima en el sistema, pero solo se puede realizar la transmisión de datos unidireccional (unidifusión) en dicho túnel. Es decir, después de haber construido dicho túnel, no será posible usarlo para la transmisión de datos de multidifusión.

Los túneles IPIP admiten los modos IP sobre IP y MPLS sobre IP.

Tenga en cuenta que cuando se carga el módulo ipip, o cuando se crea el dispositivo IPIP por primera vez, el kernel de Linux creará un dispositivo tunl0 predeterminado en cada espacio de nombres con los atributos local=any y remote=any . Al recibir paquetes IPIP, el núcleo, en ciertos casos, los redirigirá a tunl0 como dispositivo predeterminado. Esto sucede cuando el núcleo no puede encontrar otro dispositivo cuyos atributos local/remote coincidan más estrechamente con las direcciones de origen y destino de los paquetes.

Aquí se explica cómo crear un túnel IPIP:

En el 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 

En el 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 

Tenga en cuenta que al usar esta configuración, debe alinearse con datos reales. En particular, LOCAL_IPv4_ADDR , REMOTE_IPv4_ADDR , INTERNAL_IPV4_ADDR y REMOTE_INTERNAL_SUBNET deben reemplazarse con las direcciones utilizadas en su entorno. Lo mismo es cierto para otros ejemplos de configuraciones, que consideraremos más adelante.

Sentarse


SIT (Simple Internet Transition) es una tecnología de tunelización cuyo propósito principal es conectar redes IPv6 aisladas a través de Internet utilizando el protocolo IPv4.

Inicialmente, la tecnología SIT solo podía funcionar en el modo de túnel "IPv6 sobre IPv4". Sin embargo, a lo largo de los años de desarrollo, se ha ganado el apoyo de varios regímenes más. En particular, es ipip (lo mismo sucedió con el túnel IPIP), ip6ip , mplsip y any .

any modo se utiliza para trabajar con tráfico IP e IPv6, lo que puede ser útil en algunas situaciones. Los túneles SIT también son compatibles con ISATAP . Aquí hay un ejemplo del uso de esta tecnología.

El encabezado del paquete SIT se muestra a continuación.


Encabezado de paquete de túnel SIT

Cuando sit carga el módulo sit , el kernel de Linux crea el sit0 predeterminado sit0 .

Aquí se explica cómo crear un túnel SIT (estos pasos se deben realizar en los servidores A y 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


La interfaz ip6tnl funciona en modo IPv4 / IPv6 sobre IPv6. Es similar a la versión IPv6 del túnel SIT. Así es como se ve el encabezado del paquete ip6tnl.


Encabezado de paquete de túnel ip6tnl

Los túneles ip6tnl admiten ip6ip6 , ipip6 y any modo. El modo ipip6 representado por el esquema IPv4 sobre IPv6, el modo ip6ip6 es IPv6 sobre IPv6. any modo admite ambos esquemas.

Cuando se ip6tnl módulo ip6tnl , el kernel de Linux crea un dispositivo predeterminado llamado ip6tnl0 .

Aquí se explica cómo crear un túnel ip6tnl:

 # ip link add name ipip6 type ip6tnl local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR mode any 

VTI y VTI6


La interfaz Linux VTI (Virtual Tunnel Interface) es similar a la interfaz Cisco VTI y la implementación de Juniper de un túnel seguro (st.xx).

Este controlador de tunelización implementa la encapsulación de IP, que se puede usar con xfrm para crear túneles seguros y luego usar túneles de enrutamiento a nivel de núcleo sobre dichos túneles.

En general, los túneles VTI funcionan de manera muy similar a los túneles IPIP o SIT. La excepción es que usan fwmark e IPsec encapsulación / decapsulación.

VTI6 es el equivalente IPv6 de VTI.

Aquí se explica cómo crear un 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 

Además, IPsec se puede configurar usando libreswan o strongSwan .

GRE y GRETAP


La tecnología GRE (encapsulación de enrutamiento genérico) se describe en RFC 2784 . En la tunelización GRE, se agrega un encabezado GRE adicional entre los encabezados de los paquetes IP internos y externos.

Teóricamente, GRE puede encapsular paquetes de cualquier protocolo de Capa 3 con un tipo de Ethernet válido. Esto distingue la tecnología GRE de la tecnología IPIP, que solo admite la encapsulación de paquetes IP. Así es como se ve el encabezado del paquete cuando se utiliza la tecnología GRE.


Encabezado de paquete de túnel GRE

Tenga en cuenta que los túneles GRE permiten la compatibilidad con multidifusión e IPv6.

Al cargar el módulo gre , el kernel de Linux crea el gre0 predeterminado gre0 .

Aquí se explica cómo crear un túnel GRE:

 # ip link add name gre1 type gre local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR [seq] key KEY 

Mientras que los túneles GRE operan en la capa 3 de OSI, los túneles GRETAP operan en la capa 2 de OSI. Esto significa que uno de los encabezados internos de los paquetes respectivos es encabezados Ethernet.


Encabezado de paquete de túnel GRETAP

Aquí se explica cómo crear un túnel GRETAP:

 # ip link add name gretap1 type gretap local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR 

GRE6 y GRE6TAP


GRE6 es el equivalente IPv6 de GRE. Los túneles GRE6 le permiten encapsular cualquier protocolo de capa 3 en IPv6. Así es como se ve el encabezado del paquete GRE6.


Encabezado de paquete de túnel GRE6

En los túneles GRE6TAP, como en los túneles GRETAP, hay encabezados Ethernet entre los encabezados de paquetes internos.


Encabezado de paquete de túnel GRE6TAP

Aquí se explica cómo crear un 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


La tunelización se puede realizar en diferentes niveles de la pila de red. Los túneles IPIP, SIT y GRE existen en la capa IP. Y los túneles FOU (están dispuestos de acuerdo con el esquema "foo over UDP") operan a nivel UDP.

Existen algunas ventajas al usar el túnel UDP sobre el túnel IP. El hecho es que el protocolo UDP funciona con la infraestructura de hardware existente.

Por ejemplo, esto es RSS en tarjetas de red, ECMP en conmutadores, estas son tecnologías para calcular sumas de verificación sin la participación de un procesador central. La aplicación del parche FOU apropiado a los desarrolladores muestra un aumento significativo en el rendimiento de SIT e IPIP.

Actualmente, los túneles FOU admiten la encapsulación de protocolos basada en IPIP, SIT y GRE. Así es como se vería el encabezado de un paquete FOU.


Encabezado de paquete de túnel FOU

Aquí se explica cómo crear un 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 

El primer comando configura el puerto FOU de recepción para IPIP vinculado a 5555. Para usar GRE, debe usar ipproto 47 . El segundo comando configura la nueva interfaz virtual IPIP ( tun1 ), diseñada para la encapsulación FOU, cuyo puerto de destino es 5555.

Tenga en cuenta que los túneles FOU no son compatibles con Red Hat Enterprise Linux.

Gue


Otro tipo de túnel UDP es introducido por la tecnología GUE ( encapsulación UDP genérica ). La diferencia entre FOU y GUE es que GUE tiene su propio encabezado, que contiene información de protocolo y otros datos.

Los túneles GUE actualmente admiten la encapsulación interna de IPIP, SIT y GRE. Así es como se vería un encabezado de paquete GUE.


Encabezado de paquete de túnel GUE

Aquí se explica cómo crear un 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 

Gracias a estos comandos, se creará un puerto GUE receptor para IPIP vinculado al número 5555 y un túnel IPIP configurado para la encapsulación GUE.

Los túneles GUE no son compatibles con Red Hat Enterprise Linux.

GENEVE


Los túneles GENEVE (encapsulación de virtualización de red genérica) admiten todas las características de XLAN, NVGRE y STT. La tecnología GENEVE está diseñada para sortear las limitaciones identificadas de estas tres tecnologías. Muchos creen que esta tecnología es capaz, a largo plazo, de reemplazar por completo estos tres formatos más antiguos. Así es como se ve el encabezado del paquete de túnel GENEVE.


Encabezado de paquete de túnel GENEVE

Este encabezado es similar al encabezado de un paquete VXLAN . La principal diferencia entre los dos es que el encabezado GENEVE es más flexible. Hace que sea muy fácil implementar nuevas funciones al expandir los encabezados utilizando los campos Tipo-Longitud-Valor (TLV).

Los detalles sobre GENEVE se pueden encontrar aquí y aquí .

GENEVE se utiliza en la solución SDN de Red Virtual Abierta (OVN) como herramienta de encapsulación estándar. Aquí se explica cómo crear un túnel GENEVE:

 # ip link add name geneve0 type geneve id VNI remote REMOTE_IPv4_ADDR 

ERSPAN e IP6ERSPAN


La tecnología del Analizador de puertos conmutados remotos encapsulados (ERSPAN) utiliza encapsulación GRE para extender las capacidades básicas de duplicación de puertos de la capa 2 a la capa 3. Esto le permite reenviar tráfico reflejado a través de una red IP enrutada. Así es como se ve el encabezado del paquete ERSPAN.


Encabezado de paquete de túnel ERSPAN

Los túneles ERSPAN permiten que los hosts Linux actúen como una fuente de tráfico ERSPAN y envíen tráfico ERSPAN reflejado a un host remoto o a un destino ERSPAN que recibe y procesa los paquetes ERSPAN generados por los conmutadores Cisco u otros dispositivos que admiten ERSPAN. Se puede usar un sistema similar para analizar y diagnosticar la red, para detectar tráfico malicioso.

Linux actualmente admite la mayoría de las características de las dos versiones de ERSPAN: v1 (tipo II) y v2 (tipo III).

Aquí se explica cómo crear túneles ERSPAN:

 # ip link add dev erspan1 type erspan local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR seq key KEY erspan_ver 1 erspan IDX 

También puedes hacer esto:

 # 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 

Agregue un filtro tc para monitorear el tráfico:

 # 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 

Resumen


Hemos cubierto bastantes tecnologías de túnel en Linux aquí. Aquí hay una tabla resumen para ellos.

Túnel / Tipo de conexión
Encabezado exterior
Encabezado Encapsulado
Encabezado interno
ipip
IPv4
Ninguno
IPv4
sentarse
IPv4
Ninguno
IPv4 / IPv6
ip6tnl
IPv4
Ninguno
IPv4 / IPv6
vti
IPv4
IPsec
IPv4
vti6
IPv6
IPsec
IPv6
gre
IPv4
GRE
IPv4 / IPv6
gretap
IPv4
GRE
Ether + IPv4 / IPv6
gre6
IPv6
GRE
IPv4 / IPv6
gre6tap
IPv6
GRE
Ether + IPv4 / IPv6
fou
IPv4 / IPv6
UDP
IPv4 / IPv6 / GRE
gue
IPv4 / IPv6
UDP + GUE
IPv4 / IPv6 / GRE
Ginebra
IPv4 / IPv6
UDP + Geneve
Ether + IPv4 / IPv6
Erspan
IPv4
GRE + ERSPAN
IPv4 / IPv6
ip6erspan
IPv6
GRE + ERSPAN
IPv4 / IPv6

Tenga en cuenta que todos los túneles, cuyos ejemplos de creación se muestran aquí, existen solo hasta que se reinicia el servidor. Si desea crear un túnel que se recupere después de reiniciar, considere usar un demonio para configurar la red, como NetworkManager , o use el mecanismo apropiado de la distribución de Linux que está usando.

Estimados lectores! ¿Qué túneles de Linux usas?

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


All Articles