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 IPIPTales 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 SITCuando
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 ip6tnlLos 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 GRETenga 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 GRETAPAquí 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 GRE6En 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 GRE6TAPAquí 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 FOUAquí 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 GUEAquí 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 GENEVEEste 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 ERSPANLos 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.
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?