Linux/Tunnel: Unterschied zwischen den Versionen
K Textersetzung - „===== Info-Pages =====“ durch „;Info-Page“ |
K Textersetzung - „Red Hat Enterprise Linux“ durch „Linux“ |
||
| (7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 14: | Zeile 14: | ||
=== Überblick === | === Überblick === | ||
{| class="wikitable" | {| class="wikitable big" | ||
!Tunnel/Link Typ | !Tunnel/Link Typ | ||
!Äußerer Header | !Äußerer Header | ||
| Zeile 244: | Zeile 244: | ||
; '''Hinweis''' | ; '''Hinweis''' | ||
: FOU wird in | : FOU wird in Linux nicht unterstützt | ||
=== GUE === | === GUE === | ||
| Zeile 261: | Zeile 261: | ||
; Hinweis | ; Hinweis | ||
: GUE wird in | : GUE wird in Linux nicht unterstützt | ||
=== GENEVE === | === GENEVE === | ||
| Zeile 307: | Zeile 307: | ||
== Anhang == | == Anhang == | ||
=== Siehe auch === | === Siehe auch === | ||
{{Special:PrefixIndex/{{BASEPAGENAME}}}} | {{Special:PrefixIndex/{{BASEPAGENAME}}/}} | ||
---- | ---- | ||
ip link help | ip link help | ||
=== Dokumentation === | |||
; Man-Page | ; Man-Page | ||
;Info-Page | ;Info-Page | ||
=== Links === | |||
==== Projekt ==== | |||
==== Weblinks ==== | |||
# https://developers.redhat.com/blog/2019/05/17/an-introduction-to-linux-virtual-interfaces-tunnels | # https://developers.redhat.com/blog/2019/05/17/an-introduction-to-linux-virtual-interfaces-tunnels | ||
# https://developers.redhat.com/blog/2018/10/22/introduction-to-linux-interfaces-for-virtual-networking | # https://developers.redhat.com/blog/2018/10/22/introduction-to-linux-interfaces-for-virtual-networking | ||
[[Kategorie:Linux/ | [[Kategorie:Linux/Tunnel]] | ||
</noinclude> | </noinclude> | ||
Aktuelle Version vom 22. März 2026, 11:37 Uhr
Linux/Tunnel - Linux Tunnelschnitstellen
Beschreibung
Virtuelle Schnittstellen
- Linux unterstützt viele Arten von Tunneln
Einführung in die häufig verwendeten Tunnelschnittstellen im Linux-Kernel
- was Schnittstellen sind
- welche Unterschiede es gibt
- wann sie verwendet werden
- wie man sie erstellt
- welche für einen bestimmten Anwendungsfall geeignet ist
Eine Liste der Tunnelschnittstellen sowie Hilfe zur spezifischen Tunnelkonfiguration kann mit dem Befehl iproute2 ip link help abgerufen werden
Überblick
| Tunnel/Link Typ | Äußerer Header | Encapsulate Header | Innerer Header |
|---|---|---|---|
| ipip | IPv4 | Keine | IPv4 |
| sit | IPv4 | Keine | IPv4/IPv6 |
| ip6tnl | IPv6 | Keine | IPv4/IPv6 |
| vti | IPv4 | IPsec | IPv4 |
| vti6 | IPv6 | IPsec | IPv6 |
| gre | IPv4 | GRE | IPv4/IPv6 |
| gretap | IPv4 | GRE | Ether + IPv4/IPv6 |
| ip6gre | IPv6 | GRE | IPv4/IPv6 |
| ip6gretap | 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 |
- Hinweis
- Konfigurationen in diesem Artikel sind flüchtig
- Gehen bei einen Server-Neustart verloren
- Soll die Konfiguration nach einem Neustarts erhalten bleiben, können Netzwerkkonfigurationsdämonen wie NetworkManager oder distributionsspezifische Mechanismen verwendet werden
Anwendung
IPIP-Tunnel
IPIP-Tunnel ist ein IP-over-IP-Tunnel (RFC 2003)
- Tunnelheader
Er wird typischerweise verwendet, um zwei interne IPv4-Subnetze über das öffentliche IPv4-Internet zu verbinden
- Er hat den geringsten Overhead, kann aber nur IPv4-Unicast-Verkehr übertragen
- Das bedeutet, dass Sie nicht Multicast über IPIP-Tunnel senden können
IPIP-Tunnel unterstützt sowohl IP über IP als auch MPLS über IP
- Hinweis
- Wenn das
ipip-Modul geladen wird oder ein IPIP-Gerät zum ersten Mal erstellt wird, erstellt der Linux-Kernel eintunl0-Standardgerät in jedem Namensraum mit den Attributenlocal=anyundremote=any- Wenn der Kernel IPIP-Protokollpakete empfängt, leitet er sie an
tunl0als Ausweichgerät weiter, wenn er kein anderes Gerät finden kann, dessen local/remote-Attribute besser zur Quell- oder Zieladresse passen
- Wenn der Kernel IPIP-Protokollpakete empfängt, leitet er sie an
- Erstellung eines IPIP-Tunnels
Auf Server 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
Hinzufügen einer entfernten internen Subnetz-Route, wenn die Endpunkte nicht zum selben Subnetz gehören
# ip route add REMOTE_INTERNAL_SUBNET/24 dev ipip0
Auf Server 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
- Hinweis
- Bitte ersetzen Sie
LOCAL_IPv4_ADDR,REMOTE_IPv4_ADDR,INTERNAL_IPV4_ADDR,REMOTE_INTERNAL_SUBNETdurch die Adressen, die Ihrer Testumgebung entsprechen- Dasselbe gilt für die folgenden Beispielkonfigurationen
SIT-Tunnel
SIT steht für Simple Internet Transition
- Das Hauptzweck besteht darin, isolierte IPv6-Netze, die sich im globalen IPv4-Internet befinden, miteinander zu verbinden
Ursprünglich hatte es nur einen IPv6-über-IPv4-Tunneling-Modus
- Nach jahrelanger Entwicklung wurden jedoch verschiedene Modi unterstützt, wie
ipip(gleichbedeutend mit IPIP-Tunnel),ip6ip,mplsip, undany - Der Modus
anywird verwendet, um sowohl IP- als auch IPv6-Verkehr zu akzeptieren, was sich bei einigen Einsätzen als nützlich erweisen kann - Der SIT-Tunnel unterstützt auch ISATA, und hier ist ein Anwendungsbeispiel
- Tunnelheader
Wenn das sit-Modul geladen wird, erstellt der Linux-Kernel ein Standardgerät mit dem Namen sit0
- Erstellung eines SIT-Tunnels
Auf Server A
# 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
Führen Sie dann die gleichen Schritte auf der entfernten Seite durch
ip6tnl Tunnel
ip6tnl ist eine IPv4/IPv6 over IPv6-Tunnelschnittstelle, die wie eine IPv6-Version des SIT-Tunnels aussieht
- Tunnelheader
ip6tnl unterstützt die Modi ip6ip6, ipip6, any. Modus ipip6 ist IPv4 über IPv6, und Modus ip6ip6 ist IPv6 über IPv6, und Modus any unterstützt sowohl IPv4/IPv6 über IPv6
Wenn das ip6tnl-Modul geladen wird, erstellt der Linux-Kernel ein Standardgerät mit dem Namen ip6tnl0
- Erstellung eines ip6tnl-Tunnels
# ip link add name ipip6 type ip6tnl local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR mode any
VTI und VTI6
Virtual Tunnel Interface (VTI) unter Linux ist ähnlich wie Ciscos VTI und Junipers Implementierung von Secure Tunnel (st.xx)
Dieser spezielle Tunneltreiber implementiert IP-Kapselungen, die mit xfrm verwendet werden können, um den Eindruck eines sicheren Tunnels zu erwecken und dann Kernel-Routing zu verwenden
Im Allgemeinen funktionieren VTI-Tunnel fast genauso wie ipip- oder sit-Tunnel, mit dem Unterschied, dass sie ein fwmark und IPsec-Kapselung/Dekapselung hinzufügen
VTI6 ist das IPv6-Äquivalent von VTI
- Erstellung eines VTI-Tunnels
# 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
Sie können IPsec auch über libreswan oder strongSwan konfigurieren
GRE und GRETAP
Generic Routing Encapsulation, auch bekannt als GRE, ist definiert in RFC 2784
GRE-Tunneling fügt einen zusätzlichen GRE-Header zwischen den inneren und äußeren IP-Header ein
- Theoretisch kann GRE jedes Layer-3-Protokoll mit einem gültigen Ethernet-Typ einkapseln, im Gegensatz zu IPIP, das nur IP einkapseln kann
- Tunnelheader
Beachten Sie, dass Sie Multicast-Verkehr und IPv6 durch einen GRE-Tunnel transportieren können
Wenn das Modul gre geladen wird, erstellt der Linux-Kernel ein Standardgerät mit dem Namen gre0
- Erstellung eines GRE-Tunnels
# ip link add name gre1 type gre local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR [seq] key KEY
Während GRE-Tunnel auf OSI-Schicht 3 arbeiten, arbeitet GRETAP auf OSI-Schicht 2, was bedeutet, dass ein Ethernet-Header im inneren Header vorhanden ist
- Erstellung eines GRETAP-Tunnels
# ip link add name gretap1 type gretap local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR
IP6GRE und IP6GRETAP
IP6GRE ist das IPv6-Äquivalent von GRE, das es uns ermöglicht, jedes Schicht-3-Protokoll über IPv6 zu kapseln
- Tunnelheader
IP6GRETAP hat, genau wie GRETAP, einen Ethernet-Header im inneren Header:
- Erstellung eines GRE-Tunnels
# ip link add name gre1 type ip6gre local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR # ip link add name gretap1 type ip6gretap local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR
FOU
Tunneling kann auf mehreren Ebenen des Netzwerkstapels stattfinden
- IPIP-, SIT- und GRE-Tunnel sind auf der IP-Ebene angesiedelt, während FOU (foo over UDP) ein Tunneling auf UDP-Ebene ist
Es gibt einige Vorteile bei der Verwendung von UDP-Tunneln, da UDP mit der bestehenden HW-Infrastruktur zusammenarbeitet, wie RSS in NICs, ECMP in Switches und Prüfsummen-Offload
- Das Patch-Set des Entwicklers zeigt erhebliche Leistungssteigerungen für die Protokolle SIT und IPIP
Derzeit unterstützt der FOU-Tunnel Encapsulation-Protokolle, die auf IPIP, SIT und GRE basieren
- Tunnelheader
- Erstellung eines FOU-Tunnels
# 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
Der erste Befehl konfiguriert einen FOU-Empfangsport für IPIP, der an 5555 gebunden ist; für GRE müssen Sie ipproto 47 einstellen
- Der zweite Befehl richtet eine neue virtuelle IPIP-Schnittstelle (tun1) ein, die für FOU-Kapselung konfiguriert ist, mit dem Zielport 5555
- Hinweis
- FOU wird in Linux nicht unterstützt
GUE
Generic UDP Encapsulation (GUE) ist eine weitere Art von UDP-Tunneling
- Der Unterschied zwischen FOU und GUE besteht darin, dass GUE einen eigenen Encapsulation Header hat, der die Protokollinformationen und andere Daten enthält
Derzeit unterstützt GUE-Tunnel die innere IPIP-, SIT- und GRE-Kapselung
- Tunnelheader
- Erstellung eines GUE-Tunnels
# 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
Dies richtet einen GUE-Empfangs-Port für IPIP ein, der an 5555 gebunden ist, und einen IPIP-Tunnel, der für GUE-Kapselung konfiguriert ist
- Hinweis
- GUE wird in Linux nicht unterstützt
GENEVE
Generic Network Virtualization Encapsulation (GENEVE) unterstützt alle Funktionen von VXLAN, NVGRE und STT und wurde entwickelt, um deren vermeintliche Einschränkungen zu überwinden.
- Viele glauben, dass GENEVE diese früheren Formate irgendwann vollständig ersetzen könnte.
- Tunnelheader
das VXLAN sehr ähnlich sieht
- Der Hauptunterschied besteht darin, dass der GENEVE-Header flexibel ist.
- Es ist sehr einfach, neue Funktionen hinzuzufügen, indem man den Header mit einem neuen Type-Length-Value (TLV) Feld erweitert.
- Weitere Einzelheiten finden Sie im neuesten GENEVE-ietf-Entwurf oder in diesem Artikel Was ist GENEVE?
Open Virtual Network (OVN) verwendet GENEVE als Standardkapselung
- Erstellung eines GENEVE-Tunnels
# ip link add name geneve0 type geneve id VNI remote REMOTE_IPv4_ADDR
ERSPAN und IP6ERSPAN
Encapsulated Remote Switched Port Analyzer (ERSPAN) verwendet GRE-Kapselung, um die grundlegende Port-Spiegelungsfunktion von Layer 2 auf Layer 3 zu erweitern, wodurch der gespiegelte Verkehr durch ein routingfähiges IP-Netzwerk gesendet werden kann
- Tunnelheader
Der ERSPAN-Tunnel ermöglicht es einem Linux-Host, als ERSPAN-Verkehrsquelle zu fungieren und den gespiegelten ERSPAN-Verkehr entweder an einen entfernten Host oder an ein ERSPAN-Ziel zu senden, das die von Cisco- oder anderen ERSPAN-fähigen Switches generierten ERSPAN-Pakete empfängt und analysiert
- Diese Einrichtung kann zur Analyse, Diagnose und Erkennung von bösartigem Datenverkehr verwendet werden
Linux unterstützt derzeit die meisten Funktionen von zwei ERSPAN-Versionen: v1 (Typ II) und v2 (Typ III)
- Erstellung eines ERSPAN-Tunnels
# ip link add dev erspan1 type erspan local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR seq key KEY erspan_ver 1 erspan IDX oder # 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
tc-Filter zur Überwachung des Datenverkehrs hinzufügen # 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
Konfiguration
Dateien
Anhang
Siehe auch
ip link help
Dokumentation
- Man-Page
- Info-Page
Links
Projekt
Weblinks
- https://developers.redhat.com/blog/2019/05/17/an-introduction-to-linux-virtual-interfaces-tunnels
- https://developers.redhat.com/blog/2018/10/22/introduction-to-linux-interfaces-for-virtual-networking