Linux/Tunnel: Unterschied zwischen den Versionen
(51 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
''' | '''Linux/Tunnel''' - Linux Tunnelschnitstellen | ||
== Beschreibung == | == Beschreibung == | ||
=== Virtuelle Schnittstellen === | === Virtuelle Schnittstellen === | ||
; | ; Linux unterstützt viele Arten von Tunneln | ||
Linux | 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 === | === Überblick === | ||
Zeile 90: | Zeile 92: | ||
; Hinweis | ; 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 == | == Anwendung == | ||
=== IPIP-Tunnel === | === IPIP-Tunnel === | ||
IPIP-Tunnel ist | 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 wird typischerweise verwendet, um zwei interne IPv4-Subnetze über das öffentliche IPv4-Internet zu verbinden | ||
Zeile 116: | Zeile 109: | ||
IPIP-Tunnel unterstützt sowohl IP über IP als auch MPLS über IP | IPIP-Tunnel unterstützt sowohl IP über IP als auch MPLS über IP | ||
; Hinweis | |||
* 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 | : 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 | 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 | 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 | ||
Zeile 133: | Zeile 128: | ||
# ip route add REMOTE_INTERNAL_SUBNET/24 dev ipip0 | # ip route add REMOTE_INTERNAL_SUBNET/24 dev ipip0 | ||
; Hinweis | |||
* Dasselbe gilt für die folgenden Beispielkonfigurationen | : 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 | SIT steht für Simple Internet Transition | ||
* Das Hauptzweck besteht darin, isolierte IPv6-Netze, die sich im globalen IPv4-Internet befinden, miteinander zu verbinden | * 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 | Ursprünglich hatte es nur einen IPv6-über-IPv4-Tunneling-Modus | ||
Zeile 147: | Zeile 141: | ||
* Der SIT-Tunnel unterstützt auch ISATA, und hier ist ein Anwendungsbeispiel | * 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> | 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 | ||
Zeile 161: | Zeile 156: | ||
=== ip6tnl Tunnel === | === ip6tnl Tunnel === | ||
ip6tnl ist eine IPv4/IPv6 over IPv6-Tunnelschnittstelle, die wie eine IPv6-Version des SIT-Tunnels aussieht | 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 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 | 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 | ||
Zeile 169: | Zeile 164: | ||
Wenn das <code>ip6tnl</code>-Modul geladen wird, erstellt der Linux-Kernel ein Standardgerät mit dem Namen <code>ip6tnl0</code> | 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 | ||
Zeile 181: | Zeile 176: | ||
VTI6 ist das IPv6-Äquivalent von VTI | 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 190: | 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 | ||
Sie können IPsec auch über libreswan oder strongSwan konfigurieren | Sie können IPsec auch über libreswan oder strongSwan konfigurieren | ||
Zeile 197: | Zeile 193: | ||
GRE-Tunneling fügt einen zusätzlichen GRE-Header zwischen den inneren und äußeren IP-Header ein | 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 | * 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]] | ||
Zeile 205: | Zeile 201: | ||
Wenn das Modul <code>gre</code> geladen wird, erstellt der Linux-Kernel ein Standardgerät mit dem Namen <code>gre0</code> | 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 | 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| | [[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 und IP6GRETAP === | === IP6GRE und IP6GRETAP === | ||
IP6GRE ist das IPv6-Äquivalent von GRE, das es uns ermöglicht, jedes Schicht-3-Protokoll über IPv6 zu kapseln | 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 hat, genau wie GRETAP, einen Ethernet-Header im inneren Header: | 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 | ||
Zeile 236: | Zeile 232: | ||
Derzeit unterstützt der FOU-Tunnel Encapsulation-Protokolle, die auf IPIP, SIT und GRE basieren | 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 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 | * 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 Red Hat Enterprise Linux nicht unterstützt | ; '''Hinweis''' | ||
: FOU wird in Red Hat Enterprise Linux nicht unterstützt | |||
=== GUE === | === GUE === | ||
Zeile 253: | Zeile 251: | ||
Derzeit unterstützt GUE-Tunnel die innere IPIP-, SIT- und GRE-Kapselung | 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 | ||
Zeile 265: | Zeile 263: | ||
: GUE wird in Red Hat Enterprise Linux nicht unterstützt | : GUE wird in Red Hat Enterprise 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 und IP6ERSPAN == | === 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 | 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 | ||
[[Datei:erspan.png| | ; 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 | 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 | ||
Zeile 292: | Zeile 292: | ||
Linux unterstützt derzeit die meisten Funktionen von zwei ERSPAN-Versionen: v1 (Typ II) und v2 (Typ III) | 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 | oder | ||
Zeile 304: | Zeile 304: | ||
=== Dateien === | === Dateien === | ||
<noinclude> | <noinclude> | ||
== Anhang == | == Anhang == | ||
=== Siehe auch === | === Siehe auch === | ||
{{Special:PrefixIndex/{{BASEPAGENAME}}}} | {{Special:PrefixIndex/{{BASEPAGENAME}}}} | ||
---- | |||
ip link help | |||
==== Dokumentation ==== | ==== Dokumentation ==== | ||
===== Man-Page ===== | |||
===== Man- | |||
===== Info-Pages ===== | ===== Info-Pages ===== | ||
==== Links ==== | ==== Links ==== | ||
===== Projekt ===== | ===== Projekt ===== | ||
===== Weblinks ===== | ===== 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/Netzwerk]] | |||
</noinclude> | </noinclude> |
Aktuelle Version vom 24. November 2024, 10:57 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=any
undremote=any
- Wenn der Kernel IPIP-Protokollpakete empfängt, leitet er sie an
tunl0
als 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_SUBNET
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
ipip
(gleichbedeutend mit IPIP-Tunnel),ip6ip
,mplsip
, undany
- Der Modus
any
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
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 Red Hat Enterprise 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 Red Hat Enterprise 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