Banyak teman gw pernah ngeluh karena gak bisa buka situs tertentu seperti Reddit atau beberapa situs streaming anime. Umumnya sih karena situs-situs itu diblokir oleh ISP. Solusi mereka saat itu tentu saja pakai VPN. Tapi, sayangnya muncul masalah lain, yaitu kecepatan internet yang langsung turun drastis, apalagi kalau VPN yang digunakan ini gratisan alias dipakai berjamaah.

Nah sebenernya ada solusi lain yang lebih mudah dan murah, yaitu mengaktifkan fitur DNS over HTTPS (DoH) di browser. Beberapa browser populer (Chrome, Firefox, Edge, dll.) udah punya fitur ini. Meskipun begitu, ternyata masih banyak orang yang belum tahu tentang adanya fitur ini.

Settingan DoH pada Chrome dan Firefox

Settingan DoH pada Chrome dan Firefox

Setelah teman gw tahu, salah satunya memberi respon berikut.

Sebuah testimoni

Sebuah testimoni

Dengan mengaktifkan fitur DoH, hampir semua situs yang diblokir oleh ISP bisa dibuka kembali, loh.

Tapi kok bisa, ya?

How do ISPs block websites?

DNS Request Flow

Pertama-tama, kita perlu tahu dulu alur tentang bagaimana sebuah website itu bisa terbuka oleh browser kita.

Ketika kita mengakses sebuah situs seperti www.reddit.com, komputer akan mengirimkan sebuah kueri DNS ke server DNS (DNS resolver). Server DNS ini simplenya berisi informasi/mapping nama-nama domain dan menerjemahkannya ke alamat IP. Sehingga setelah kueri tersebut diterima, nantinya www.reddit.com diterjemahkan ke alamat IP agar laman situs tersebut bisa dimuat kemudian.

Secara default, kueri tersebut akan sampai ke server DNS milik penyedia jasa internet (ISP) atau operator seluler yang kita pakai. Jadi setiap kali kita browsing, ISP tahu kita sedang mengakses situs apa.

image-20250128220902286

DNS Filtering / DNS Hijacking

Jika domain yang kamu buka masuk daftar blokir, server DNS ISP akan mengganti hasil kueri DNS kamu menjadi alamat IP halaman blokir (seperti “Internet Positif” atau “Kominfo SafeNet”). Metode yang digunakan ISP ini lebih dikenal dengan sebutan DNS hijack/poisoning.

Contohnya seperti dibawah ini:

  • Gw coba akses situs www.reddit.com
  • DNS ISP “menjawab” dengan IP 36.86.63.185 (internetpositif.id)
  • Browser akhirnya buka halaman blokir, bukan Reddit
image-20241226140545496

Kita bisa melihat hasil hijack oleh server DNS ISP untuk www.reddit.com menggunakan Wireshark. Dari hasil inspeksi, kueri DNS untuk www.reddit.com telah diarahkan ke internetpositif.id yang beralamat di 36.86.63.185.

Padahal kalau kita cek lagi secara external seperti Dig Google atau Dig Web Interface, ternyata alamat IP dari www.reddit.com menurut Google adalah 151.101.X.140, bukan 36.86.63.185.

Hasil dig situs reddit

Hasil dig situs reddit

Alur pemblokiran website ini bisa diilustrasikan sebagai berikut.

Ilustrasi(nya)

Ilustrasi(nya)

What’s the point of HTTPS?

Kueri DNS itu dikirimkan sebelum trafik/handshake HTTPS terjadi dan isi kuerinya tidak terenkripsi alias plain text. Sehingga ISP dapat membaca dan mengubah isi kuerinya. Selanjutnya, penggunaan HTTPS ini hanya mengenkripsi bagian data atau kontennya saja1, bukan nama domain yang kamu akses.

Saat kita mengunjungi sebuah situs, ISP hanya dapat melihat nama domain dan alamat IP dari situs tersebut. Informasi seperti username, password, dan bahkan URL endpoint/path beserta kuerynya tidak dapat diketahui oleh ISP.

Contoh, jika URL-nya adalah:

  • https://website.com/api/v1/login?username=admin&password=admin

Maka, yang terlihat oleh ISP saat paket data kita transit di server/router mereka hanyalah nama domain, yaitu: website.com, sedangkan datanya akan terenkripsi seperti berikut.

Contoh konten yang dienkripsi

