|
|
Zeile 123: |
Zeile 123: |
| ===== Projekt ===== | | ===== Projekt ===== |
| ===== Weblinks ===== | | ===== Weblinks ===== |
|
| |
| = TMP =
| |
| == IPIP-Tunnel ==
| |
| IPIP-Tunnel ist, wie der Name schon sagt, ein IP-over-IP-Tunnel, definiert in RFC 2003
| |
| * Der IPIP-Tunnel-Header sieht wie folgt aus
| |
|
| |
| [[File:ipip.png|600px]]
| |
|
| |
|
| |
| 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
| |
|
| |
| So erstellen Sie einen IPIP-Tunnel:
| |
| 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
| |
| Add a remote internal subnet route if the endpoints don't belong to the same subnet
| |
| # ip route add REMOTE_INTERNAL_SUBNET/24 dev ipip0
| |
|
| |
| 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
| |
|
| |
| [[File:sit.png|600px]]
| |
|
| |
| 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
| |
|
| |
| Der SIT-Tunnel-Header sieht wie folgt aus:
| |
|
| |
| Wenn das <code>sit</code>-Modul geladen wird, erstellt der Linux-Kernel ein Standardgerät mit dem Namen <code>sit0</code>
| |
|
| |
| So erstellen Sie einen SIT-Tunnel:
| |
| 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
| |
| * Der Tunnelheader sieht wie folgt aus:
| |
|
| |
| [[File:ip6tnl.png|600px]]
| |
|
| |
| 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>
| |
|
| |
| So erstellen Sie einen ip6tnl-Tunnel:
| |
| # 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
| |
|
| |
| So erstellen Sie einen VTI-Tunnel:
| |
| # 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
| |
| * Der GRE-Header sieht wie folgt aus:
| |
|
| |
| [[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>
| |
|
| |
| So erstellen Sie einen GRE-Tunnel:
| |
| # 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|600px]]
| |
|
| |
| So erstellen Sie einen GRETAP-Tunnel:
| |
| # 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
| |
| * Der Tunnelheader sieht wie folgt aus:
| |
|
| |
| [[File:gre6.png|600px]]
| |
|
| |
| IP6GRETAP hat, genau wie GRETAP, einen Ethernet-Header im inneren Header:
| |
|
| |
| [[File:gre6tap.png|600px]]
| |
|
| |
| So wird ein GRE-Tunnel erstellt:
| |
| # 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
| |
| * Ein FOU-Header sieht wie folgt aus:
| |
|
| |
| [[File:fou.png|600px]]
| |
|
| |
| So erstellen Sie einen FOU-Tunnel:
| |
| # 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 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
| |
| * Ein Beispiel für einen GUE-Header sieht so aus:
| |
|
| |
| [[File:gue.png|600px]]
| |
|
| |
| So erstellen Sie einen GUE-Tunnel:
| |
| # 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) supports all of the capabilities of VXLAN, NVGRE, and STT and was designed to overcome their perceived limitations
| |
| * Many believe GENEVE could eventually replace these earlier formats entirely
| |
| * The tunnel header looks like:
| |
|
| |
| [[File:geneve.png|600px]]
| |
|
| |
| which looks very similar to VXLAN
| |
| * The main difference is that the GENEVE header is flexible
| |
| * It's very easy to add new features by extending the header with a new Type-Length-Value (TLV) field
| |
| * For more details, you can see the latest geneve ietf draft or refer to this What is GENEVE? article
| |
|
| |
| Open Virtual Network (OVN) uses GENEVE as default encapsulation
| |
| * Here is how to create a GENEVE tunnel:
| |
| # 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
| |
| * Der ERSPAN-Header sieht wie folgt aus:
| |
|
| |
| [[Datei:erspan.png|600px]]
| |
|
| |
| 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)
| |
|
| |
| So erstellen Sie einen ERSPAN-Tunnel:
| |
| # 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
| |
|
| |
|
| Wenn Sie mehr erfahren möchten, lesen Sie diesen Artikel: Einführung in Linux-Schnittstellen für virtuelle Netzwerke | | Wenn Sie mehr erfahren möchten, lesen Sie diesen Artikel: Einführung in Linux-Schnittstellen für virtuelle Netzwerke |
| # 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 |
| </noinclude> | | </noinclude> |