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
Setelah teman gw tahu, salah satunya memberi respon berikut.

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.

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

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
Alur pemblokiran website ini bisa diilustrasikan sebagai berikut.

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
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
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.

Kalau untuk situs lain gimana?
Caranya, kamu bisa resolve dulu IPnya menggunakan tool dig DNS, misalnya dengan dig milik Google.

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

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
Untuk memudahkan proses switching proxy-unproxy, kita bisa pakai ekstensi seperti FoxyProxy. Berikut tampilannya.

FoxyProxy Toogle
Konfigurasinya? sama dengan settingan browser tadi!

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
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
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:
| Metode | Bypass Web filters | Hide the domain we visit from ISP? | Pros | Cons |
|---|---|---|---|---|
| Hosts file | Probably yes | No | Fast, simple, offline | Statis, hard to manage |
| DoH | Yes, mostly | No | Fast, easy | So far none, |
| SSH SOCKS Proxy (VPS) | Yes, mostly, but it depends. | Yes | More privacy | Paid, 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.