# Generic Routing Encapsulation

Das Generic Routing Encapsulation (GRE) ist ein Netzprotokoll, welches dazu dient, andere Protokolle einzukapseln und so in Form eines Tunnels über das Internet Protocol (IP) zu transportieren. GRE wurde von Cisco Systems entwickelt und 1994 erstmals im spezifiziert. 2000 wurde der durch abgelöst und im erweitert. GRE ist bei der Internet Engineering Task Force im Status eines vorgeschlagenen Standards.
GRE setzt – wie UDP und TCP – direkt auf IP auf und verwendet die IP-Protokoll-Nummer 47.
Beispiele für GRE-Anwendungen:
* VPN-Verbindungen für PPTP
* Aufbau von Tunneln zwischen IPv6-fähigen Netzen über IPv4-Infrastruktur (und vice versa)
* Tunnel zwischen IPsec-Endstellen, wenn die Benutzung dynamischer Routingprotokolle oder Multicastübertragungen über VPN-Verbindungen benötigt wird
* Tunnel für Mobilitätsprotokolle wie Mobile IP oder Proxy Mobile IPv6
* Tunnel für die Übertragung des IPX- oder des AppleTalk-Protokolls

## Header-Aufbau

Ein GRE-Header ist mindestens 4 Byte groß. Da das GRE-Paket zusätzlich noch in ein IP-Paket eingepackt wird, werden im GRE-Tunnel übertragene Pakete mindestens 24 Byte größer. Dies muss bei der Festlegung der maximalen Paketgröße Maximum Transmission Unit (MTU) berücksichtigt werden.
Ein GRE-Header hat den folgenden Aufbau:
| Bits 0–3 | Bits 0–3 | Bits 0–3 | Bits 0–3 | 4–12 | 4–12 | 4–12 | 4–12 | 4–12 | 4–12 | 4–12 | 4–12 | 4–12 | 13–15 | 13–15 | 13–15 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 |
| C | | K | S | Reserved0 | Reserved0 | Reserved0 | Reserved0 | Reserved0 | Reserved0 | Reserved0 | Reserved0 | Reserved0 | Version | Version | Version | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type |
| Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Checksum (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) | Reserved1 (optional) |
| Key (optional) ||||||||||||||||||||||||||||||||
| Sequence Number (optional) ||||||||||||||||||||||||||||||||

### C

    Checksum bit; wird auf 1 gesetzt, wenn eine Checksum enthalten ist.

### K

    Key bit; wird auf 1 gesetzt, wenn ein Key vorhanden ist.

### S

    Sequence number bit; wird auf 1 gesetzt, wenn eine Sequenznummer vorhanden ist.

### Reserved0

    Reservierte Bits; werden auf 0 gesetzt.

### Version

    GRE Versionsnummer; wird auf 0 gesetzt.

### Protocol Type

    Enthält den ether protocol type der übertragenen Nutzlast. (Für IPv4 beträgt der Wert hex 0800.)

### Checksum

    Vorhanden, falls das C-Bit gesetzt ist; enthält die Prüfsumme für den GRE Header und die Nutzlast.

### Reserved1

    Vorhanden, falls das C-Bit gesetzt ist; wird auf 0 gesetzt.

### Key

    Vorhanden, falls das K-Bit gesetzt ist; enthält einen applikationsabhängigen Schlüsselwert.

### Sequence Number

    Vorhanden, falls das S-Bit gesetzt ist; enthält die Sequenznummer des GRE-Paketes.

## Konfiguration

GRE-Tunnel werden in Cisco-Routern als (virtuelle) Interfaces konfiguriert. Im Beispiel die Minimalkonfiguration für einen GRE-Tunnel IPv4 in IPv4:

## Adressierung

GRE-Tunnel haben eigene Tunnel-Adressen, die aber nur innerhalb der beteiligten Router genutzt werden. Diese Adressen entsprechen den Anforderungen des einzukapselnden Protokolls und werden am Tunnelinterface konfiguriert.
Um Pakete durch den Tunnel hindurch zu transportieren, benötigt der Tunnel zusätzlich äußere Adressen, die im Transportnetz, das die Tunnelendpunkte verbindet, geroutet werden. Diese Adressen entsprechen den Anforderungen des Internetprotokolls.

## Übertragung

Ein zu übertragendes Paket wird am Quellrouter zuerst mit einem GRE-Header versehen. Dann wird das resultierende Paket als Nutzlast in einem neuen Unicast-IP-Paket eingepackt, dessen Quelladresse die lokale äußere Tunneladresse ist. Als Zieladresse wird die äußere Tunneladresse des Zielsystems (in der Regel ein Router) verwendet.
Am Zielrouter wird nach dem Empfang des IP-Paketes der GRE-Header entfernt und das Paket ohne GRE-Informationen unter Verwendung der Routing-Tabelle weitergeleitet.

## Normen und Standards

* RFC 1701 – Generic Routing Encapsulation (GRE). 1994 (informational, englisch).
* RFC 1702 – Generic Routing Encapsulation over IPv4 networks. (informational, englisch).
* RFC 2637 – Point to Point Tunneling Protocol. (informational, englisch).
* RFC 2784 – Generic Routing Encapsulation (GRE). 2000 (aktualisiert durch RFC 2890, proposed standard, englisch).
* RFC 2890 – Key and Sequence Number Extensions to GRE. September 2000 (proposed standard, englisch).