Linux prend en charge de nombreux types de tunnels. Cela confond les débutants qui ont du mal à comprendre les différences technologiques et à comprendre quel tunnel est préférable d'utiliser dans une situation particuliÚre. Le matériel, dont nous publions la traduction aujourd'hui, donnera un bref aperçu des interfaces de tunnel couramment utilisées du noyau Linux. Nous ne nous pencherons pas en profondeur sur ce sujet, en considérant uniquement les caractéristiques générales des tunnels et les options pour leur utilisation sous Linux.

L'auteur de ce document estime que ce qui sera discutĂ© ici peut intĂ©resser tous ceux qui ont quelque chose Ă voir avec la gestion des rĂ©seaux informatiques. La liste des interfaces de tunnel, ainsi que des informations de rĂ©fĂ©rence sur une configuration spĂ©cifique, peuvent ĂȘtre obtenues Ă l'
ip link help
commande d'
ip link help
iproute2
ip link help
.
Les interfaces couramment utilisées suivantes seront couvertes ici: IPIP, SIT, ip6tnl, VTI et VTI6, GRE et GRETAP, GRE6 et GRE6TAP, FOU, GUE, GENEVE, ERSPAN et IP6ERSPAN.
AprÚs avoir lu cet article, vous découvrirez les fonctionnalités de ces interfaces et découvrirez les différences entre elles. Vous apprendrez comment les créer et découvrirez les situations dans lesquelles ils sont le mieux utilisés.
IPIP
Le tunnel IPIP, comme son nom l'indique, est un tunnel fonctionnant en mode IP sur IP (
RFC 2003 ). L'en-tĂȘte de paquet de tunnel IPIP est comme indiquĂ© ci-dessous.
En-tĂȘte de paquet de tunnel IPIPCes tunnels sont couramment utilisĂ©s pour connecter deux sous-rĂ©seaux IPv4 internes sur un rĂ©seau IPv4 public (Internet). L'utilisation d'IPIP crĂ©e une charge supplĂ©mentaire minimale sur le systĂšme, mais seule la transmission de donnĂ©es unidirectionnelle (unicast) peut ĂȘtre effectuĂ©e sur un tel tunnel. Autrement dit, aprĂšs avoir construit un tel tunnel, il ne sera pas possible de l'utiliser pour la transmission de donnĂ©es de multidiffusion.
Les tunnels IPIP prennent en charge les modes IP sur IP et MPLS sur IP.
Veuillez noter que lorsque le module ipip est chargé, ou lorsque le périphérique IPIP est créé pour la premiÚre fois, le noyau Linux créera un périphérique
tunl0
par défaut dans chaque espace de noms avec les attributs
local=any
et
remote=any
. Lors de la réception de paquets IPIP, le noyau, dans certains cas, les redirigera vers
tunl0
comme périphérique par défaut. Cela se produit lorsque le noyau ne peut pas trouver un autre périphérique dont
local/remote
attributs
local/remote
plus étroitement aux adresses source et de destination des paquets.
Voici comment créer un tunnel IPIP:
Sur le serveur 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
Sur le serveur 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
Veuillez noter que lorsque vous utilisez cette configuration, elle doit ĂȘtre alignĂ©e sur des donnĂ©es rĂ©elles. En particulier,
LOCAL_IPv4_ADDR
,
REMOTE_IPv4_ADDR
,
INTERNAL_IPV4_ADDR
et
REMOTE_INTERNAL_SUBNET
doivent ĂȘtre remplacĂ©s par les adresses utilisĂ©es dans votre environnement. Il en va de mĂȘme pour d'autres exemples de configurations, que nous considĂ©rerons plus loin.
S'asseoir
SIT (Simple Internet Transition) est une technologie de tunneling dont le but principal est de connecter des réseaux IPv6 isolés via Internet en utilisant le protocole IPv4.
Initialement, la technologie SIT ne pouvait fonctionner qu'en mode de tunneling «IPv6 sur IPv4». Cependant, au fil des années de développement, il a gagné le soutien de plusieurs autres régimes. En particulier, c'est
ipip
(la mĂȘme chose s'est produite avec le tunnel IPIP),
ip6ip
,
mplsip
et
any
.
any
mode est utilisĂ© pour fonctionner avec le trafic IP et IPv6, ce qui peut ĂȘtre utile dans certaines situations. Les tunnels SIT prennent Ă©galement en charge
ISATAP . Voici
un exemple d' utilisation de cette technologie.
L'en-tĂȘte du paquet SIT est comme indiquĂ© ci-dessous.
En-tĂȘte de paquet de tunnel SITLorsque le module
sit
charge, le noyau Linux crée le
sit0
par défaut
sit0
.
Voici comment crĂ©er un tunnel SIT (ces Ă©tapes doivent ĂȘtre effectuĂ©es sur les serveurs A et 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
L'interface ip6tnl fonctionne en mode IPv4 / IPv6 sur IPv6. Elle est similaire Ă la version IPv6 du tunnel SIT. Voici Ă quoi ressemble l'en-tĂȘte du package ip6tnl.
En-tĂȘte de paquet de tunnel IP6TNLLes tunnels IP6tnl prennent en charge
ip6ip6
,
ipip6
et
any
modes. Le mode
ipip6
représenté par le schéma IPv4 sur IPv6, le mode
ip6ip6
est IPv6 sur IPv6.
any
mode prend en charge les deux schémas.
Lorsque le module
ip6tnl
, le noyau Linux crée un périphérique par défaut appelé
ip6tnl0
.
Voici comment créer un tunnel ip6tnl:
# ip link add name ipip6 type ip6tnl local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR mode any
VTI et VTI6
L'interface Linux VTI (Virtual Tunnel Interface) est similaire à l'interface Cisco VTI et à l'implémentation Juniper d'un tunnel sécurisé (st.xx).
Ce pilote de tunneling implĂ©mente l'encapsulation IP, qui peut ĂȘtre utilisĂ©e avec xfrm pour crĂ©er des tunnels sĂ©curisĂ©s, puis utiliser des tunnels de routage au niveau du noyau sur ces tunnels.
En général, les tunnels VTI fonctionnent un peu comme les tunnels IPIP ou SIT. L'exception est qu'ils utilisent l'encapsulation / décapsulation fwmark et IPsec.
VTI6 est l'équivalent IPv6 de VTI.
Voici comment créer un tunnel 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
De plus, IPsec peut ĂȘtre configurĂ© Ă l'aide de
libreswan ou
strongSwan .
GRE et GRETAP
La technologie GRE (Generic Routing Encapsulation) est décrite dans la
RFC 2784 . Dans le tunneling GRE, un en-tĂȘte GRE supplĂ©mentaire est ajoutĂ© entre les en-tĂȘtes des paquets IP internes et externes.
ThĂ©oriquement, GRE peut encapsuler des paquets de n'importe quel protocole de couche 3 avec un type Ethernet valide. Cela distingue la technologie GRE de la technologie IPIP, qui ne prend en charge que l'encapsulation des paquets IP. Voici Ă quoi ressemble l'en-tĂȘte du package lors de l'utilisation de la technologie GRE.
En-tĂȘte de paquet tunnel GREVeuillez noter que les tunnels GRE permettent la prise en charge de la multidiffusion et IPv6.
Lors du chargement du module
gre
, le noyau Linux crée le
gre0
par défaut
gre0
.
Voici comment créer un tunnel GRE:
# ip link add name gre1 type gre local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR [seq] key KEY
Alors que les tunnels GRE fonctionnent sur la couche 3 OSI, les tunnels GRETAP fonctionnent sur la couche 2 OSI. Cela signifie que l'un des en-tĂȘtes internes des paquets respectifs est un en-tĂȘte Ethernet.
En-tĂȘte de paquet de tunnel GRETAPVoici comment crĂ©er un tunnel GRETAP:
# ip link add name gretap1 type gretap local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR
GRE6 et GRE6TAP
GRE6 est l'Ă©quivalent IPv6 de GRE. Les tunnels GRE6 vous permettent d'encapsuler n'importe quel protocole de couche 3 dans IPv6. Voici Ă quoi ressemble l'en-tĂȘte du package GRE6.
En-tĂȘte de paquet de tunnel GRE6Dans les tunnels GRE6TAP, comme dans les tunnels GRETAP, il existe des en-tĂȘtes Ethernet parmi les en-tĂȘtes de paquets internes.
En-tĂȘte de paquet de tunnel GRE6TAPVoici comment crĂ©er un tunnel 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
Le tunneling peut ĂȘtre effectuĂ© Ă diffĂ©rents niveaux de la pile rĂ©seau. Les tunnels IPIP, SIT et GRE existent au niveau de la couche IP. Et les tunnels FOU (ils sont disposĂ©s selon le schĂ©ma «foo over UDP») fonctionnent au niveau UDP.
Il existe certains avantages à utiliser le tunneling UDP sur le tunnelage IP. Le fait est que le protocole UDP fonctionne avec l'infrastructure matérielle existante.
Par exemple, c'est
RSS dans les cartes réseau,
ECMP dans les commutateurs, ce sont des technologies pour calculer les sommes de contrĂŽle sans la participation d'un processeur central. L'application du
correctif FOU approprié aux développeurs montre une augmentation significative des performances pour SIT et IPIP.
Actuellement, les tunnels FOU prennent en charge l'encapsulation de protocole basĂ©e sur IPIP, SIT et GRE. Voici Ă quoi pourrait ressembler l'en-tĂȘte d'un package FOU.
En-tĂȘte de l'ensemble de tunnels FOUVoici comment crĂ©er un tunnel 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
La premiÚre commande configure le port de réception FOU pour IPIP lié à 5555. Pour utiliser GRE, vous devez utiliser
ipproto 47
. La deuxiĂšme commande configure la nouvelle interface IPIP virtuelle (
tun1
), conçue pour l'encapsulation FOU, dont le port cible est 5555.
Veuillez noter que les tunnels FOU ne sont pas pris en charge sur Red Hat Enterprise Linux.
Gue
Un autre type de tunneling UDP est introduit par la technologie GUE (
Generic UDP Encapsulation ). La diffĂ©rence entre FOU et GUE est que GUE a son propre en-tĂȘte, qui contient des informations de protocole et d'autres donnĂ©es.
Les tunnels GUE prennent actuellement en charge l'encapsulation interne d'IPIP, SIT et GRE. Voici Ă quoi pourrait ressembler un en-tĂȘte de package GUE.
En-tĂȘte de package de tunnel GUEVoici comment crĂ©er un tunnel 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
Grùce à ces commandes, un port GUE de réception pour IPIP lié au numéro 5555 et un tunnel IPIP configuré pour l'encapsulation GUE seront créés.
Les tunnels GUE ne sont pas pris en charge sur Red Hat Enterprise Linux.
GENEVE
Les tunnels GENEVE (Generic Network Virtualization Encapsulation) prennent en charge toutes les fonctionnalitĂ©s de XLAN, NVGRE et STT. La technologie GENEVE est conçue pour contourner les limites identifiĂ©es de ces trois technologies. Beaucoup pensent que cette technologie est capable, Ă long terme, de remplacer complĂštement ces trois anciens formats. Voici Ă quoi ressemble l'en-tĂȘte du paquet de tunnel GENEVE.
En-tĂȘte de paquet de tunnel GENEVECet en-tĂȘte est similaire Ă l'en-tĂȘte d'un paquet
VXLAN . La principale diffĂ©rence entre les deux est que l'en-tĂȘte GENEVE est plus flexible. Il facilite l'implĂ©mentation de nouvelles fonctionnalitĂ©s en dĂ©veloppant les en-tĂȘtes Ă l'aide des champs TLV (Type-Length-Value).
Des dĂ©tails sur GENEVE peuvent ĂȘtre trouvĂ©s
ici et
ici .
GENEVE est utilisé dans la solution SDN
Open Virtual Network (OVN) comme outil d'encapsulation standard. Voici comment créer un tunnel GENEVE:
# ip link add name geneve0 type geneve id VNI remote REMOTE_IPv4_ADDR
ERSPAN et IP6ERSPAN
La technologie ERSPAN (Encapsulated Remote Switched Port Analyzer) utilise l'encapsulation GRE pour Ă©tendre les capacitĂ©s de base de la mise en miroir des ports de la couche 2 Ă la couche 3. Cela vous permet de transfĂ©rer le trafic en miroir sur un rĂ©seau IP routĂ©. Voici Ă quoi ressemble l'en-tĂȘte du package ERSPAN.
En-tĂȘte de package de tunnel ERSPANLes tunnels ERSPAN permettent aux hĂŽtes Linux d'agir en tant que source de trafic ERSPAN et d'envoyer du trafic ERSPAN en miroir soit vers un hĂŽte distant, soit vers une destination ERSPAN qui reçoit et traite les paquets ERSPAN gĂ©nĂ©rĂ©s par les commutateurs Cisco ou d'autres pĂ©riphĂ©riques prenant en charge ERSPAN. Un systĂšme similaire peut ĂȘtre utilisĂ© pour analyser et diagnostiquer le rĂ©seau, pour dĂ©tecter le trafic malveillant.
Linux prend actuellement en charge la plupart des fonctionnalités des deux versions d'ERSPAN - v1 (type II) et v2 (type III).
Voici comment créer des tunnels ERSPAN:
# ip link add dev erspan1 type erspan local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR seq key KEY erspan_ver 1 erspan IDX
Vous pouvez également le faire:
# 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
Ajoutez un filtre tc pour surveiller le trafic:
# 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
Résumé
Nous avons couvert pas mal de technologies de tunneling sous Linux ici. Voici un tableau récapitulatif pour eux.
Veuillez noter que tous les tunnels, dont les exemples de création sont présentés ici, n'existent que jusqu'au redémarrage du serveur. Si vous souhaitez créer un tunnel qui se rétablit aprÚs le redémarrage, envisagez d'utiliser un démon pour configurer le réseau, comme
NetworkManager , ou utilisez le mécanisme approprié de la distribution Linux que vous utilisez.
Chers lecteurs! Quels tunnels Linux utilisez-vous?