Tunel (Tunneling) to ogólna koncepcja techniczna, która polega na enkapsulacji, czyli pakowaniu jednego pakietu sieciowego wewnątrz drugiego. Oryginalny pakiet (payload) zostaje opakowany w nowy nagłówek, który umożliwia jego transmisję przez sieć pośrednią, która normalnie nie obsługiwałaby danego protokołu lub adresacji. Mechanizm ten jest powszechnie stosowany w sieciach komputerowych - na przykład protokół IPv6 jest tunelowany przez infrastrukturę IPv4 w celu zapewnienia kompatybilności w okresie przejściowym. Tunelowanie nie oznacza automatycznie szyfrowania - jest to jedynie mechanizm transportu, a bezpieczeństwo musi być zapewnione osobno, przez dedykowany protokół kryptograficzny.
GRE (Generic Routing Encapsulation) jest protokołem zdefiniowanym w RFC 2784, opracowanym pierwotnie przez firmę Cisco. GRE tworzy wirtualne połączenie punkt-punkt między dwoma routerami, enkapsulując pakiety IP (lub inne protokoły warstwy 3) w dodatkowy nagłówek GRE oraz zewnętrzny nagłówek IP. Kluczową cechą GRE jest zdolność do przesyłania ruchu multicast i broadcast, co czyni go idealnym narzędziem do łączenia oddziałów w jeden logiczny segment sieciowy - z punktu widzenia protokołów routingu dynamicznego (OSPF, EIGRP, RIP) oba routeery "widzą" się tak, jakby były podłączone do tego samego switcha Ethernetowego i znajdowały się w jednej domenie rozgłoszeniowej. GRE nie oferuje żadnego szyfrowania ani uwierzytelniania - dane przesyłane przez tunel GRE są w pełni jawne i mogą być przechwycone przez osobę trzecią. Z tego powodu GRE jest prawie zawsze stosowany w połączeniu z IPSec, który zapewnia warstwę szyfrowania (GRE+IPSec to jedno z najczęściej spotykanych połączeń w architekturach VPN). Nagłówek GRE ma zaledwie 4 bajty, co oznacza minimalny narzut danych w porównaniu z innymi protokołami tunelującymi.
VPN (Virtual Private Network) w swojej podstawowej formie (tryb warstwy 3, TUN) operuje na poziomie routingu IP - pakiety są kierowane na podstawie tablic routingu, a nie przekazywane mostkowo. Oznacza to, że ruch broadcast (np. żądania ARP, pakiety NetBIOS, usługi zeroconf) oraz ruch multicast (np. pakiety protokołów routingu dynamicznego OSPF, BGP) NIE są przekazywane przez tunel VPN. Sieci po obu stronach tunelu VPN muszą posiadać odmienną adresację IP (np. 192.168.1.0/24 po jednej stronie i 192.168.2.0/24 po drugiej). Główną zaletą VPN jest szyfrowanie transmisji - dane przechodzące przez tunel VPN są zaszyfrowane (np. algorytmem AES-256) i nieczytelne dla osób postronnych. W praktyce korporacyjnej VPN często transportuje wewnątrz siebie protokół GRE - taka kombinacja (GRE inside VPN) łączy zalety obu technologii: GRE zapewnia możliwość przesyłania multicastów i broadcastów (niezbędna dla routingu dynamicznego), a VPN zapewnia szyfrowanie tego ruchu. Bez GRE, VPN sam z siebie nie przekazywałby pakietów OSPF ani ARP między oddziałami.
SSH (Secure Shell) tunelowanie różni się zasadniczo od VPN i GRE. SSH nie tworzy wirtualnego interfejsu sieciowego ani nie routuje całego ruchu sieciowego - zamiast tego tuneluje konkretne połączenia TCP na poziomie warstwy aplikacji. Istnieją trzy główne mechanizmy: (1) Local Port Forwarding (-L) - otwiera port na maszynie klienta i przekazuje połączenia przez zaszyfrowany kanał SSH do serwera, który łączy się z docelowym hostem; (2) Remote Port Forwarding (-R) - serwer SSH otwiera port, a połączenia są przekazywane z powrotem do klienta (używane do udostępniania usług z sieci za NAT-em); (3) Dynamic Port Forwarding (-D) - tworzy lokalne proxy SOCKS5, przez które aplikacje przekazują cały ruch TCP. SSH obsługuje również tryb TUN/TAP (podobny do VPN), wymagający uprawnień root i włączenia PermitTunnel w sshd_config, ale nie jest to jego główne zastosowanie. Z punktu widzenia bezpieczeństwa: szyfrowanie SSH obejmuje tylko odcinek między klientem a serwerem SSH - ruch między serwerem SSH a docelowym hostem jest już niezaszyfrowany (chyba że docelowa usługa sama używa TLS/SSL). SSH obsługuje wyłącznie protokół TCP - ruch UDP nie może być przekazywany przez tunel SSH (z wyjątkiem TUN/TAP). Źródła: RFC 2784 (GRE), RFC 4253 (SSH Transport), RFC 4254 (SSH Connection Protocol), Juniper GRE Documentation, OpenVPN TUN/TAP Documentation.