Selfhosting mit Argo Tunnel

Mo, 25. April 2022, Lioh Möller

Aufgrund von Einschränkungen seitens des Internetproviders wie CGNAT oder Mangels Zugriff auf die Firewall kann es hilfreich sein auf das sogenannte Argo Tunnel Angebot von Cloudflare zurückzugreifen.


Dieses ist in der Grundausstattung kostenfrei und ermöglicht auf einfache Weise eine Bereitstellung von Diensten im Internet.

Voraussetzung ist eine eigene Domain und der Wille sowie die technische Möglichkeit, die Nameserver (NS) auf das Angebot von Cloudflare umzustellen.

Nach der Registrierung auf der Cloudflare Webseite kann über den Punkt Add Site die eigene Domain hinterlegt werden.


Etwas versteckt findet sich im darauffolgenden Schritt die Option zur kostenfreien Nutzung.


Daraufhin findet seitens Cloudflare eine Überprüfung vorhandener DNS Einträge statt und bei Bedarf können diese übernommen oder über den Punkt Edit bearbeitet oder gelöscht werden.


Die zu definierenden DNS NS Records werden im nächsten Schritt angezeigt und auf seitens des Anbieters, bei dem die Domain verwaltet werden kann, müssen die entsprechenden Einträge angepasst werden.


Erst nachdem die Änderungen aktiv sind, kann mit der Einrichtung des Tunnels begonnen werden. Sollte dies noch nicht der Fall sein, werden die Domains in der Übersicht im Status Pending angezeigt.

Zum Aufbau des Tunnels kommt auf dem Zielsystem die Software cloudflared zum Einsatz, welche für unterschiedliche Plattformen und Distributionen bereitgestellt wird

Auf einem Debian System kann dazu das entsprechende .deb Paket für die passende Architektur gewählt werden, welches nach dem Download mittels sudo dpkg -i /pfad/zum/Paket.deb installiert werden kann.

Nach der Installation erfolgt die Anmeldung an Cloudflare mit folgendem Befehl:

cloudflared tunnel login


Ausgegeben wird eine URL, welche auf einem beliebigen System aufgerufen werden kann, um den Tunnel zu autorisieren.

Die eigentliche Einrichtung des Tunnels kann erst ausgeführt werden, sobald das System berechtigt wurde. Der Name des Tunnels kann dabei beliebig definiert werden, es bietet sich allerdings an einen ähnlichen Namen wie die zu verbindende Domain zu wählen.

cloudflared tunnel create meindomaintunnel


Jeder Tunnel erhält eine eindeutige ID, welche im Folgenden eingesetzt werden muss:

cp $HOME/.cloudflared/cert.pem $HOME/.cloudflared/MEINE_TUNNEL_ID.pem


Nun kann das entsprechende systemweite Konfigurationsverzeichnis angelegt werden und eine globale Konfigurationsdatei erstellt werden. Die Parameter müssen dabei an die lokalen Gegebenheiten angepasst werden.

sudo mkdir /etc/cloudflared
sudo vim /etc/cloudflared/config.yml
tunnel: MEINE_TUNNEL_ID
credentials-file: /home/MEIN_BENUTZER/.cloudflared/MEINE_TUNNEL_ID.json
origincertpath: /root/.cloudflared/MEINE_TUNNEL_ID.pem

ingress:
  - hostname: meinedomain.tld
    service: http://localhost:80
  - hostname: www.meinedomain.tld
    service: http://localhost:80
  - service: http_status:404

Daraufhin können die DNS-Einträge auf den Tunnel angepasst werden:

cloudflared tunnel route dns meindomaintunnel meinedomain.tld
cloudflared tunnel route dns awtf meindomaintunnel www.meinedomain.tld

Den Tunnel aktiviert man mit folgendem Befehl:

cloudflared tunnel run

Um den Dienst beim Systemstart zu aktivieren, kann zunächst der entsprechende Service installiert werden:

cloudflared service install

Starten lässt sich dieser wie folgt:

systemctl start cloudflared

Ein lokal auf Port 80 laufender Webserver sollte jetzt über Cloudfare bei einem Aufruf der Domain erreichbar sein.