Contoh konten yang dienkripsi

Thou Shalt (By)Pass

DNS over HTTPS (DoH)

Dengan DoH, kueri DNS tadi ikut “dibungkus” dalam HTTPS sebagai bagian dari konten aplikasi yang dikirim ke endpoint DoH, misalnya https://cloudflare-dns.com/dns-query. Karena sekarang kuerinya ini ikut terenkripsi di dalam HTTPS, ISP jadi tidak bisa lagi membongkar dan mengubah isi dari kueri DNS kamu.

Namun, ISP masih bisa tahu kamu terhubung ke DoH providernya (cloudflare-dns.com atau IP 1.1.1.1). Tapi mereka tidak tahu situs apa yang sedang kamu resolve di dalamnya. Sehingga komputer kita terhindar dari “penipuan” alamat yang dilakukan server DNS ISP pada kasus reddit.com di atas.

Notes:

Meski DoH menyembunyikan isi DNS, nama domain yang kamu kunjungi masih bisa terlihat lewat SNI (Server Name Indication) saat TLS handshake.

Fitur baru bernama Encrypted Client Hello (ECH) bisa menyembunyikan ini, tapi belum semua browser dan server mendukungnya.

Hosts file: The Primivite DNS

Sebenarnya, tanpa DoH, kita bisa menghindari “penipuan” alamat IP tadi di level cache, alias melakukan bypass dengan cara yang mirip dengan tekniknya ISP untuk memblokir situs web.

Komputer akan menyimpan alamat dari hasil kueri DNS pada proses sebelumnya di cache. Di request berikutnya nanti, komputer akan mengandalkan entri alamat yang ada pada cache, selama entri tersebut belum kadaluarsa (umumnya 24 jam).

Pada Windows, kita bisa melihat daftar IP dan nama domain yang sudah di cache dengan menjalankan perintah berikut.

C:\>ipconfig /displaydns

Informasi nama-nama domain pada server DNS milik ISP akan selalu up-to-date secara periodik alias bersifat dinamis. Nah, di sistem operasi sendiri, terdapat sebuah file yang merupakan bagian dari sistem DNS, namun bersifat statis, yaitu file hosts.

  • Lokasi di Windows: C:\Windows\System32\drivers\etc\hosts
  • Lokasi di Linux/macOS: /etc/hosts
Windows hosts file

Windows hosts file

Isi dari file hosts ini akan selalu masuk ke dalam entri cache dari DNS. Maka dari itu, kita bisa memanfaatkan hal ini untuk memberi tahu komputer secara langsung (bypass) alamat IP dari sebuah situs.

Contoh:

Misalnya www.reddit.com dengan 151.101.129.140. Kita tinggal menambahkan DNS entri ke dalam file hosts dengan format berikut.

# [Alamat IP] [domain name 1] [domain name 2] [domain name N]
151.101.129.140 reddit.com www.reddit.com

Sekarang kita bisa jalankan kembali perintah yang sama untuk menampilkan DNS cache, tapi sebelum itu ada baiknya DNS cache ini di-flush terlebih dulu.

C:\>ipconfig /flushdns # clear cache dulu untuk menghilangkan "brainwash" dari Server DNS ISP
C:\>ipconfig /displaydns

Seharusnya saat ini www.reddit.com dan reddit.com berada di entry paling atas.

Karena si komputer sudah tahu alamat IP dari www.reddit.com, maka dia tidak perlu lagi “bertanya” ke server DNS milik ISP.

$ tracert -d www.reddit.com

Tracing route to reddit.com [151.101.129.140]
over a maximum of 30 hops:

  1   120 ms     2 ms     3 ms  192.168.43.1
  2     *        *        *     Request timed out.
  3   162 ms    26 ms    26 ms  10.***.44.2
  4   160 ms    25 ms    30 ms  ***.215.36.238 
  5   187 ms    46 ms    46 ms  180.87.12.233
  6   186 ms    57 ms    50 ms  180.87.12.232
  7   191 ms    49 ms    47 ms  180.87.12.250
  8    49 ms    49 ms    48 ms  210.57.30.38
  9   188 ms    53 ms    52 ms  202.84.219.174
 10    70 ms    49 ms    52 ms  202.84.219.174
 11    60 ms    54 ms    49 ms  202.84.224.197
 12    83 ms    80 ms    85 ms  210.57.38.171
 13   205 ms   200 ms   203 ms  151.101.129.140 

