Daniel Meier

Infrastruktur, Linux, Automatisierung und Betrieb

Artikel auf Deutsch

Hier findest du die deutschen Übersetzungen. Alle bisherigen Artikel sind weiterhin auf Englisch verfügbar.

Onion Lab: Von zu Hause hosten und ausgehenden Traffic durch Tor leiten

Ich finde Tor aus einem sehr praktischen Grund unglaublich cool: Ich kann einen Webservice auf einem Rechner zu Hause verfügbar machen, ohne Portforwarding auf meinem Router einzurichten und ohne irgendwo eine Domain zu registrieren.

Den Service lokal starten, Tor einen Onion Service erstellen lassen und die .onion-Adresse teilen. Wer Tor Browser verwendet, kann ihn erreichen, obwohl ich keinen HTTP-Port ins Internet geöffnet habe. Dass sich diese Möglichkeit mit so einem kleinen Setup umsetzen lässt, finde ich faszinierend.

Ich habe Onion Lab gebaut, damit sich diese Idee mit Docker Compose leicht ausprobieren lässt. Die Demo stellt eine kleine Website und einen SSH-Service über Tor bereit, ohne Web- oder SSH-Ports auf dem Docker-Host zu veröffentlichen.

Dann wollte ich die Demo weiter auf die Spitze treiben. Was wäre, wenn die Anwendungen auch ihren ausgehenden Traffic wieder durch das Tor-Netzwerk schicken müssten, selbst wenn sie nichts von Proxys wissen?

Daraus entstand die zweite Hälfte des Labs: Onion Services für eingehende Verbindungen, transparentes Tor-Routing für ausgehende TCP-Verbindungen der Anwendungen und alles in einem kleinen Compose-Stack definiert.

Weiterlesen

Git Worktrees geben parallelen Aufgaben eigene Verzeichnisse

Git-Branches trennen die Versionsgeschichte, aber ein normaler Clone gibt uns nur ein Arbeitsverzeichnis.

Dieses Missverhältnis erzeugt Reibung, sobald mehr als eine Aufgabe wichtig ist. Vielleicht habe ich ein unfertiges Feature im Editor, wenn ein Produktions-Hotfix ansteht. Vielleicht möchte ich einen Pull Request neben main ausführen, zwei Implementierungen vergleichen oder separate Automatisierungsprozesse an unabhängigen Branches arbeiten lassen. Mit nur einem Verzeichnis beginnt jede Unterbrechung damit, den Zustand unter meinen Werkzeugen zu verändern.

Die üblichen Antworten sind Stashing, temporäre Commits, wiederholte Branch-Wechsel oder ein weiterer Clone des Repositorys. Das funktioniert, macht Kontextwechsel aber teurer als nötig.

Git Worktrees gehören zu meinen liebsten Git-Funktionen, weil sie das Problem auf der richtigen Ebene lösen. Statt immer wieder zu ändern, welchen Branch ein Verzeichnis repräsentiert, gebe ich jedem aktiven Branch sein eigenes Verzeichnis.

Weiterlesen