2 pontos por GN⁺ 2025-11-29 | 1 comentários | Compartilhar no WhatsApp
  • O bloqueio de usuários da Imgur no Reino Unido gerou o problema de que links de imagem em vários lugares, como Reddit, fóruns e documentos, eram exibidos como “unavailable”
  • Em vez de uma VPN pessoal, foi montada uma estrutura de desvio automático em nível de rede inteira para permitir acesso ao Imgur em todos os dispositivos
  • Foi projetada uma arquitetura combinando Pi-hole, Traefik, Gluetun, Nginx e NixOS para contornar bloqueios de DNS e encaminhar o tráfego pela VPN
  • Usando TLS pass-through e compartilhamento de rede Docker, o tráfego permanece criptografado e a perda de desempenho é minimizada
  • Como resultado, o acesso às imagens do Imgur ficou disponível em todos os dispositivos sem configuração individual e foi implementado um mecanismo de desbloqueio geográfico transparente em nível de rede sem perda de velocidade

Casos e incômodos com o bloqueio da Imgur

  • Quando a Imgur bloqueou o acesso de usuários no Reino Unido, surgiu o problema de que links de imagem em diferentes páginas da web, como Reddit, fóruns e documentos, deixaram de aparecer
    • Todas as imagens de pré-visualização de shaders do Minecraft desapareceram, deixando impossível identificar qual shader era
    • Mesmo em posts antigos ou arquivos README, os links da Imgur ainda permaneciam, mantendo a indisponibilidade

Escolha de uma solução em nível de rede em vez de VPN

  • A solução comum seria usar VPN, mas em um ambiente de internet de 2,5 Gbps desviar todo o tráfego pela VPN causa perda de velocidade
  • Há ainda o problema de complexidade operacional de ter que instalar e conectar VPN em cada dispositivo
  • O objetivo foi obter uma solução em nível de rede que funcione de forma automática em todos os dispositivos, sem necessidade de configuração do cliente

Design da arquitetura em nível de rede

  • No ambiente de homelab existente já se usava Traefik (reverse proxy), Pi-hole (DNS) e NixOS (configuração declarativa)
  • A solicitação a i.imgur.com é interceptada na etapa de DNS e encaminhada para o container de conexão VPN (Gluetun)
    • Pi-hole retorna o IP do Traefik
    • Traefik verifica o hostname do SNI e roteia para Gluetun
    • Gluetun repassa a solicitação pela VPN
    • O Nginx dentro do Gluetun faz proxy para o servidor real da Imgur
    • A imagem é retornada novamente pelo túnel

Configuração de Nginx e Gluetun

  • Como o Gluetun só fornece conexão VPN, é necessário um Nginx para cumprir o papel de proxy dentro da rede da VPN
  • O Nginx é configurado em modo stream TCP para ler cabeçalho SNI e encaminhar tráfego para i.imgur.com:443
    • O handshake TLS é realizado de ponta a ponta, então o Nginx não vê dados descriptografados
  • São executados dois containers (Gluetun, Nginx) no Docker Compose
    • Com a configuração network_mode: "service:gluetun", o Nginx compartilha a stack de rede do Gluetun
    • Todo tráfego do Nginx passa automaticamente pelo túnel VPN

Integração com Traefik e NixOS

  • Traefik usa roteamento TCP e TLS pass-through para encaminhar solicitações de i.imgur.com para o Gluetun
    • Ele inspeciona apenas o cabeçalho SNI sem encerrar TLS
  • No NixOS, a stack de Docker Compose é executada como serviço systemd
    • Credenciais da VPN são armazenadas criptograficamente com Agenix
    • Todo repositório de dotfiles pode ficar público e ainda assim manter segredos protegidos

Resultado e desempenho

  • Todos os dispositivos da rede (incluindo celular, notebook e dispositivos de convidados) conseguem acessar imagens do Imgur sem configuração extra
  • Pi-hole intercepta DNS, Traefik roteia e Gluetun realiza o túnel VPN
  • Atraso de carregamento de imagem é quase inexistente; apenas o tráfego do Imgur segue pela VPN, mantendo a velocidade de tráfego normal
  • A manutenção fica simples e a estrutura de desbloqueio geográfico automatizado da rede é completada em ambiente homelab
  • Conteúdos baseados em Imgur, como shaders do Minecraft, podem ser verificados normalmente novamente

