- Imgur'un Birleşik Krallık kullanıcı erişimini engellemesi nedeniyle Reddit, forum, doküman gibi yerlerdeki görüntü bağlantıları tümüyle “unavailable” olarak göründü
- Kişisel VPN yerine, tüm cihazlarda Imgur erişimini mümkün kılmak için ağ düzeyi otomatik geçiş mimarisi kuruldu
- Pi-hole, Traefik, Gluetun, Nginx, NixOS kullanılarak DNS engelini aşan ve trafiği VPN üzerinden ileten bir yapı tasarlandı
- TLS pass-through ve Docker ağ paylaşımı ile şifreli trafiği bozmayıp hız kaybını en aza indirmek için doğrudan iletim sağlandı
- Sonuç olarak tüm cihazlarda ek ayar gerekmeden Imgur görsellerine erişim mümkün oldu, hız kaybı olmadan şeffaf bir ağ düzeyi bölgesel engel kaldırma mimarisi hayata geçirildi
Imgur engellemesi ve erişim sorunları
- Imgur'un Birleşik Krallık kullanıcı erişimini engellemesiyle, Reddit·forum·doküman gibi çeşitli web sayfalarındaki görsel bağlantıların gösterilemediği bir durum oluştu
- Minecraft shader önizleme görselleri tamamen kayboldu, hangi shader olduğu belirlenemedi
- Eski gönderilerde veya README dosyalarında bile Imgur bağlantıları kalmış olması nedeniyle erişim engeli sürdü
VPN yerine ağ düzeyi çözüme geçiş
- Genel çözüm VPN kullanmak olsa da, 2.5 Gbps yüksek hızlı internette tüm trafiği VPN ile geçirdiğinizde hız düşer
- Her cihaza VPN kurulup bağlanması gereken yönetim karmaşıklığı da mevcut
- Tüm cihazlarda otomatik çalışan, istemci tarafında yapılandırma gerektirmeyen bir ağ düzeyi çözüm hedeflendi
Ağ düzeyi yapı tasarımı
- Mevcut home lab ortamında zaten Traefik (ters proxy) , Pi-hole (DNS) , NixOS (bildirimsel yapılandırma) kullanılıyordu
- DNS katmanında
i.imgur.com istekleri yakalanıp VPN bağlantılı konteynere (Gluetun) iletilir
- Pi-hole, Traefik'in IP adresini döndürür
- Traefik, SNI host adını doğrulayarak Gluetun'a yönlendirir
- Gluetun, isteği VPN üzerinden iletir
- Gluetun içindeki Nginx gerçek Imgur sunucusuna proxy yapar
- Görsel, tünel üzerinden geri döner
Nginx ve Gluetun yapılandırması
- Gluetun yalnızca VPN bağlantısı sunduğu için, VPN ağı içinde proxy görevi görecek bir Nginx gereklidir
- Nginx, TCP stream modu ile ayarlandı; SNI başlığını okuyup trafiği
i.imgur.com:443'e iletir
- TLS handshake uçtan uca gerçekleştiğinden Nginx, şifrelenmemiş veri görmez
- Docker Compose'da iki konteyner (Gluetun ve Nginx) çalıştırılır
network_mode: "service:gluetun" ayarıyla Nginx, Gluetun'ın ağ yığınıyla paylaşım yapar
- Tüm Nginx trafiği otomatik olarak VPN tünelini geçer
Traefik ve NixOS entegrasyonu
- Traefik,
i.imgur.com isteklerini Gluetun'a iletmek için TCP yönlendirme ve TLS pass-through kullanır
- TLS sonlandırılmadan yalnızca SNI başlığı doğrulanır
- NixOS'ta systemd servisi ile Docker Compose yığını çalıştırılır
- Agenix ile VPN kimlik bilgileri şifreli saklanır
- Tüm dotfiles deposu herkese açık kalırken bile gizli bilgiler korunur
Sonuç ve performans
- Ağ içindeki tüm cihazlar (telefon, dizüstü bilgisayar, misafir cihazlar dahil) ekstra ayar olmadan Imgur görsellerine erişebilir
- Pi-hole DNS'i yakalar, Traefik yönlendirir, Gluetun VPN tünelleme yapar
- Görsel yükleme gecikmesi neredeyse yoktur; yalnızca Imgur trafiği VPN'den geçerken normal trafik hızı korunur
- Bakımı kolay ve home lab ortamında otomatikleştirilmiş bir coğrafi engel kaldırma yapısı tamamlanmış oldu
- Minecraft shader gibi Imgur tabanlı içerikler tekrar normal şekilde görüntülenebilir
1 yorum
Hacker News yorumu
Linux yüklü ucuz, fansız bir kutuda birden fazla port var ve
systemd-networkdile WireGuard arayüzünü sadece bir kez yapılandırdımBu sayede yalnızca belirli trafiği VPN üzerinden yönlendirebiliyor ya da VPN'e özel ayrı bir SSID/VLAN tutabiliyorum
Yalnız alan adı tabanlı yönlendirme zor olabiliyor; gerekirse router'a yerel DNS override yapabilen bir proxy eklemeyi düşünüyorum
Kural tabanlı coğrafi bölünmüş yönlendirme de desteklediği için kullanışlı
İlgili yazı da şu blogda: bu blog
Ekran görüntüleri görünmeyince sinir bozucu oluyordu; sanırım bu yazı son itici güç olacak
Bu tür engeller kolay aşılabiliyor, ama Imgur ortadan kalkarsa birçok site bozulur
İnsanlar sansürü aşsa bile trafik kaybı büyük değilse, yurt dışındaki sunucuların otoriter düzenlemelere boyun eğmek zorunda olmaması önemli
AB de benzer bir yöne gidiyor gibi görünüyor; bu yüzden sansürü reddedebilen araçların yaygınlaşması gerekiyor
Raspberry Pi ya da mini PC üzerinde PiHole ile birlikte kurarsan, aile evinin trafiğini benim IP'm üzerinden tünelleyebilirsin
Mobil uygulamada WireGuard yapılandırma dosyasını ekleyip, policy engine içinde yalnızca belirli alan adlarını VPN arayüzüne yönlendirecek şekilde ayarlaman yeterli
Ben geçici çözüm olarak IPv6 aralıklarını engelleyen uzun firewall kuralları yazdım, ama Cloudflare tabanlı sitelerde sorun çıktı
Keşke UniFi IPv6 WireGuard desteği verse
Reddit daha da kötü; NSFW gönderi paylaşmış kullanıcıların profillerine bile bakamıyorsun
Böylece her seferinde VPN'i açıp kapatma zahmeti olmadan iş otomatik yürür
Örneğin yaş doğrulaması isteyen sosyal ağlar, ülkeye göre engellenen uygulamalar (Spotify vb.) ya da haber sitesi sansürü gibi durumlarda faydalı olur
Genelde yalnızca HTTP/S isteklerine uygulanır, ama ZScaler gibi satıcılar bunu başka protokollere de genişletiyor
Tailscale tarafında App Connector özelliği bu işi görüyor
Yaklaşık 15 dakikada yalnızca belirli alan adlarını VPN'e gönderecek şekilde kurabiliyorsun ve gayet iyi çalışıyor
Uçak Wi‑Fi'ı gibi VPN'in engellendiği ortamlarda bile SSH açık olduğundan, dynamic forwarding ile PAC dosyasını birleştirip uçak içi eğlence ya da takip sitelerinin doğrudan bağlanmasını sağlayacak şekilde ayarladım
Oldukça iyi çalışıyor