# Tunnel (Rechnernetz)

Ein Tunnel in einem Rechnernetz ist ein virtueller Übertragungsweg, der durch Kapselung eines Netzwerkprotokolls in ein anderes erfolgt. Bei einem Tunnel folgt die Kapselung allerdings nicht der Schichtenarchitektur des Protokollstapel, sondern es werden zwei Protokolle derselben Schicht miteinander verkapselt, oder ein Protokoll einer niedrigeren Schicht in einem Datenpaket einer höheren Schicht transportiert.
Vor und hinter dem Tunnel erfolgt die Kommunikation über das ursprüngliche Netzwerkprotokoll, während für die Übertragung zwischen den beiden Tunnelendpunkten ein anderes Protokoll verwendet wird, das als Tunnelprotokoll bezeichnet wird. Die Übersetzung und Übertragung eines Datenpakets in einem Tunnel wird als Tunneln oder aus dem Englischen entlehnt als Tunneling bezeichnet. Für den Aufbau des Tunnels, die Einbettung und das Weiterreichen der Datenpakete wird eine Software auf beiden Seiten des Tunnels benötigt.
Tunneling wird zum Aufbau eines Virtual Private Network über öffentliche Datennetze wie das Internet verwendet. Auf diese Weise lassen sich unsichere Netzwerkprotokolle eingebettet in einem abhör- und manipulationssicheren Verschlüsselungsprotokoll transportieren. Ein anderer Zweck ist der Aufbau eines Overlay-Netzes, um mithilfe eines Tunnels Netzwerkprotokolle zu transportieren, die von der Netzinfrastruktur nicht unterstützt werden. Ferner eignen sich Tunnel dafür, das Regelwerk einer Firewall zu umgehen.

## Tunnelprotokoll

Prinzipiell lassen sich alle Netzwerkprotokolle für einen Tunnel gebrauchen. Sie müssen nur die Möglichkeit bieten, die zu transportierenden Daten einzubetten. So lassen sich zum Beispiel bei einem ICMP-Tunnel ICMP-Echo-Pakete (Ping) für ein Tunneling von Nutzdaten zweckentfremden. Es sind auch asymmetrische Tunnel möglich, in dem zwei unterschiedliche Protokolle für den Hin- und Rückweg eingesetzt werden.
Es gibt Protokolle, die explizit für das Tunneling von Daten entworfen wurden. Zu den Tunnelprotokollen gehören beispielsweise L2TP, IP-in-IP-Kapselung, GRE und SSH.

## Umgehung einer Firewall

Tunnel können dazu verwendet werden, die Sicherheitspolice einer Firewall zu umgehen. Man nennt solche Tunnel verdeckte Kanäle (englisch network covert channels). Das folgende Beispiel illustriert ein solches Vorgehen.

### Portsperre

Ein Netzwerkdienst arbeitet auf einem festgelegten Port. Werden Ports mit Hilfe eines Paketfilters gesperrt, will man damit erreichen, dass bestimmte Dienste nicht genutzt werden können. Ist zum Beispiel Port 80 (HTTP) erlaubt und Port 21 (FTP) gesperrt, so kann der Anwender Internetseiten aufrufen, aber keine Dateien per FTP mit einem Internetserver austauschen.
Man könnte nun den Port im FTP-Client und FTP-Server anpassen, sodass sie ebenfalls über Port 80 kommunizieren und so die Filterregel der Firewall umgehen.
Hole Punching ist eine Technik, um eine Kommunikation zwischen zwei Teilnehmern zu ermöglichen, die sich beide hinter einem Paketfilter befinden.

### Tunneling in Nutzdaten

Ein Application Layer Gateway oder eine Firewall mit Deep Packet Inspection kann die Anwendungsdaten eines Pakets analysieren und alle Pakete blockieren, die nicht dem Protokoll des freigegebenen Dienstes entsprechen. Hier würde die Portänderung also nicht mehr funktionieren.
Um auch eine solche Maßnahme zu umgehen, können die zu tunnelnden Daten in die Nutzdaten des Tunnelprotokolls eingebettet werden. HTTP erlaubt die Übermittlung beliebiger Nutzdaten im Nachrichtenrumpf einer HTTP-Anfrage oder -Antwort. Die Daten müssen also so konvertiert werden, dass sie dem HTTP-Protokollstandard entsprechen. Eine Tunnelsoftware kann eine solche Konvertierung vornehmen: sie nimmt die Daten in einem Format entgegen und kapselt sie zum Versand in einem anderen Netzwerkprotokoll. Eine Software beim Kommunikationspartner nimmt das Tunnelprotokoll entgegen und wandelt die Daten in das ursprüngliche Format zurück.
Erlaubt die Firewall verschlüsselte Verbindungen, wie zum Beispiel zu HTTPS-Servern, lassen sich die Daten an der Firewall nicht mehr mitlesen. Somit ist eine Inhaltsprüfung nicht möglich. Diese Verbindungen eignen sich besonders gut für Tunnel. Hier eignet sich die Software OpenVPN mit dem Protokoll TCP sehr gut, da der Aufbau der Verbindung nahezu identisch mit dem einer Webseite (HTTPS) ist.