Trace complete.

Tekniknya bisa diilustrasikan seperti berikut.

image-20250128224915710

Kalau untuk situs lain gimana?

Caranya, kamu bisa resolve dulu IPnya menggunakan tool dig DNS, misalnya dengan dig milik Google.

image-20211104142819468

Lalu tambahkan hasil record yang di dapat ke dalam hosts file:

image-20211104142858365

Notes:

  • Perlu akses Administrator/root untuk membuka dan mengedit file hosts.
  • Beberapa situs sangat mungkin memiliki lebih dari satu IP (misal CDN) untuk high-availability/load-balance. Jadi menambahkan satu IP di dalam file hosts mungkin bisa menyebabkan situs gagal dimuat karena alamat tersebut sedang dialihkan atau down.

SSH SOCKS Proxy

Untuk solusi bypass yang lebih bersifat pribadi adalah menggunakan Virtual Private Server (VPS) dan memanfaatkan fitur SOCKS proxy bawaan OpenSSH. VPS ini bisa kalian beli atau deploy sendiri di platform cloud seperti Azure/GCP/AWS.

Untuk memanfaatkan proxy SOCKS dari SSH, perintahnya cukup simple:

$ ssh user@vps-ip -D 1080 -N
  • -D 1080: Buka SOCKS proxy di port 1080
  • -N: Tanpa interactive shell.

Saat ini proxy SOCKS sudah tersedia pada local interface, 127.0.0.1:1080. Kita tinggal mengkonfigurasikan browser untuk menggunakan proxy tersebut.

Firefox proxy settings

Firefox proxy settings

Untuk memudahkan proses switching proxy-unproxy, kita bisa pakai ekstensi seperti FoxyProxy. Berikut tampilannya.

FoxyProxy Toogle

FoxyProxy Toogle

Konfigurasinya? sama dengan settingan browser tadi!

Konfigurasi SOCKS Proxy di Foxy Proxy

Konfigurasi SOCKS Proxy di Foxy Proxy

Untuk mengecek apakah proxy tersebut berjalan, cukup kunjungi situs: ifconfig.co/json. Sebagai contoh, hasil berikut menunjukkan IP publik gw sekarang adalah IP publik si VPS dan terdeteksi berada di US.

Akses ifconfig.co dengan proxy

Akses ifconfig.co dengan proxy

Sampai sini ISP hanya bisa lihat gw terhubung dengan ke VPS tapi tidak dengan domain dan kontennya, seperti berikut.

Web trafic yang terenkripsi melalui SSH tunnel

Web trafic yang terenkripsi melalui SSH tunnel

Conclusion

Selain menggunakan VPN, setidaknya ada 3 metode yang bisa kamu coba untuk melakukan bypass web filter yang diterapkan oleh ISP langganan kamu,:

  • Hosts file,
  • DoH,
  • SSH SOCKS Proxy.

Perbandingan singkatnya seperti berikut:

MetodeBypass Web filtersHide the domain we visit from ISP?ProsCons
Hosts fileProbably yesNoFast, simple, offlineStatis, hard to manage
DoHYes, mostlyNoFast, easySo far none,
SSH SOCKS Proxy (VPS)Yes, mostly, but it depends.YesMore privacyPaid, Slow (depending on VPS region)

Gimana kalau IP DoH resolvernya diblokir ISP/Kom*nfo?

Kembali ke VPN/VPS deh. Hahaha.

Tapi sejauh ini sepertinya teknik blokir situs yang dipakai Kom*nfo dan ISP hanya sebatas di DNS hijack/redirection. Karena jika yang diblokir sudah sampai IP penyedia layanan seperti Google dan Cloudflare, besar kemungkinan akan terjadi efek domino, entah down atau semacamnya.

Ya, jadi gak perlu khawatir deh!

Karena sudah kejadian di 2024. Lol.

Apakah dengan ini gw sudah bisa menjadi bjoorka anonymous user?

Nope, kamu tidak 100% anonim. Server tempat kamu tunneling (VPS atau VPN) tetap bisa melihat data kamu dan mereka lebih besar dari pada sekadar ISP dan dua-duanya mengumpulkan data juga. Jadi selalu gunakan dengan bijak.

Baiklah, sekian untuk postingan ini semoga bermanfaat. See you in the next post.

Reference