1 comentários

 
GN⁺ 2025-11-29
Opinião no Hacker News
  • Na minha rede, configurei para que apenas um roteador soubesse usar VPN
    Coloquei várias portas em uma caixinha barata fanless rodando Linux e deixei a interface WireGuard configurada uma única vez com systemd-networkd
    Com isso, dá para rotear apenas certos tráfegos pela VPN ou até manter um SSID/VLAN separado só para VPN
    Só que o roteamento baseado em domínio pode ser complicado, então, se precisar, penso em adicionar ao roteador um proxy com override de DNS local
    • Dá para resolver isso facilmente sem abrir um navegador separado usando a extensão FoxyProxy para definir proxies por padrão de URL
    • Eu uso um splitter central de VPN baseado em x-ray/singbox em um RPi, com Tailscale acoplado para poder acessar de qualquer lugar
      Também suporta roteamento geográfico dividido baseado em regras, o que é útil
    • Fiquei curioso sobre o nome do produto dessa caixa Linux fanless
  • Quando vi o título “Geo-Unblocked”, achei que fosse sobre montar diretamente blocos de IP fora do Reino Unido, mas era só sobre mandar parte do tráfego pela VPN
    • Se você atuar diretamente como ISP, pode estar onde quiser
      A propósito, há um texto relacionado neste blog
    • Mas mudar o endereço WAN parece algo parecido com mudar o esquema de IP dentro da rede, então na prática acho que isso não funcionaria
  • Dá até para pensar “precisa mesmo chegar a esse ponto só para ver imagens do Imgur?”, mas ao pesquisar materiais recentemente percebi como a dependência do Imgur é alta
    Era incômodo não conseguir ver screenshots, e acho que este texto vai ser o empurrão final
    • Pode parecer exagero agora, mas os governos estão tentando restringir o acesso a cada vez mais conteúdo, então acho sensato me preparar antes
    • O Imgur é usado em mais lugares do que parece. Por exemplo, as imagens do site da Core Devices (equipe sucessora da Pebble) também estão no Imgur
      Esse tipo de bloqueio é fácil de contornar, mas se o Imgur sumir, muitos sites vão quebrar
    • A censura não vai parar no Imgur
      Mesmo que as pessoas contornem a censura e a perda de tráfego não seja grande, é importante que servidores no exterior não precisem se curvar a regulações autoritárias
      A UE também parece estar indo numa direção parecida, então ferramentas capazes de rejeitar censura precisam se espalhar amplamente
    • Para mim também foi mais difícil do que eu esperava contornar isso, mas a versão gratuita do Veepn configurada para Singapura funcionou mais ou menos, embora fosse lenta
  • Esse tipo de abordagem talvez também sirva para contornar as restrições de “mesma residência” do Netflix ou Spotify
    Se configurar isso em um Raspberry Pi ou mini PC junto com PiHole, dá para tunelar o tráfego da casa da família pelo seu IP
  • No UniFi isso também dá para implementar facilmente com policy-based routing (PBR)
    Basta adicionar o arquivo de configuração do WireGuard no app móvel e, no mecanismo de políticas, definir que apenas certos domínios sejam roteados pela interface VPN
    • O ponto fraco é que, se o IPv6 estiver ativado, ele acaba contornando a VPN
      Eu quebrei o galho temporariamente com uma longa regra de firewall bloqueando faixas IPv6, mas isso foi barrado em sites baseados em Cloudflare
      Tomara que o UniFi passe a oferecer suporte a WireGuard com IPv6
  • O bloqueio regional do Imgur no Reino Unido persiste via cookie, então ligar a VPN por um instante não resolve
    O Reddit é ainda pior: você nem consegue ver o perfil de usuários que já postaram conteúdo NSFW
  • Eu queria saber se existe uma forma de enviar só domínios específicos pela VPN e manter o resto como tráfego normal
    Assim isso poderia ser tratado automaticamente sem a chatice de ficar ligando e desligando a VPN toda hora
    Por exemplo, seria útil em casos como redes sociais com verificação de idade, apps bloqueados por país (como Spotify) e censura de sites de notícia
    • Isso se chama split tunneling baseado em domínio
      Em geral se aplica apenas a requisições HTTP/S, mas vendors como ZScaler estendem isso a outros protocolos
      No Tailscale, o recurso App Connector faz esse papel
    • Na prática, aquele texto já implementava exatamente esse tipo de configuração
  • Eu fiz algo parecido usando o recurso de PBR em roteador OpenWRT
    Em uns 15 minutos dá para configurar para mandar só domínios específicos pela VPN, e funciona muito bem
  • Eu costumo resolver esse tipo de problema com arquivo PAC de proxy
    Em ambientes como Wi‑Fi de avião, onde a VPN é bloqueada, SSH costuma ser permitido, então combinei forwarding dinâmico com um arquivo PAC para deixar o entretenimento de bordo e sites de rastreamento conectarem diretamente
    Funciona muito bem