- Imgurs Sperrung für britische Nutzer führte dazu, dass in Reddit, Foren, Dokumenten und an vielen anderen Stellen Bildlinks als „unavailable“ angezeigt wurden
- Statt eines persönlichen VPNs wurde eine automatische Umgehungsstruktur auf Netzwerkebene aufgebaut, damit Imgur auf allen Geräten zugänglich ist
- Es wurde eine Architektur mit Pi-hole, Traefik, Gluetun, Nginx und NixOS entwickelt, die DNS-Sperren umgeht und den Traffic über ein VPN leitet
- Mit TLS-Pass-Through und gemeinsam genutztem Docker-Netzwerk wird verschlüsselter Traffic unverändert durchgereicht und die Verlangsamung auf ein Minimum reduziert
- Ergebnis: Auf allen Geräten ist der Zugriff auf Imgur-Bildern ohne separate Konfiguration möglich – Umsetzung einer transparente Netzwerk-Bypass-Struktur ohne Geschwindigkeitsverlust
Imgur-Blockierung und Unannehmlichkeiten
- Nachdem Imgur den Zugriff für Nutzer aus Großbritannien blockierte, trat das Problem auf, dass Bildlinks auf verschiedenen Webseiten wie Reddit, Foren und Dokumenten nicht angezeigt wurden
- Die Vorschau-Bilder der Minecraft-Shader waren alle verschwunden, sodass nicht erkennbar war, welcher Shader gemeint war
- Auch in älteren Beiträgen oder README-Dateien blieben Imgur-Links bestehen, wodurch der Zugriff weiterhin nicht möglich war
Alternative zum VPN auf Geräteebene
- Die übliche Lösung ist ein VPN, doch bei einem 2,5-Gbps-Internetanschluss führt das Umleiten des gesamten Traffics durch ein VPN zu Geschwindigkeitsverlusten
- Für jedes Gerät muss ein VPN installiert und verbunden werden, was ein Aufwand im Management verursacht
- Ziel war eine netzwerkweite Lösung ohne Client-Konfiguration, die automatisch auf allen Geräten funktioniert
Netzwerkebene Architektur
- In der bestehenden Homelab-Umgebung wurden bereits Traefik (Reverse Proxy), Pi-hole (DNS) und NixOS (deklarative Konfiguration) genutzt
- Auf DNS-Ebene werden
i.imgur.com-Anfragen abgefangen und an den VPN-Container (Gluetun) weitergeleitet
- Pi-hole gibt die IP von Traefik zurück
- Traefik prüft den SNI-Hostnamen und leitet zu Gluetun weiter
- Gluetun leitet die Anfrage über VPN weiter
- Nginx innerhalb von Gluetun proxy-t zum echten Imgur-Server
- Das Bild wird anschließend über den Tunnel zurückgegeben
Nginx- und Gluetun-Setup
- Da Gluetun nur die VPN-Verbindung bereitstellt, wird ein Nginx benötigt, der als Proxy im VPN-Netzwerk agiert
- Nginx ist im TCP-Stream-Modus konfiguriert, liest den SNI-Header und leitet den Traffic an
i.imgur.com:443 weiter
- Der TLS-Handshake wird End-to-End durchgeführt, daher sieht Nginx keine entschlüsselten Daten
- In Docker Compose laufen zwei Container (Gluetun, Nginx)
- Mit
network_mode: "service:gluetun" teilt Nginx den Netzwerk-Stack mit Gluetun
- Alle Nginx-Traffic-Pakete passieren automatisch den VPN-Tunnel
Traefik- und NixOS-Integration
- Traefik verwendet TCP-Routing und TLS-Pass-Through, um
i.imgur.com-Anfragen an Gluetun zu übergeben
- TLS wird nicht terminiert; lediglich der SNI-Header wird geprüft
- In NixOS wird der Docker-Compose-Stack als systemd-Dienst ausgeführt
- Mit Agenix werden VPN-Zugangsdaten verschlüsselt gespeichert
- Das gesamte dotfiles-Repository bleibt öffentlich, während vertrauliche Daten geschützt bleiben
Ergebnis und Performance
- Alle Geräte im Netzwerk (Smartphone, Laptop, Gästegerät inklusive) können ohne zusätzliche Konfiguration auf Imgur-Bilder zugreifen
- Pi-hole übernimmt DNS-Abfang, Traefik das Routing, Gluetun das VPN-Tunneling
- Die Bildladezeit ist nahezu unverändert, denn nur der Imgur-Traffic läuft über VPN, sodass die durchschnittliche Geschwindigkeit des übrigen Traffics erhalten bleibt
- Die Wartung ist unkompliziert, und es wurde eine automatisierte Struktur für die Entsperrung geografischer Sperren im Homelab umgesetzt
- Imgur-basierte Inhalte wie Minecraft-Shader sind wieder normal einsehbar
1 Kommentare
Hacker-News-Kommentar
Ich nutze eine günstige lüfterlose Box mit Linux und mehreren Ports und habe mit systemd-networkd einmalig ein WireGuard-Interface eingerichtet.
Dadurch kann ich nur bestimmten Traffic über das VPN routen oder auch eine eigene VPN-only-SSID/VLAN betreiben.
Allerdings kann domainbasiertes Routing knifflig sein, daher überlege ich, bei Bedarf einen Proxy mit lokalem DNS-Override auf dem Router zu ergänzen.
Regelbasiertes geografisches Split-Routing wird ebenfalls unterstützt, was sehr praktisch ist.
Einen passenden Artikel dazu gibt es in diesem Blog.
Es war lästig, dass Screenshots nicht angezeigt wurden, und dieser Beitrag ist für mich wohl der letzte Anstoß.
Solche Sperren lassen sich zwar leicht umgehen, aber wenn Imgur verschwinden würde, wären viele Websites kaputt.
Selbst wenn Menschen Zensur umgehen, ist es wichtig, dass ausländische Server sich autoritären Regulierungen nicht beugen müssen, solange der Verlust an Traffic nicht allzu groß ist.
Auch die EU scheint in eine ähnliche Richtung zu gehen, daher sollten Werkzeuge, mit denen sich Zensur verweigern lässt, weit verbreitet sein.
Wenn man das zusammen mit PiHole auf einem Raspberry Pi oder Mini-PC einrichtet, könnte man den Traffic des Haushalts der Familie durch die eigene IP tunneln.
Man fügt in der mobilen App eine WireGuard-Konfigurationsdatei hinzu und legt dann in der Policy-Engine fest, dass nur bestimmte Domains über das VPN-Interface geroutet werden.
Ich habe das vorläufig mit langen Firewall-Regeln gelöst, die IPv6-Bereiche blockieren, wurde aber auf Cloudflare-basierten Websites ausgesperrt.
Hoffentlich unterstützt UniFi bald IPv6-WireGuard.
Bei Reddit ist es noch schlimmer: Dort kann man nicht einmal die Profile von Nutzern ansehen, die irgendwann einmal NSFW-Beiträge gepostet haben.
So könnte alles automatisch laufen, ohne das VPN ständig ein- und ausschalten zu müssen.
Das wäre zum Beispiel nützlich bei Social-Media-Plattformen mit Altersverifikation, Apps mit Ländersperren (wie Spotify) oder bei zensierten Nachrichtenseiten.
In der Regel gilt das nur für HTTP/S-Anfragen, aber Anbieter wie ZScaler erweitern das auch auf andere Protokolle.
Bei Tailscale übernimmt die Funktion App Connector diese Rolle.
In etwa 15 Minuten kann man konfigurieren, dass nur bestimmte Domains über das VPN laufen, und das funktioniert sehr gut.
In Umgebungen wie Flugzeug-WLAN, in denen VPN blockiert ist, SSH aber erlaubt bleibt, habe ich dynamisches Forwarding mit einer PAC-Datei kombiniert, sodass Bordunterhaltung oder Tracking-Seiten direkt verbunden werden.
Das funktioniert ziemlich gut.