- Pemblokiran pengguna Inggris oleh Imgur menyebabkan masalah di mana tautan gambar di Reddit, forum, dokumentasi, dan berbagai tempat lain semuanya ditampilkan sebagai “unavailable”
- Alih-alih VPN per perangkat, dibangun struktur bypass otomatis di tingkat seluruh jaringan agar Imgur bisa diakses dari semua perangkat
- Dirancang arsitektur yang menggabungkan Pi-hole, Traefik, Gluetun, Nginx, dan NixOS untuk melewati blokir DNS dan meneruskan trafik melalui VPN
- Dengan memanfaatkan TLS passthrough dan berbagi jaringan Docker, trafik terenkripsi diteruskan apa adanya sambil meminimalkan penurunan kecepatan
- Hasilnya, gambar Imgur dapat diakses dari semua perangkat tanpa konfigurasi tambahan, dengan struktur pembukaan blokir jaringan yang transparan tanpa kehilangan kecepatan
Pemblokiran Imgur dan contoh ketidaknyamanan
- Setelah Imgur memblokir akses pengguna Inggris, muncul masalah tautan gambar di Reddit, forum, dokumentasi, dan berbagai halaman web lain tidak bisa ditampilkan
- Semua gambar pratinjau shader Minecraft hilang, sehingga tidak mungkin mengetahui shader yang dimaksud
- Di posting lama maupun file README, banyak tautan Imgur masih tersisa sehingga kondisi tidak dapat diakses terus berlanjut
Memilih solusi tingkat jaringan alih-alih VPN
- Solusi umum adalah memakai VPN, tetapi jika seluruh trafik dialihkan lewat VPN pada lingkungan internet cepat 2.5Gbps, kecepatan akan turun
- Ada juga masalah kompleksitas pengelolaan karena VPN harus dipasang dan dihubungkan di setiap perangkat
- Tujuannya adalah solusi tingkat jaringan yang tidak memerlukan konfigurasi klien dan bekerja otomatis di semua perangkat
Perancangan arsitektur level jaringan
- Di lingkungan homelab yang sudah ada, telah digunakan Traefik (reverse proxy), Pi-hole (DNS), dan NixOS (konfigurasi deklaratif)
- Pada tahap DNS, permintaan
i.imgur.comdicegat lalu diteruskan melalui kontainer koneksi VPN (Gluetun)- Pi-hole mengembalikan IP Traefik
- Traefik memeriksa hostname SNI lalu merutekan ke Gluetun
- Gluetun meneruskan permintaan lewat VPN
- Nginx di dalam Gluetun mem-proxy ke server Imgur yang sebenarnya
- Gambar kemudian dikembalikan lagi melalui tunnel
Konfigurasi Nginx dan Gluetun
- Karena Gluetun hanya menyediakan koneksi VPN, diperlukan Nginx untuk berperan sebagai proxy di dalam jaringan VPN
- Nginx dikonfigurasi dalam mode TCP stream untuk membaca header SNI dan meneruskan trafik ke
i.imgur.com:443- TLS handshake berlangsung end-to-end sehingga Nginx tidak melihat data yang telah didekripsi
- Di Docker Compose, dijalankan dua kontainer (Gluetun dan Nginx)
- Dengan pengaturan
network_mode: "service:gluetun", Nginx berbagi stack jaringan milik Gluetun - Semua trafik Nginx otomatis melewati tunnel VPN
- Dengan pengaturan
Integrasi Traefik dan NixOS
- Traefik menggunakan TCP routing dan TLS passthrough untuk meneruskan permintaan
i.imgur.comke Gluetun- TLS tidak diakhiri, hanya header SNI yang diperiksa
- Di NixOS, stack Docker Compose dijalankan sebagai layanan systemd
- Agenix digunakan untuk menyimpan kredensial VPN dalam keadaan terenkripsi
- Repositori dotfiles tetap bisa dibuka ke publik sambil tetap melindungi informasi rahasia
Hasil dan performa
- Semua perangkat dalam jaringan, termasuk ponsel, laptop, dan perangkat tamu, bisa mengakses gambar Imgur tanpa pengaturan tambahan
- Pi-hole mencegat DNS, Traefik melakukan routing, dan Gluetun menangani tunneling VPN
- Hampir tidak ada jeda saat memuat gambar, dan karena hanya trafik Imgur yang melewati VPN, kecepatan trafik umum tetap terjaga
- Perawatannya sederhana, dan tercipta struktur pembukaan blokir wilayah yang otomatis di lingkungan homelab
- Konten berbasis Imgur seperti shader Minecraft kini bisa kembali dilihat dengan normal
1 komentar
Opini Hacker News
Saya memakai box fanless murah dengan Linux dan beberapa port, lalu cukup menyiapkan antarmuka WireGuard sekali saja dengan systemd-networkd
Dengan begitu, hanya trafik tertentu yang bisa dirutekan lewat VPN, atau bisa juga dibuat SSID/VLAN khusus VPN
Namun routing berbasis domain bisa agak rumit, jadi kalau perlu saya berencana menambahkan proxy di router yang memungkinkan override DNS lokal
Ini juga mendukung routing terpisah geografis berbasis aturan, jadi cukup berguna
Sebagai referensi, ada tulisan terkait di blog ini
Saya kesal karena tangkapan layar tidak tampil, dan tulisan ini mungkin jadi dorongan terakhir buat saya
Pemblokiran seperti ini memang mudah dilewati, tetapi kalau Imgur sampai hilang, banyak situs akan rusak
Jika orang masih bisa menghindari sensor tanpa kehilangan trafik yang berarti, maka penting bahwa server luar negeri tidak perlu tunduk pada regulasi otoriter
UE juga tampaknya bergerak ke arah serupa, jadi alat untuk menolak sensor harus tersebar luas
Jika disiapkan di Raspberry Pi atau mini PC bersama PiHole, trafik rumah keluarga bisa ditunnel ke IP saya
Tambahkan file konfigurasi WireGuard di aplikasi seluler, lalu di policy engine tentukan agar hanya domain tertentu dirutekan ke antarmuka VPN
Saya sempat mengatasi sementara dengan membuat aturan firewall panjang untuk memblokir rentang IPv6, tetapi situs berbasis Cloudflare jadi bermasalah
Semoga UniFi segera mendukung IPv6 WireGuard
Reddit bahkan lebih parah: profil pengguna yang pernah mengunggah postingan NSFW pun tidak bisa dilihat
Dengan begitu semuanya bisa berjalan otomatis tanpa repot menyalakan dan mematikan VPN setiap kali
Misalnya ini akan berguna untuk media sosial yang memerlukan verifikasi usia, aplikasi yang diblokir per negara (seperti Spotify), atau sensor pada situs berita
Biasanya hanya diterapkan pada permintaan HTTP/S, tetapi vendor seperti ZScaler memperluasnya ke protokol lain
Di Tailscale, fitur App Connector menjalankan peran tersebut
Perlu sekitar 15 menit untuk mengatur agar hanya domain tertentu yang lewat VPN, dan hasilnya bekerja sangat baik
Di lingkungan seperti Wi-Fi pesawat yang memblokir VPN, SSH biasanya masih diizinkan, jadi saya menggabungkan dynamic forwarding dengan file PAC agar hiburan dalam pesawat atau situs pelacakan terhubung langsung
Ini bekerja cukup baik