Linux/Tunnel: Unterschied zwischen den Versionen
K Textersetzung - „Red Hat Enterprise Linux“ durch „Linux“ |
|||
| (109 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
'''Linux/Tunnel''' - Linux Tunnelschnitstellen | |||
== | == Beschreibung == | ||
Linux | === 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 | |||
== | |||
== | |||
{| class="wikitable" | |||
!Tunnel/Link | |||
! | |||
!Encapsulate Header | !Encapsulate Header | ||
! | !Innerer Header | ||
|- | |- | ||
|ipip | |ipip | ||
|IPv4 | |IPv4 | ||
| | |Keine | ||
|IPv4 | |IPv4 | ||
|- | |- | ||
|sit | |sit | ||
|IPv4 | |IPv4 | ||
| | |Keine | ||
|IPv4/IPv6 | |IPv4/IPv6 | ||
|- | |- | ||
|ip6tnl | |ip6tnl | ||
|IPv6 | |IPv6 | ||
| | |Keine | ||
|IPv4/IPv6 | |IPv4/IPv6 | ||
|- | |- | ||
| Zeile 246: | Zeile 91: | ||
|} | |} | ||
; 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 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 <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 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 | |||
[[File:ip6tnl.png|500px]] | |||
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 | |||
=== 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 <nowiki>RFC 2784</nowiki> | |||
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]] | |||
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 | |||
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 | |||
=== IP6GRE und IP6GRETAP === | |||
IP6GRE ist das IPv6-Äquivalent von GRE, das es uns ermöglicht, jedes Schicht-3-Protokoll über IPv6 zu kapseln | |||
; Tunnelheader | |||
[[File:gre6.png|700px]] | |||
IP6GRETAP hat, genau wie GRETAP, einen Ethernet-Header im inneren Header: | |||
[[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 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 | |||
[[File:fou.png|600px]] | |||
; 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 <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]] | |||
; 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 | |||
[[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) 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 | |||
[[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 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 === | |||
<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/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