FOSDEM: Clevere Netzwerktunnel mit RPort

Keine leichte Aufgabe, Clients hinter Firewalls und NAT zur Fernwartung erreichbar zu halten. Zur FOSDEM 22 zeigt RPort eine Lösung per Reverse Tunnel.

In Pocket speichern vorlesen Druckansicht 29 Kommentare lesen

(Bild: RPort.io / FOSDEM)

Lesezeit: 4 Min.
Von
  • David Wolski
Inhaltsverzeichnis

Wie komme ich von außen auf einen Rechner im Netzwerk? Umgekehrte Tunnel, welche ein Clientsystem von sich aus aktiv zu einem Server aufbauen, verlangen keine freundliche Mitarbeit des Netzwerkadministrators mit einer Portweiterleitung und keine dynamischen Domainnamen. Das auf der FOSDEM 22 vorgestellte Open-Source-Werkzeug RPort zeigt eine Möglichkeit, Reverse Tunnel stabil durch Firewalls und NAT hindurch zu betreiben, um Rechner in einem Netzwerk sicher aus dem Internet zu erreichen.

Weil das Zielsystem diese Tunnelverbindung zunächst aktiv als Client initiiert, ist eine Portweiterleitung auf einem Router oder die Öffnung eingehender Ports einer Firewall nicht notwendig. Umgekehrte Tunnel funktionieren deshalb auch mit NAT (Network Address Translation) und selbst bei wechselnden IP-Adressen bei Clientrechnern, die über wechselnde Internetverbindungen ins Netz gehen.

Das Konzept ist nicht neu, sondern auch schon von purem SSH vorgesehen. Der Aufbau und dauerhafte Betrieb eines Tunnels, beispielsweise mit OpenSSH, verlangt aber dann nach Hilfskonstruktionen wie Autossh, um Verbindungsabbrüche abzufangen. Mit RPort gelingt der Tunnelbau einfacher und stabiler, wie Thorsten Kramm, einer der Entwickler des Go-Programms in einem praxisbezogenen FOSDEM-Talk gezeigt hat.

RPort erstellt SSH-Verbindungen über die Methode HTTP Connect vom Client zum Server, um dann beliebige andere TCP-Protokolle zu tunneln. Dazu besteht RPort aus einer Serverkomponente für Linux (x86 und ARM) und einem Client, der nicht nur mit UNIX-ähnlichen Systemen wie Linux, macOS und Co. zusammenspielt, sondern sogar mit Windows-Systemen. Client und Server sind in Go geschrieben, liegen im Quellcode unter der MIT-Lizenz vor und als kompakte, vorkompilierte Binarys ohne umfangreiche Abhängigkeiten. Welche Ports dabei vom Client zum Server weitergetunnelt werden, bleibt der eigenen Konfiguration überlassen. Statt umfangreicher Konfiguration, wie es VPN-Lösungen wie OpenVPN oder SSH-Tunnel mit Autossh erfordern, ist RPort als Kommandozeilentool schnell in Gang gesetzt.

Tunnelbohrer: Der RPort-Client initiiert eine SSH-Verbindung über HTTP CONNECT und tunnelt die dann verwendeten TCP-Protokolle. UDP-basiert Protokolle sollen in der nächsten Hauptversion folgen.

(Bild: RPort.io, Thorsten Kramm )

Der erste, manuelle Verbindungsaufbau vom Zielclient zum Server verlangt natürlich, dass dort jemand an den Tasten sitzt. Für den automatischen, dauerhaften Verbindungsaufbau dient unter Linux ein Systemd-Dienst und unter Windows sowie macOS ein Service zusammen mit einer minimalen Konfigurationsdatei. Es verlangt auf dem Client zudem keine root- oder Administrator-Privilegien, sondern läuft unter Linux, macOS und Windows in gewöhnlichen Benutzeraccounts.

Die Serverkomponente des noch jungen Open-Source-Projekts verlangt dagegen nach Linux und root-Rechten bei der ersten Einrichtung. Allerdings läuft auch der Serverdienst nicht als root, sondern als unprivilegierter Daemon. Die geöffneten Ports auf dem Server, der als Relais dient, müssen deshalb ebenfalls unprivilegierte Ports jenseits der Nummer 1024 sein. Die Zielports auf dem Client sind jedoch beliebig und ein laufender Web- oder SSH-Server muss nicht erst umkonfiguriert werden. Tunnelverbindungen kann ein Client beliebig viele zum Server öffnen, um mehrere Ports und verschiedene Programm erreichbar zu machen.

Der RPort-Server ist schon mit einem Raspberry Pi oder einer günstigen Cloud-Instanz zufrieden, die von außen über eine öffentliche IP-Adresse oder einen Hostnamen erreichbar sind. Die Authentifizierung zwischen Client und Server erfolgt nicht nur über einen vorkonfigurierten Login mit Benutzername und Passwort, sondern optional auch anhand eines Fingerabdrucks, der den Server wie bei SSH eindeutig identifiziert. Wer keinen eigenen Server zum Selbsthosting hat, kann eine Cloundinstanz auch von der Entwicklungsfirma hinter RPort anmieten. Diese finanziert die Entwicklung über Supportverträge und Anpassung der Software.

Als Ergänzung zu RPort, die nicht Open-Source ist, kann eine mit Vue.JS programmierte Weboberfläche verbundene Clients auflisten und Verbindungen öffnen und Metriken anzeigen. Zusammen mit dieser Komponente wird RPort zu einer Remote-Management-Lösung, die sich mit einer internen Scripting-Schnittstelle auch für Monitoring und Provisioning eignet. Die Projektwebseite zu RPort liefert kurze Anleitungen zum Einstieg, während der Quellcode auf Github bereitsteht. Die Installation der separaten Weboberfläche, die für den nicht-kommerziellen Einsatz kostenlos bereitsteht, ist in der ausführlichen Dokumentation erläutert. Aktuell kann RPort nur TCP-Protokolle tunneln, soll in der kommenden Version 0.6.0 laut Aussagen im Frageteil des Talks, der später über die FOSDEM-Webseite abrufbar sein wird, auch mit UDP umgehen können.

Die optionale Weboberfläche: Während die Komponenten von RPort selbst Kommandozeilenprogramme sind, gibt es ein separat installierbares, kostenloses Web-Frontend, das nicht Open-Source ist.

(Bild: RPort.io )

(bme)