Pasti temen-temen pernah sekali dua kali sedang mencari informasi-informasi dengan topik yang cukup sensitif di internet terus tiba-tiba terhalangi oleh internet positif atau tulisan mohon maaf yang pakai font size 72.

“Penasaran ga sih, gimana cara kerja provider internet ngeblokir akses ke website-website tertentu?” “Tidaak”

Tapi gapapa, Ayo

Mari kita buka salah satu website yang diblokir. Pasti diblokir kan? Ya iya atuh, kan sudah saya bilang, itu website yang diblokir. Pertanyaannya, apakah yang dimaksud dengan diblok, dan bagaimana bloknya ini melakukan pemblokiran? Singkat cerita, diblokirnya itu adalah karena DNS resolving-nya nyasar ke Internet Positif.

DNS (Domain Name System)

Seperti yang telah kita tahu, nama domain (seperti www.example.com) yang kita gunakan untuk mengakses website itu ditranslasi dulu ke IP address agar supaya sampai ke server tujuan. Dan juga seperti yang telah kita tahu, ini namanya DNS resolving (bagi yang tidak tahu, tidak apa-apa, sekarang jadi tahu). Dan yang melakukan resolvingnya kita sebut saja resolver. Kurang lebih beginilah kronologis kejadiannya.

Kita: Ketik www.example.com di address bar browser lalu enter Komputer kita: Bertanya ke DNS resolver, www.example.com itu IP address-nya berapa ya? DNS resolver: Oh, www.example.com itu IP address-nya 93.184.216.34 Komputer kita: Oke, kalau begitu saya akan akses website yang di 93.184.216.34

DNS Resolving

Nah, di kasus pemblokiran internet positif ini ada yang aneh. Mari kita coba resolve salah satu nama domain website yang diblokir.

Bisa dilihat di gambar di atas bahwa IP address yang ter-resolve adalah ke Internet Positif. Ternyata, resolver-nya memberikan kita IP address yang tidak sebenarnya. DNS resolver ini dilakukan oleh ISP. Dan di Indonesia, semua ISP melakukan DNS resolving yang nyasar seperti ini. Karena untuk kepatuhan peraturan Kominfo.

Loh tapi DNS resolver saya ke router saya kok, seperti yang di screenshot itu, ke 192.168.100.1? Betul, dan ini adalah DNS resolving yang rekursif. Jadi router kita itu bukan resolver beneran. Dia tak bisa resolve dengan sendirinya. Dia itu sebenarnya menanyakan lagi ke resolver lain, yang mana adalah ISP. Kecuali kalau kita set resolver yang komputer kita gunakan ke “resolver beneran”, semacam OpenDNS (1.1.1.1), Google DNS (8.8.8.8), dsb., resolvernya kurang lebih akan rekursif ke ISP.

Pada beberapa tahun lalu, solusinya mudah. Tinggal ganti resolver yang digunakan komputer kita ke OpenDNS, Google DNS, dsb., dan solved. IP address yang kita dapatkan tidak akan nyasar. Tapi sekarang tidak bisa lagi karena kena hijacking.

DNS Hijacking

Ketika komputer kita meminta resolve nama domain menjadi IP address ke resolver, yang dia lakukan adalah mengirim DNS question ke resolver via UDP port 53, lalu menerima DNS answer. IP address yang kita inginkan ada di DNS answer ini.

Hijacking yang dilakukan Internet Positif adalah dengan cara meng-intercept semua hal yang melalui UDP port 53. Berhubung DNS question itu tidak dienkripsi, jadi siapapun bisa baca isinya. Setelah di-intercept dan tahu isinya, Internet Positif memberikan kita balasan palsu yang mana adalah IP address dari Internet Positif itu sendiri.

Inilah kenapa mengganti resolver ke OpenDNS, Google DNS, dsb tidak akan bisa lagi sekarang. Karena sebenarnya kita tak pernah mengakses mereka. Apapun resolver-nya yang kita set di komputer kita, tetap saja ter-intercept.

Lalu bagaimana agar tak ter-intercept? Salah satu caranya adalah dengan cara tidak via UDP port 53 dan DNS question-nya dienkripsi. Saat ini, metode yang sedang beken adalah dengan menggunakan DNS-over-HTTPS (DoH) dan DNS-over-TLS (DoT).

DoH dan DoT

DNS-over-HTTPS (DoH) adalah DNS resolving menggunakan protokol HTTPS, dan DNS-over-TLS menggunakan protokol TLS. Mari kita bahas salah satu saja, yaitu DoH.

Karena DoH via HTTPS, maka tak akan ter-intercept oleh Internet Positif karena bukan UDP port 53. Ini seperti kita mengakses data website biasa saja. Selain itu juga HTTPS itu terenkripsi sehingga Internet Positif tak akan tahu apakah ini paket normal selayaknya kita buka website atau ini isinya DNS question. Sehingga daripada itu kita tak akan kena Internet Positif dengan DoH ini.

Saat ini DoH sudah sangat beken. Windows, macOS, iOS, dan Android telah built-in ini di OS-nya. Sehingga kita bisa langsung pakai. Bahkan browser pun beberapa built-in ini, semisal Chrome dan Firefox.

Bilamana OS-nya belum mendukung pun kita tetap bisa menggunakan DoH kok. Semisal di Windows itu set resolver-nya seperti ini.

Di situ saya set resolver-nya ke 127.0.0.1 alias ke komputer saya sendiri. Itu adalah karena saya punya DoH proxy yang jalan di komputer saya di port 53. Cara kerjanya adalah begini.

  • DoH proxy dijalankan di komputer. Dia me-listen UDP port 53.
  • Ketika komputer kita nanya IP address dari www.example.com, dia mengakses DoH proxy tersebut.
  • Menerima hal tersebut, DoH proxy mentransformasi DNS question biasa menjadi payload DoH. Jika menggunakan format JSON contohnya adalah seperti ini.
  • DoH proxy mengirim payload tersebut ke DoH resolver yang sebenarnya, semisal https://dns.google/dns-query atau https://cloudflare-dns.com/dns-query. Ini selayaknya kita melakukan POST ke HTTPS biasa saja.
  • Response-nya selanjutnya ditransformasi ke format DNS answer biasa lalu dikembalikan ke sang penanya IP address dari www.example.com.

Salah satu DoH proxy yang tinggal pakai adalah cloudflared. Ini tinggal jalankan saja (jangan lupa jalankan dengan sudo kalau pakai Linux/macOS), lalu set resolver komputer kita ke 127.0.0.1. Tapi tentunya “tinggal pakai” itu kurang seru dong, lebih seru kalau kita coba implement DoH proxy sendiri kan, yakan? Kalau misal banyak yang ingin tahu how to bikin DoH proxy sendiri, mungkin bisa kali ya kita lanjutkan di Part 2 tulisan ini ;)