2 points par GN⁺ 2025-11-29 | 1 commentaires | Partager sur WhatsApp
  • À 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

 
GN⁺ 2025-11-29
Avis Hacker News
  • Sur mon réseau, j’ai configuré un seul routeur pour qu’il gère le VPN
    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
    • Sans lancer un navigateur séparé, on peut régler ça simplement avec l’extension FoxyProxy en assignant un proxy selon des motifs d’URL
    • Moi, j’ai mis en place sur un RPi un répartiteur VPN central basé sur x-ray/singbox, avec Tailscale branché dessus pour y accéder de n’importe où
      Le routage géographique fractionné basé sur des règles est aussi pris en charge, ce qui est pratique
    • Je suis curieux de connaître le nom du produit de ce boîtier Linux fanless
  • En voyant le titre « Geo-Unblocked », je m’attendais à une explication sur la façon de configurer directement des blocs IP non britanniques, mais en fait il s’agissait simplement de faire passer une partie du trafic par un VPN
    • Si on joue soi-même le rôle d’ISP, on peut être présent où l’on veut
      À ce sujet, il y a cet article sur ce blog
    • Mais changer l’adresse WAN ressemble à modifier le schéma d’IP à l’intérieur du réseau, donc en pratique je doute que cela fonctionne
  • On peut se demander s’il faut vraiment aller jusque-là juste pour voir occasionnellement des images Imgur, mais en étudiant des documents récents, j’ai réalisé que la dépendance à Imgur est assez forte
    C’était gênant de ne pas voir les captures d’écran, et ce billet sera probablement la motivation finale qu’il me fallait
    • Ça peut sembler excessif aujourd’hui, mais comme les gouvernements cherchent de plus en plus à restreindre l’accès à davantage de contenus, je pense qu’il est sage de s’y préparer à l’avance
    • Imgur est utilisé à plus d’endroits qu’on ne le pense. Par exemple, les images du site web de Core Devices (l’équipe derrière la suite de Pebble) sont aussi hébergées sur Imgur
      Ce type de blocage se contourne facilement, mais si Imgur disparaissait, beaucoup de sites seraient cassés
    • La censure ne s’arrêtera pas à Imgur
      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
    • Moi aussi, j’ai trouvé le contournement plus difficile que prévu, mais en réglant la version gratuite de Veepn sur Singapour, c’était lent mais utilisable dans une certaine mesure
  • Ce genre de méthode pourrait aussi servir à contourner les restrictions de Netflix ou Spotify sur le “même foyer”
    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
  • Sur UniFi aussi, c’est facile à mettre en place avec le policy-based routing (PBR)
    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
    • L’inconvénient, c’est que si IPv6 est activé, le trafic contourne le 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
  • Le blocage géographique d’Imgur au Royaume-Uni persiste via des cookies, donc activer brièvement un VPN ne suffit pas
    Reddit est encore pire : on ne peut même pas consulter le profil d’un utilisateur ayant déjà publié du contenu NSFW
  • Je me demandais s’il existait un moyen d’envoyer uniquement certains domaines via le VPN tout en laissant le reste du trafic en direct
    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é
    • Ça s’appelle le split tunneling basé sur le domaine
      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 pratique, ce montage était déjà implémenté dans cet article
  • J’ai fait quelque chose de similaire avec la fonction PBR d’un routeur OpenWRT
    En une quinzaine de minutes, on peut configurer l’envoi de certains domaines seulement via le VPN, et ça marche très bien
  • Pour ce type de problème, j’utilise plutôt un fichier PAC de proxy
    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