## Virtual Private Network

Tunnel werden dazu verwendet, um abhörsichere Verbindungen über ungesicherte Computernetzwerke hinweg aufzubauen. Dabei sorgt die Tunnelsoftware dafür, dass die Netzwerkpakete in einem Verschlüsselungsprotokoll eingebettet werden, um sie auf der Gegenseite wieder zu entschlüsseln und auszupacken. Dadurch wird eine verschlüsselte Datenübertragung auch für Dienste realisiert, die normalerweise über keine eigene Verschlüsselung verfügen. Auch ganze Netzwerke können so abhörsicher miteinander verbunden werden.
Beispiele für VPN-Protokolle sind IPsec, OpenVPN und WireGuard.

## Tunnelsoftware

Eine Tunnelsoftware kann einen lokalen Port als Tunneleingang öffnen. Dieser kann beispielsweise an die Loopback-Adresse (127.0.0.1 bei IPv4 oder ::1 bei IPv6) gebunden werden, damit der Tunnel lediglich auf dem Hostrechner des Tunnels zur Verfügung steht. Der Port kann aber auch an die Netzwerkadresse gebunden werden, um beispielsweise im lokalen Netzwerk zur Verfügung zu stehen. Das Client-Programm wird dahingehend konfiguriert, dass es keine Verbindung zum Zielserver aufbaut, sondern zum Tunneleingang. Die Tunnelsoftware übernimmt den Verbindungsaufbau und die Kommunikation zum Tunnelserver. Auf diese Weise können auch mehrere lokale Ports verwendet werden, die man einzeln konfigurieren und mit unterschiedlichen Zielen verbinden kann.
Auf dem Tunnelserver wird eine Tunnelsoftware ausgeführt, die das Tunnelprotokoll entgegennimmt, die Nutzdaten auspackt und im ursprünglichen Format zum Ziel weiterleitet.
Alternativ zu einer dedizierten Tunnelsoftware gibt es auch Anwendungsprogramme, bei denen die Tunnelfunktionalität bereits integriert ist. Der Tunnel kann ohne eine separate Tunnelsoftware genutzt werden.

### Beispiele für eine Tunnelsoftware

* GNU httptunnel HTTP-Tunnelinglösung.
* HTTPTunnel – eine plattformunabhängige (Perl/PHP) HTTP tunneling software
* OpenSSH – SSH bietet die Möglichkeit verschlüsselte TCP-Tunnel aufzubauen
* OpenVPN – VPN-Lösung für Unix, Windows, Android und iOS, verwendet wahlweise UDP oder TCP (ab Version 2.0)
* corkscrew – ein SSH-HTTP(s) Tunnel-Programm
* PuTTY ist ein freies SSH- und Telnet-Client-Programm
* FreeS/WAN
* OpenS/WAN
* iPig Hotspot VPN – TCP/UDP-Tunnel-Software und Service (Eine eingeschränkte Version ist kostenlos nutzbar.)
* VTun
* PingFu ist ein Game Tunnel Service
* LogMeIn Hamachi – ein kostenloser VPN-Tunnel Service
* Your Freedom ist ein teilweise kostenloser HTTP Tunnel Service
* Crypto IP Encapsulation (CIPE)
* Tunnel – TCP-Tunnel-Software (eingeschränkt kostenlos nutzbar, Windows + Linux)
* Token2Shell - Universal Windows-App
* XLink Kai - kommerzieller Tunneldienst für z. B. den Nintendo GameCube oder der XBox 360

## Sicherheit

Getunnelte Verbindungen gelten nur so lange als sicher, wie die dabei verwendeten Verschlüsselungsverfahren als ausreichend stark angesehen werden.
Auch muss man sich bewusst werden, dass Daten, die über einen öffentlichen Anbieter geleitet werden, von diesem und auch dessen dahinterliegenden Knotenpunkten (z. B. dem Provider) lesbar sind, sofern nicht höherliegende Protokolle wie TLS im HTTPS-Protokoll die Verschlüsselung zum Ziel sicherstellen. Daher ist man auf der sicheren Seite, wenn man vertrauenswürdigere Anbieter wie z. B. den eigenen Server, einen Zugangspunkt der Arbeitsstelle oder eines Freundes nutzt.
Die Software, die man nutzt, kann Lücken und Einfallstore enthalten, die ein Angreifer ausnutzen kann. Daher sollte man stets auf die Aktualität der Endpunkte (Server ↔ Client) achten.
Der verwendete Schlüssel des Tunnels kann in falsche Hände fallen. Daher sollte auch hier sichergestellt werden, dass dieser nicht kompromittiert ist.
Zusammenfassend gilt es folgende Aspekte zu beachten:
* Die verwendeten Verschlüsselungsverfahren des Tunnels (Asymmetrie, Art des Schlüsselaustauschs)
* Die Aktualität der verwendeten Software
* Die Vertrauenswürdigkeit des Anbieters
* Die Integrität des Schlüssels