Linux/Tunnel: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
K Textersetzung - „Red Hat Enterprise Linux“ durch „Linux“ |
||
| (95 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
'''Linux/Tunnel''' - Linux Tunnelschnitstellen | |||
Linux | |||
== 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 <code>ip link help</code> abgerufen werden | |||
== | === Überblick === | ||
{| class="wikitable big" | |||
!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 | |||
[[File:ipip.png|500px]] | |||
''' | 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 <code>ipip</code>-Modul geladen wird oder ein IPIP-Gerät zum ersten Mal erstellt wird, erstellt der Linux-Kernel ein <code>tunl0</code>-Standardgerät in jedem Namensraum mit den Attributen <code>local=any</code> und <code>remote=any</code> | |||
:* Wenn der Kernel IPIP-Protokollpakete empfängt, leitet er sie an <code>tunl0</code> als Ausweichgerät weiter, wenn er kein anderes Gerät finden kann, dessen local/remote-Attribute besser zur Quell- oder Zieladresse passen | |||
; Erstellung eines IPIP-Tunnels | |||
Auf Server A | |||
# ip link add name ipip0 type ipip local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR | # ip link add name ipip0 type ipip local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR | ||
# ip link set ipip0 up | # ip link set ipip0 up | ||
# ip addr add INTERNAL_IPV4_ADDR/24 dev ipip0 | # 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 | # 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 add name ipip0 type ipip local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR | ||
# ip link set ipip0 up | # ip link set ipip0 up | ||
# ip addr add INTERNAL_IPV4_ADDR/24 dev ipip0 | # ip addr add INTERNAL_IPV4_ADDR/24 dev ipip0 | ||
# ip route add REMOTE_INTERNAL_SUBNET/24 dev ipip0 | # ip route add REMOTE_INTERNAL_SUBNET/24 dev ipip0 | ||
; Hinweis | |||
: Bitte ersetzen Sie <code>LOCAL_IPv4_ADDR</code>, <code>REMOTE_IPv4_ADDR</code>, <code>INTERNAL_IPV4_ADDR</code>, <code>REMOTE_INTERNAL_SUBNET</code> durch 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 <code>ipip</code> (gleichbedeutend mit IPIP-Tunnel), <code>ip6ip</code>, <code>mplsip</code>, und <code>any</code> | |||
* Der Modus <code>any</code> wird 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 | |||
[[File:sit.png|500px]] | |||
Wenn das <code>sit</code>-Modul geladen wird, erstellt der Linux-Kernel ein Standardgerät mit dem Namen <code>sit0</code> | |||
; 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 add name sit1 type sit local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR mode any | ||
# ip link set sit1 up | # ip link set sit1 up | ||
# ip addr add INTERNAL_IPV4_ADDR/24 dev sit1 | # ip addr add INTERNAL_IPV4_ADDR/24 dev sit1 | ||
== ip6tnl Tunnel == | Führen Sie dann die gleichen Schritte auf der entfernten Seite durch | ||
ip6tnl | |||
=== ip6tnl Tunnel === | |||
ip6tnl ist eine IPv4/IPv6 over IPv6-Tunnelschnittstelle, die wie eine IPv6-Version des SIT-Tunnels aussieht | |||
[[File:ip6tnl.png| | ; Tunnelheader | ||
[[File:ip6tnl.png|500px]] | |||
ip6tnl | ip6tnl unterstützt die Modi <code>ip6ip6</code>, <code>ipip6</code>, <code>any</code>. Modus <code>ipip6</code> ist IPv4 über IPv6, und Modus <code>ip6ip6</code> ist IPv6 über IPv6, und Modus <code>any</code> unterstützt sowohl IPv4/IPv6 über IPv6 | ||
Wenn das <code>ip6tnl</code>-Modul geladen wird, erstellt der Linux-Kernel ein Standardgerät mit dem Namen <code>ip6tnl0</code> | |||
; Erstellung eines ip6tnl-Tunnels | |||
# ip link add name ipip6 type ip6tnl local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR mode any | # ip link add name ipip6 type ip6tnl local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR mode any | ||
== VTI | === VTI und VTI6 === | ||
Virtual Tunnel Interface (VTI) | 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 | 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 add name vti1 type vti key VTI_KEY local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR | ||
# ip link set vti1 up | # ip link set vti1 up | ||
| Zeile 90: | Zeile 185: | ||
# 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 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 | # ip xfrm policy add dir out tmpl src LOCAL_IPv4_ADDR dst REMOTE_IPv4_ADDR PROTO mode tunnel mark VTI_KEY | ||
== GRE | Sie können IPsec auch über libreswan oder strongSwan konfigurieren | ||
Generic Routing Encapsulation, | |||
=== GRE und GRETAP === | |||
Generic Routing Encapsulation, auch bekannt als GRE, ist definiert in <nowiki>RFC 2784</nowiki> | |||
GRE | 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 | |||
[[File:gre.png|600px]] | [[File:gre.png|600px]] | ||
Beachten Sie, dass Sie Multicast-Verkehr und IPv6 durch einen GRE-Tunnel transportieren können | |||
Wenn das Modul <code>gre</code> geladen wird, erstellt der Linux-Kernel ein Standardgerät mit dem Namen <code>gre0</code> | |||
; Erstellung eines GRE-Tunnels | |||
# ip link add name gre1 type gre local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR [seq] key KEY | # 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 | |||
[[ | [[Datei:gretap.png|700px]] | ||
; Erstellung eines GRETAP-Tunnels | |||
# ip link add name gretap1 type gretap local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR | # ip link add name gretap1 type gretap local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR | ||
== IP6GRE | === IP6GRE und IP6GRETAP === | ||
IP6GRE | IP6GRE ist das IPv6-Äquivalent von GRE, das es uns ermöglicht, jedes Schicht-3-Protokoll über IPv6 zu kapseln | ||
[[File:gre6.png| | ; Tunnelheader | ||
[[File:gre6.png|700px]] | |||
IP6GRETAP, | IP6GRETAP hat, genau wie GRETAP, einen Ethernet-Header im inneren Header: | ||
[[File:gre6tap.png| | [[File:gre6tap.png|700px]] | ||
; Erstellung eines GRE-Tunnels | |||
# ip link add name gre1 type ip6gre local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR | # 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 | # ip link add name gretap1 type ip6gretap local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR | ||
== FOU == | === FOU === | ||
Tunneling | 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 | |||
[[File:fou.png|600px]] | [[File:fou.png|600px]] | ||
; Erstellung eines FOU-Tunnels | |||
# ip fou add port 5555 ipproto 4 | # 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 | # 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 <code>ipproto 47</code> 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 | |||
[[File:gue.png|600px]] | [[File:gue.png|600px]] | ||
; Erstellung eines GUE-Tunnels | |||
# ip fou add port 5555 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 | # 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 == | === GENEVE === | ||
Generic Network Virtualization Encapsulation (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 | |||
[[File:geneve.png|600px]] | [[File:geneve.png|600px]] | ||
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) | 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 | # ip link add name geneve0 type geneve id VNI remote REMOTE_IPv4_ADDR | ||
== ERSPAN | === ERSPAN und IP6ERSPAN === | ||
Encapsulated Remote Switched Port Analyzer (ERSPAN) | 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 | ||
[[Datei:erspan.png|700px]] | |||
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 | 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 | # 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 | # 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 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 | # tc filter add dev MONITOR_DEV parent ffff: matchall skip_hw action mirred egress mirror dev erspan1 | ||
== | == Konfiguration == | ||
=== Dateien === | |||
<noinclude> | |||
== Anhang == | |||
=== Siehe auch === | |||
{{Special:PrefixIndex/{{BASEPAGENAME}}/}} | |||
---- | |||
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 | |||
[[Kategorie:Linux/Tunnel]] | |||
</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