Présentation des interfaces virtuelles Linux: tunnels

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 IPIP

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

Lorsque 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 IP6TNL

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

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

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

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

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

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

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

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

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

Type de tunnel / connexion
En-tĂȘte externe
En-tĂȘte encapsulĂ©
En-tĂȘte intĂ©rieur
ipip
IPv4
Aucun
IPv4
s'asseoir
IPv4
Aucun
IPv4 / IPv6
ip6tnl
IPv4
Aucun
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
geneve
IPv4 / IPv6
UDP + Geneve
Ether + IPv4 / IPv6
erspan
IPv4
GRE + ERSPAN
IPv4 / IPv6
ip6erspan
IPv6
GRE + ERSPAN
IPv4 / IPv6

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?

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


All Articles