Wie richtet man einen GRE-Tunnel zwischen OPNsense und Linux ein?
Generic Routing Encapsulation (GRE), das von Cisco entwickelt wurde, wird verwendet, um Netzwerkprotokolle der Schicht 3 in virtuellen Punkt-zu-Punkt-Verbindungen über ein Internetprotokollnetzwerk zu kapseln. GRE-Tunnel werden eingesetzt, um (OSI-Schicht 3) Protokolle zwischen Geräten über eine Verbindung zu verwenden, die diese Protokolle normalerweise nicht unterstützt. Wenn eine GRE-Schnittstelle verwendet wird, können beide Peer-Router, die den Zugriff auf das Unternehmensnetzwerk steuern, dynamische IP-Routing-Protokolle unterstützen, um Routing-Updates über das Tunnel auszutauschen und IP-Multicast-Verkehr zuzulassen. Enhanced Interior Gateway Routing Protocol (EIGRP), Routing Information Protocol (RIP), Intermediate System-to-Intermediate System (IS-IS), Open Shortest Path First (OSPF) und Border Gateway Protocol (BGP) sind alle unterstützte IP-Routing-Protokolle. GRE wird oft verwendet, um Multicast-Verkehr weiterzuleiten, der nicht geroutet werden kann. Dies erfordert jedoch zusätzliche Software wie IGMP-Proxy oder PIMD, die auf OPNsense nicht so häufig verwendet werden.
GRE wird oft als Standard-Tunneltechnologie verwendet, wenn Cisco-Lösungen eingesetzt werden.
Durch einen virtuellen Tunnel bewegen sich GRE-Pakete direkt zwischen den beiden Enden. Wenn ein Paket durch andere Router geleitet wird, tun die Router nichts mit seinem Payload. Stattdessen betrachten sie nur das IP-Paket auf der Außenseite. Wenn das Paket das Ende des GRE-Tunnels erreicht, entfernt der Switch das äußere Paket, betrachtet die Nutzlast und sendet das Paket dann an sein endgültiges Ziel.
GRE verwendet mehrere Protokolle auf einem einzigen Protokoll-Rückgrat. Es ist einfacher einzurichten als einige andere Lösungen, wie VPN. Sie können GRE verwenden, um Protokolle zu senden, die das zugrunde liegende Netzwerk nicht unterstützt, Netzwerke mit einer begrenzten Anzahl von Hops zu umgehen, Subnetze zu verbinden, die nicht nebeneinander liegen, und VPNs über Weitverkehrsnetze arbeiten zu lassen.
Abbildung 1. GRE-Tunnel-Topologie zwischen OPNsense und Ubuntu Linux
In diesem Tutorial werden wir die GRE-Tunnel-Konfiguration auf der OPNsense 22.7.6-Firewall und Ubuntu 20.04.3 LTS Linux erklären. Sie können einen GRE-Tunnel zwischen Ihrem OPNsense-Knoten und dem Linux-Server ganz einfach einrichten, indem Sie die folgenden Hauptschritte befolgen:
-
Erstellen Sie ein GRE-Tunnel-Interface auf OPNsense
-
Aktivieren Sie das GRE-Tunnel-Interface auf OPNsense
-
Definieren Sie eine Firewall-Regel, um den Datenverkehr auf der GRE-Tunnel-Schnittstelle zuzulassen.
-
Definieren Sie eine Firewall-Regel, um das GRE-Protokoll auf der WAN-Schnittstelle zuzulassen.
-
GRE-Tunnel unter Linux einrichten
Jeder Schritt wird im Folgenden im Detail erklärt.
1. Erstellen Sie GRE-Tunnel-Schnittstelle auf OPNsense
Um eine GRE-Schnittstelle auf Ihrer OPNsense-Firewall zu erstellen, können Sie die folgenden Schritte ausführen:
-
Navigieren Sie zu Interfaces → Other Types → GRE in Ihrer OPNsense-Weboberfläche.
-
Klicken Sie auf die Schaltfläche
+
Hinzufügen.Abbildung 2. Hinzufügen einer GRE-Schnittstelle auf OPNsense
-
Wählen Sie das Parent interface aus. Diese Schnittstelle dient als lokale Adresse, die für das GRE-Tunnel verwendet wird. In unserem Beispiel wählen wir
WAN
. -
Setzen Sie die GRE remote address. Es muss die Peer-Adresse sein, an die die gekapselten GRE-Pakete gesendet werden. In unserem Beispiel ist es die öffentliche IP-Adresse des entfernten Ubuntu-Servers,
22.22.22.22
. -
Setzen Sie die GRE tunnel local address, wie zum Beispiel
11.11.11.1
. Diese IP-Adresse gehört zum lokalen GRE-Tunnel-Endpunkt. -
Setzen Sie die GRE tunnel remote address, wie
11.11.11.2
, und die Subnetzmaske, wie30
. Diese IP-Adresse gehört zum Remote-GRE-Tunnel-Endpunkt. Das Subnetz wird verwendet, um herauszufinden, welches Netzwerk tunnelt wird. -
Geben Sie einen beschreibenden Namen im Feld Description zu Ihrer Referenz ein, wie zum Beispiel
MyGRE Tunnel
. -
Klicken Sie auf Save, um die GRE-Schnittstelle hinzuzufügen.
Abbildung 3. Anzeigen der vorhandenen GRE-Schnittstelle auf OPNsense
-
Für die Schnittstellenzuweisung auf OPNsense navigieren Sie zu Interfaces → Assignments. Sie werden die vorhandenen Schnittstellen und Ihre neu erstellte GRE-Schnittstelle sehen.
Abbildung 4. GRE-Schnittstellenzuweisung auf OPNsense
-
Geben Sie einen beschreibenden Namen im Feld Description zu Ihrer Referenz ein, wie zum Beispiel
MyGRE
. -
Klicken Sie auf die Schaltfläche
+
Hinzufügen, um die GRE-Schnittstellenzuweisung abzuschließen. -
Klicken Sie auf Save, um die Schnittstelleneinstellungen zu speichern.
Abbildung 5. Anzeigen der Schnittstellenzuweisung auf OPNsense
2. Aktivieren Sie das GRE-Tunnel-Interface auf OPNsense
Um Ihr neu erstelltes GRE-Tunnel-Interface auf OPNsense zu aktivieren, können Sie die folgenden Anweisungen befolgen:
-
Gehen Sie zu den Interfaces im OPNsense Web-UI.
-
Wählen Sie das neu erstellte GRE-Tunnel-Interface, wie
MyGRE
. -
Klicken Sie auf das Kontrollkästchen Enable Interface. Dies öffnet das Generic Configuration-Fenster.
Abbildung 6. Aktivierung der GRE-Schnittstelle auf OPNsense
-
Sie können die Optionen Block private networks und Block bogon networks zur Sicherheit auswählen.
-
Sie können die anderen Optionen als Standard belassen.
Abbildung 7. Einstellung der generischen GRE-Schnittstellenkonfiguration auf OPNsense
-
Klicken Sie auf Save, um die Schnittstelleneinstellungen zu speichern.
-
Klicken Sie auf die Schaltfläche Apply changes, um die Einstellungen zu aktivieren.
-
Um den Status der GRE-Schnittstelle anzuzeigen, gehen Sie zu Interfaces → Overview im OPNsense Web-UI.
-
Wählen Sie die neu erstellte GRE-Schnittstelle, wie
MyGRE
. Sie sollten sehen, dass der Statusup
ist, wie unten dargestellt.Abbildung 8. Anzeigen des GRE-Schnittstellenstatus auf OPNsense
3. Definieren Sie eine Firewall-Regel, um den Datenverkehr auf der GRE-Tunnel-Schnittstelle zuzulassen
Sie können eine Firewall-Richtlinie definieren, um den Verkehr vom GRE-Tunnel-Interface zuzulassen, indem Sie die folgenden Anweisungen befolgen. Wir erlauben allen Verkehr über das GRE-Tunnel, aber Sie können je nach Bedarf restriktivere Regeln festlegen.
-
Navigieren Sie zu Firewall → Rules und wählen Sie die GRE-Schnittstelle, wie
MyGRE
.Abbildung 9. Hinzufügen einer Firewall-Regel auf der GRE-Tunnel-Schnittstelle
-
Klicken Sie auf die Schaltfläche
+
Hinzufügen, um eine Regel zu definieren.Abbildung 10. Hinzufügen einer beliebigen Firewall-Regel auf der GRE-Tunnel-Schnittstelle
-
Sie können alle Optionen auf den Standardwerten belassen, wenn Sie beliebigen Verkehr zulassen.
-
Wählen Sie die Option Log packets that are handled by this rule.
-
Geben Sie einen beschreibenden Namen in das Feld Description zu Ihrer Referenz ein, wie zum Beispiel
Allow GRE All Traffic
.Abbildung 11. Aktivieren Sie das Protokollieren für die Firewall-Regel auf der GRE-Tunnel-Schnittstelle
-
Klicken Sie auf
Save
, um die Regel hinzuzufügen. -
Klicken Sie auf die Schaltfläche Apply changes, um die Einstellungen zu aktivieren.
Abbildung 12. Anwenden der Firewall-Regel auf die GRE-Tunnel-Schnittstelle
4. Definieren Sie eine Firewall-Regel, um das GRE-Protokoll auf der WAN-Schnittstelle zuzulassen
-
Navigieren Sie zur Seite Firewall → Aliases. Sie werden feststellen, dass standardmäßig 4 vordefinierte Aliase in der Liste vorhanden sind.
-
Klicken Sie auf die Schaltfläche "+" in der unteren rechten Ecke des Fensters.
-
Geben Sie den Name des Alias ein, wie
Linux_GRE_Peer
. -
Wählen Sie
Host(s)
im Dropdown-Menü Type aus. -
Geben Sie die Ubuntu Linux IP-Adressen,
22.22.22.22
, in das Feld Content ein. -
Geben Sie eine Description ein, die Ihnen hilft, den Zweck oder die Details des Alias zu verstehen, wie z.B.
Ubuntu Linux GRE Peer
.Abbildung 13. Definition des Alias für Ubuntu Linux Server auf OPNsense
-
Klicken Sie auf Speichern, um die Aliase hinzuzufügen.
-
Klicken Sie auf Apply, um die Einstellungen zu aktivieren.
-
Navigieren Sie zu Firewall → Rules und wählen Sie die WAN-Schnittstelle aus.
-
Klicken Sie auf die Schaltfläche
+
Hinzufügen, um eine Regel zu definieren. -
Wählen Sie
GRE
in der Protocol-Option. -
Wählen Sie
Linux_GRE_Peer
für die Source-Option.Abbildung 14. Definieren Sie eine Firewall-Regel, um das GRE-Protokoll auf WAN-Schnittstelle-1 zuzulassen
-
Wählen Sie die Option Log packets that are handled by this rule.
-
Geben Sie einen beschreibenden Namen im Feld Description zu Ihrer Referenz ein, wie zum Beispiel
GRE-Protokoll erlauben
. -
Sie können die anderen Optionen als Standard belassen.
-
Klicken Sie auf
Save
, um die Regel hinzuzufügen. -
Klicken Sie auf die Schaltfläche Apply changes, um die Einstellungen zu aktivieren.
Abbildung 15. Definieren Sie eine Firewall-Regel, um das GRE-Protokoll auf WAN-Schnittstelle-2 zuzulassen
Lassen Sie uns die andere Seite des Tunnels auf dem Ubuntu Linux-Server erstellen.
5. GRE-Tunnel unter Linux einrichten
Sie können einen GRE-Tunnel zwischen Ihrem Ubuntu Linux-Server und dem OPNsense-Knoten ganz einfach einrichten, indem Sie die folgenden Schritte befolgen:
-
Auf Linux müssen Sie das
ip_gre
-Modul in Ihrem Kernel geladen haben, um ein GRE-Tunnel einzurichten. Um sicherzustellen, dass es geladen ist, führen Sie den folgenden Befehl aus:sudo modprobe ip_gre
lsmod | grep greYou should see the output similar to the given below:
ip_gre 28672 0
ip_tunnel 24576 1 ip_gre
gre 16384 1 ip_gre
Wenn Sie etwas anderes sehen, könnte es sein, dass Ihr Kernel GRE nicht unterstützt.
-
Alle großen Linux-Distributionen sollten
iproute2
bereits installiert haben. Falls sie noch nicht installiert sind, verwenden Sie den folgenden Befehl:sudo apt install iptables iproute2
-
Überprüfen Sie die Hilfetipps von iproute2, um zu sehen, wie die Syntax geschrieben wird:
ip tunnel help
You should see the output similar to the given below:
Usage: ip tunnel { add | change | del | show | prl | 6rd } [ NAME ]
[ mode { ipip | gre | sit | isatap | vti } ] [ remote ADDR ] [ local ADDR ]
[ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]
[ prl-default ADDR ] [ prl-nodefault ADDR ] [ prl-delete ADDR ]
[ 6rd-prefix ADDR ] [ 6rd-relay_prefix ADDR ] [ 6rd-reset ]
[ ttl TTL ] [ tos TOS ] [ [no]pmtudisc ] [ dev PHYS_DEV ]
Where: NAME := STRING
ADDR := { IP_ADDRESS | any }
TOS := { STRING | 00..ff | inherit | inherit/STRING | inherit/00..ff }
TTL := { 1..255 | inherit }
KEY := { DOTTED_QUAD | NUMBER } -
Um das GRE-Tunnelgerät (ohne Schlüssel) auf Ihrem Linux zu erstellen, führen Sie den folgenden Befehl aus:
sudo ip tunnel add tun0 mode gre remote 33.33.33.33 local 22.22.22.22 dev ens18
Hier sollten Sie die Parameter gemäß Ihren Einstellungen ändern:
33.33.33.33
ist die öffentliche IP-Adresse der OPNsense WAN-Schnittstelle.22.22.22.22
ist die öffentliche IP-Adresse der Linux-WAN-Schnittstelle.ens18
ist der WAN-Gerätename des Linux.
-
Um eine IP-Adresse dem GRE-Tunnel-Interface zuzuweisen, führen Sie den folgenden Befehl aus:
sudo ip addr add 11.11.1.2/30 dev tun0
-
Um die GRE-Schnittstelle zu aktivieren, führen Sie den nächsten Befehl aus:
sudo ip link set tun0 up
-
Um das neu erstellte GRE-Tunnel-Interface unter Linux anzuzeigen, führen Sie den folgenden Befehl aus:
ip addr show
Sie sollten die Ausgabe ähnlich wie die unten Gegebene sehen:
tun0@ens18: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN group default qlen 1000
link/gre 22.22.22.22 peer 33.33.33.33
inet 11.11.1.2/30 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::5efe:c0a8:1e/64 scope link
valid_lft forever preferred_lft foreverOr run the next command:
ip tunnel show
gre0: gre/ip remote any local any ttl inherit nopmtudisc
tun0: gre/ip remote 33.33.33.33 local 22.22.22.22 dev ens18 ttl inherit
Da es im GRE keinen Handshake gibt, spielt es keine Rolle, in welcher Reihenfolge Sie die Tunnelenden aktivieren. Es bedeutet auch, dass der Tunnel immer in einem von zwei Zuständen sein wird: DOWN oder UNKNOWN. Da ein GRE-Tunnel keinen Zustand hat, kann er auf einem Linux-Server niemals wirklich UP sein.
Führen Sie den folgenden Befehl auf Linux aus, wenn Sie den bestehenden GRE-Tunnel abbauen möchten:
sudo ip link set tun0 down
sudo ip tunnel del tun0
Was ist der Unterschied zwischen GRE- und IPsec-VPN-Tunneln?
GRE- und VPN-Tunnel sind beide Möglichkeiten, entfernte Netzwerke virtuell zu verbinden, aber jeder hat seine eigenen Vor- und Nachteile. Der größte Vorteil von VPNs ist, dass sie dem Site-to-Site-Verkehr eine sicherere Möglichkeit bieten, über das Internet zu kommunizieren, das ein öffentlicher Raum ist. Wenn der Datenverkehr über ein VPN-Tunnel gesendet wird, wird er verschlüsselt, aber wenn der Datenverkehr über ein GRE-Tunnel gesendet wird, wird er nur eingekapselt.
Durch die Verwendung einer VPN-Lösung kann ein Unternehmen all die folgenden Vorteile erhalten:
-
Kosteneinsparungen: Wenn Sie ein VPN über eine bestehende Internetverbindung nutzen, müssen Sie keine Leitungen von einem Telekommunikationsdienstanbieter mieten, um ein Weitverkehrsnetz aufzubauen. (WAN). Es kostet also weniger, ein VPN einzurichten, als ein traditionelles Mietleitungs-WAN. Eine VPN-Lösung hingegen erfordert, dass jede Site oder jeder mobile Benutzer, der sich mit dem VPN verbinden möchte, Zugang zum Internet hat.
-
Verschlüsselter Verkehr: VPNs können eine Vielzahl von Verschlüsselungsmethoden innerhalb des IPSec-Protokollrahmens verwenden, um den Datenverkehr zwischen einer Organisation und ihren entfernten Standorten oder Benutzern zu schützen. Secure Sockets Layer (SSL), der Verschlüsselungsstandard, der von vielen Online-Händlern, Bank-Websites und anderen internetbasierten Unternehmen verwendet wird, wird von einigen VPN-Installationen zur Datenverschlüsselung genutzt.
-
Einfache Netzwerkexpansion: Die meisten VPN-Verbindungen benötigen nur eine Internetverbindung, ein VPN-Gateway-Gerät und in einigen Fällen eine Softwareanwendung. Das Hinzufügen neuer Standorte und Remote-Nutzer zu einem VPN ist in der Regel günstiger und einfacher einzurichten als die Anbindung eines neuen Standorts an ein leased-line WAN.
Aber VPN-Tunnel haben einige Nachteile. Der Verkehr, der durch das Tunnel geleitet werden darf, muss in statischen Zugriffslisten aufgeführt sein, die auf dem neuesten Stand gehalten werden. Für größere Netzwerke kann dies ein langwieriger Prozess sein. Diskontinuierliche Subnetze erfordern separate Tunnel. Da VPNs keine routbaren Schnittstellen erstellen, können Sie einige Dinge auf VPN-Tunneln nicht tun, die Sie auf anderen Schnittstellen tun könnten. Außerdem lassen VPNs keinen Multicast-Verkehr durch, sodass Sie dynamische Routing-Protokolle wie RIP und OSPF über VPN nicht verwenden können.
GRE-Tunnel werden verwendet, um zwei Netzwerke Punkt-zu-Punkt zu verbinden, genau wie IPSec-VPNs. Einige der Vorteile von GRE-Tunneln sind wie folgt:
-
Datenkapselung: GRE-Tunnel umhüllen Pakete, die Protokolle verwenden, die mit einem Zwischen-Netzwerk nicht kompatibel sind (Passagierprotokolle), in Protokolle, die es sind (transport protocols). Dies ermöglicht es, Daten über Netzwerke zu senden, die zuvor nicht erreichbar waren. Sie könnten beispielsweise einen GRE-Tunnel verwenden, um zwei AppleTalk-Netzwerke über ein reines IP-Netzwerk zu verbinden oder IPv4-Pakete über ein reines IPv6-Netzwerk zu senden.
-
Einfachheit: Standardmäßig haben GRE-Tunnel keine Mechanismen zur Steuerung des Datenflusses oder zur Gewährleistung ihrer Sicherheit. Diese fehlenden Funktionen erleichtern die Einrichtung. Aber Sie möchten wahrscheinlich keine unverschlüsselten Daten über ein öffentliches Netzwerk senden. Aus Sicherheitsgründen können Sie die IPSec-Protokollsuite zu GRE-Tunneln hinzufügen, um Ihre Daten zu schützen. Außerdem können GRE-Tunnel Daten von Netzwerken, die nicht miteinander verbunden sind, durch einen einzigen Tunnel senden, was VPNs nicht können.
-
Multicast-Verkehrsweiterleitung: GRE-Tunnel können verwendet werden, um Multicast-Verkehr weiterzuleiten, aber ein VPN kann das nicht. Die Verwendung eines GRE-Tunnels erleichtert das Senden von Multicast-Verkehr wie Werbeanzeigen, die von Routing-Protokollen zwischen weit voneinander entfernten Standorten gesendet werden.
Aber GRE-Tunnel sind nicht sicher, da der Netzwerkverkehr nicht verschlüsselt ist.
Beide Protokolle haben zusätzliche Header, die die Pakete größer machen. Dies kann zu Paketfragmentierung führen, was das Netzwerk verlangsamt. Moderne Betriebssysteme verwenden TCP Path Maximum Transmission Unit Discovery (PMTUD), um automatisch herauszufinden, welches Paket das größte ist. Aber das User Datagram Protocol funktioniert nicht mit PMTUD. Die andere Option besteht darin, die MTU im Netzwerk manuell einzustellen, damit die IP-Fragmentierung außerhalb des Tunnels erfolgt.
Wenn Organisationen sicheres IP-Tunneling benötigen, sollten sie IPsec VPN verwenden. Sie sollten GRE verwenden, wenn sie mehrere Protokolle oder Multicast ohne Datenschutz tunneln müssen.
Viele Organisationen kombinieren VPNs und GRE-Tunnel, um die Sicherheit von VPNs ohne die Einschränkungen zu erhalten, die VPNs haben. So werden GRE über IPSec VPN-Tunnel eingerichtet. Dies ermöglicht es dem GRE-Tunnelverkehr, durch den VPN-Tunnel zu gehen und erstellt nur eine IPSec Assoziation, egal wie viele Subnetze überquert werden müssen. Es bietet auch eine Möglichkeit, Änderungen an der Routing-Tabelle zu senden.
Wenn sowohl GRE- als auch IPsec-Tunnel kombiniert werden, steigen die Kosten. Durch die Konfiguration eines GRE-Tunnels über einen IPsec-Tunnel können Organisationen sicher Pakete tunneln, die kein IP sind oder die an mehr als eine Person gesendet werden. Wenn beide Protokolle zusammen verwendet werden, steigt der Overhead.
Kriterien | GRE | IPsec |
---|---|---|
Steht Für | Generic Routing Encapsulation | IP-Sicherheit |
Zweck | GRE ist ein Protokoll, das Pakete so kapselt, dass andere Protokolle über IP-Netzwerke gesendet werden können. | Das IP-Sicherheitsprotokoll (IPsec) ist eine Reihe von Standards, um sicherzustellen, dass Informationen, die über IP-Netzwerke gesendet werden, privat, korrekt und echt sind. |
Verwendung | GRE wird verwendet, um IP-Pakete von einem Netzwerk zu einem anderen zu senden, ohne dass Router dazwischen sie lesen oder wie IP-Pakete behandeln. | IPsec ESP wird verwendet, wenn IP-Pakete von einem System zu einem anderen gesendet werden müssen, während sie vor dem Ausspionieren oder Verändern geschützt werden. |
Modi | Einzelmodus - GRE-Tunnel | Zwei Modi - Tunnelmodus und Transportmodus |
Privatsphäre, Integrität und Authentizität der Informationen | Nicht unterstützt | Unterstützt |
Kapselung | Kapselung der Nutzlast | Transportmodus - Nur die Nutzlast ist geschützt. |
Standard | GRE ist im RFC 2784 Standard definiert | IPSEC ESP ist im RFC2406 definiert |
Protokoll & Port | GRE verwendet die IP-Protokollnummer 47 | IPSec verwendet ESP (IP-Protokollnummer 50) und AH (IP Protocol number 51). Zusätzlich verwendet IPSec IKE für Verhandlungen (UDP-Portnummer 500). |
IP-Header | 4 zusätzliche IP-Header-Bytes | Zusätzliche Bytes werden nicht verwendet. |
Multicast-, Routing-Protokoll- und Routed-Protokoll-Unterstützung | Unterstützt | Nicht unterstützt |
Einfachheit | Einfacher und schneller | Komplex |
Tabelle 1. GRE-Tunnel vs IPsec-VPN-Tunnel