- À la suite du blocage des utilisateurs britanniques par Imgur, des liens d'image sur Reddit, les forums, la documentation, etc. s'affichaient tous comme « unavailable »
- J'ai mis en place une structure de contournement automatique au niveau réseau, au lieu d'un VPN personnel, afin de rendre Imgur accessible depuis tous les appareils
- Conception d'une architecture combinant Pi-hole, Traefik, Gluetun, Nginx, NixOS pour contourner le blocage DNS et acheminer le trafic via VPN
- Utilisation du TLS pass-through et du partage de réseau Docker pour transmettre le trafic chiffré tel quel tout en minimisant la perte de vitesse
- Résultat : accès aux images Imgur possible sur tous les appareils sans réglage individuel, avec une structure de déblocage réseau régional transparente et sans perte de performance
Cas de blocage Imgur et désagréments
- Après le blocage d'Imgur pour les utilisateurs britanniques, les liens d'images de pages comme Reddit, des forums ou des documents s'affichaient comme « unavailable »
- Les aperçus des shaders Minecraft ont tous disparu, rendant impossible d'identifier chaque shader
- Le problème persiste également sur les anciens posts ou fichiers README, où des liens Imgur restent présents et ne sont plus accessibles
Choisir une solution réseau plutôt qu'un VPN
- La solution classique consiste à utiliser un VPN, mais le détournement de l'ensemble du trafic via un VPN provoque une baisse de vitesse sur une connexion 2,5 Gbps
- Il faut installer et connecter un VPN sur chaque appareil, ce qui crée des problèmes de complexité de gestion
- L'objectif était d'obtenir une solution au niveau réseau qui fonctionne automatiquement sur tous les appareils sans configuration client
Conception de l'architecture au niveau réseau
- Dans un homelab existant, j'utilisais déjà Traefik (reverse proxy), Pi-hole (DNS), NixOS (configuration déclarative)
- À l'étape DNS, intercepter les requêtes
i.imgur.com et les router vers le conteneur de connexion VPN (Gluetun)
- Pi-hole renvoie l'IP de Traefik
- Traefik vérifie le nom d'hôte SNI puis route vers Gluetun
- Gluetun transmet la requête via VPN
- Le Nginx interne à Gluetun proxy les demandes vers les vrais serveurs Imgur
- L'image est ensuite renvoyée via le tunnel
Configuration de Nginx et Gluetun
- Gluetun ne fournit que la connexion VPN, donc un Nginx est nécessaire pour assurer le rôle de proxy à l'intérieur du réseau VPN
- Nginx est configuré en mode flux TCP pour lire l'en-tête SNI et router le trafic vers
i.imgur.com:443
- La poignée de main TLS est effectuée de bout en bout, donc Nginx ne voit pas de données déchiffrées
- Exécuter deux conteneurs (
Gluetun, Nginx) dans Docker Compose
- Le paramètre
network_mode: "service:gluetun" permet à Nginx de partager la pile réseau de Gluetun
- Tout le trafic de Nginx passe alors automatiquement par le tunnel VPN
Intégration avec Traefik et NixOS
- Traefik utilise le routage TCP et le TLS pass-through pour acheminer les requêtes
i.imgur.com vers Gluetun
- Il n'y a pas de terminaison TLS, seul l'en-tête SNI est inspecté
- Avec NixOS, la stack Docker Compose est exécutée via un service systemd
- Les identifiants VPN sont stockés de manière chiffrée avec Agenix
- Le dépôt de dotfiles peut rester public tout en protégeant les secrets
Résultats et performances
- Tous les appareils du réseau (smartphones, laptops, appareils invités inclus) peuvent accéder aux images Imgur sans réglage individuel
- Pi-hole intercepte le DNS, Traefik route, Gluetun assure le tunneling VPN
- Le délai de chargement des images est presque nul, et seul le trafic Imgur passe via VPN tout en conservant la vitesse du trafic normal
- La maintenance est simple et la structure de déblocage régional automatisée pour le homelab est achevée
- Les contenus basés sur Imgur, comme les shaders Minecraft, peuvent de nouveau être consultés normalement
1 commentaires
Avis Hacker News
J’utilise un boîtier fanless low-cost sous Linux avec plusieurs ports, et j’ai configuré une interface WireGuard une seule fois avec systemd-networkd
Du coup, je peux router seulement certains flux via le VPN, ou avoir un SSID/VLAN séparé dédié au VPN
En revanche, le routage basé sur le domaine peut être délicat, donc j’envisage d’ajouter au routeur un proxy capable de faire des surcharges DNS locales si nécessaire
Le routage géographique fractionné basé sur des règles est aussi pris en charge, ce qui est pratique
À ce sujet, il y a cet article sur ce blog
C’était gênant de ne pas voir les captures d’écran, et ce billet sera probablement la motivation finale qu’il me fallait
Ce type de blocage se contourne facilement, mais si Imgur disparaissait, beaucoup de sites seraient cassés
Même si les gens contournent la censure, s’il n’y a pas de perte de trafic significative, il est important que les serveurs étrangers n’aient pas à céder à des régulations autoritaires
On dirait que l’UE va dans une direction similaire, donc il faut diffuser largement des outils capables de refuser la censure
En configurant ça sur un Raspberry Pi ou un mini PC avec PiHole, on pourrait tunneliser le trafic du domicile familial via sa propre IP
Il suffit d’ajouter le fichier de configuration WireGuard dans l’app mobile, puis d’indiquer dans le moteur de politiques que seuls certains domaines doivent être routés vers l’interface VPN
J’ai provisoirement réglé le problème en créant une longue règle de pare-feu qui bloque les plages IPv6, mais ça a cassé les sites basés sur Cloudflare
J’espère que UniFi prendra en charge WireGuard en IPv6
Reddit est encore pire : on ne peut même pas consulter le profil d’un utilisateur ayant déjà publié du contenu NSFW
Cela permettrait d’automatiser le traitement sans devoir activer et désactiver le VPN à chaque fois
Par exemple, ce serait utile pour des situations comme les réseaux sociaux avec vérification d’âge, les apps bloquées selon le pays (comme Spotify) ou la censure de sites d’actualité
En général, cela s’applique uniquement aux requêtes HTTP/S, mais des fournisseurs comme ZScaler l’étendent à d’autres protocoles
Chez Tailscale, la fonctionnalité App Connector remplit ce rôle
En une quinzaine de minutes, on peut configurer l’envoi de certains domaines seulement via le VPN, et ça marche très bien
Même dans des environnements où le VPN est bloqué, comme le Wi-Fi en avion, SSH reste autorisé, donc j’ai combiné le dynamic forwarding avec un fichier PAC pour que le divertissement à bord ou les sites de tracking passent en connexion directe
Ça fonctionne plutôt bien