Membuka Blokir IndiHome Dengan DNS Over HTTPS

Aturan blokir yang diterapkan Kemkominfo dengan Peraturan Menteri Nomor 19 Tahun 2014, memang bikin repot. Pasalnya, situs-situs yang tidak berhubungan dengan konten pornografi semacam Reddit, Vimeo, dan yang terbaru, Tumblr, ikut kena blokir.

Sebagai pengguna layanan IndiHome, saya pun juga merasakan ketidaknyamanan dengan aturan blokir ini.

Selain situs-situs bukan pornografi kena blokir, penapisan yang dilakukan oleh IndiHome juga membuat koneksi internet saya terasa lebih lambat. Belum lagi masalah penyuntikan iklan dan pelacakan ke halaman yang dikunjungi oleh pengguna.

Ada beberapa cara untuk melewati blokir yang diterapkan oleh IndiHome, salah satu yang paling gampang dan populer adalah dengan menggunakan layanan VPN (Virtual Private Network) baik yang gratis maupun berbayar.

Saya sendiri mempunyai server VPN yang saya buat menggunakan OpenVPN. Seringkali saya merasa bahwa koneksi internet lebih cepat dan stabil saat menggunakan VPN. Sungguh aneh.

Cara lain yang bisa digunakan untuk membuka blokir IndiHome adalah dengan mengakali permintaan DNS supaya tidak dapat dipintas olehproxy DNS transparan IndiHome.

Cara ini memang agak sedikit berurusan dengan teknis.

Proxy DNS Transparan
cara kerja proxy DNS transparan, gambar dari dnsleaktest.netSaat membuka sebuah situs, URL akan diterjemahkan ke alamat IP. Penerjemahan ini dilakukan oleh DNS, di mana DNS semacam buku telepon raksasa yang memiliki catatan seluruh URL beserta alamat IP-nya.

Secara normal, DNS akan mengembalikan alamat IP yang diminta pengguna jika URL atau nama domain tersebut tercatat di DNS.

Proxy DNS transparan merupakan teknik yang digunakan oleh ISP untuk memintas permintaan DNS pada protokol TCP/UDP di port 53 dan mengembalikan hasil yang telah di-proxy secara transparan, seolah-olah berasal dari DNS asal.

Teknik proxy DNS transparan memaksa seluruh permintaan DNS pengguna untuk diarahkan ke DNS yang ditentukan oleh ISP.

Oleh karena itu, meski pengguna menentukan server DNS publik (Google DNS, OpenDNS, CloudFlare DNS) yang akan digunakan, respon DNS tetap akan dihasilkan oleh DNS ISP tersebut.

Proxy DNS Transparan IndiHome
hasil dnsleaktest.net menunjukkan penggunaan DNS TelkomIndiHome menggunakan teknik proxy DNS transparan, di mana seluruh permintaan DNS akan dipintas oleh IndiHome, kemudian diteruskan ke DNS IndiHome untuk diperiksa jika domain yang diminta masuk ke daftar blokir, maka akan disajikan halaman blokir internet positif yang berisi iklan!

Dengan cara ini pula, IndiHome bisa menyuntikkan iklan ke situs yang ditampilkan ke pengguna, serta menanamkan pelacak.

Untuk membuktikan bahwa permintaan DNS dilayani oleh DNS IndiHome, saya menggunakan layanan DNSleaktest.com.

Benar saja, saat melakukan tes, seluruh DNS saya dilayani oleh DNS PT Telkom, yang harusnya dilayani oleh Google (saya menggunakan Google Public DNS 8.8.8.8).

Hasil yang sama saya dapatkan saat saya menggunakan tool nslookup dan dig untuk melihat alamat IP hasil terjemahan DNS.

Saat melakukan nslookup dan dig ke blog ini (matriphe.com), DNS Telkom mengarahkan ke alamat IP yang benar.

Namun saat mencoba melakukan nslookup dan dig ke reddit.com, DNS Telkom akan mengarahkan ke situs internet positif.

mactriphe:~ matriphe$ nslookup reddit.com
;; Got recursion not available from 8.8.8.8, trying next server
Server: 8.8.4.4
Address: 8.8.4.4#53
Non-authoritative answer:
reddit.com canonical name = internetpositif.uzone.id.
Name: internetpositif.uzone.id
Address: 36.86.63.185
mactriphe:~ matriphe$ dig reddit.com
; <<>> DiG 9.9.7-P3 <<>> reddit.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER< Salah satu cara untuk mencegah pemintasan permintaan DNS adalah dengan melakukan enkripsi permintaan tersebut. Enkripsi permintaan DNS dengan menggunakan teknik tradisional, yaitu dengan melakukan permintaan TCP/UDP melalui port 53, tidak mungkin dilakukan. Untuk keperluan ini, dibutuhkan ekstensi keamanan DNSSEC pada server dan klien DNS. DNS over HTTPS merupakan teknik baru yang masih dalam pengembangan. Tidak seperti pada teknik tradisional, permintaan DNS dilakukan dengan menggunakan protokol HTTPS. Cara ini seperti saat kita mengunjungi situs HTTPS biasa, bedanya permintaan yang dilakukan berupa permintaan DNS. Respon dari permintaan ini biasanya berupa JSON. Server DNS yang mendukung teknik DNS over HTTPS ini antara lain Google Public DNS dan CloudFlare DNS. Untuk menggunakan DNS over HTTPS, diperlukan aplikasi khusus yaitu berupa server proxy dan klien yang harus dipasang di perangkat pengguna. Jika menggunakan peramban, perlu memasang ekstensi untuk bisa menggunakan layanan ini. Saat tulisan ini dibuat, Mozilla tengah menguji coba implementasi DNS over HTTPS di peramban Firefox. Karena saya menggunakan OSX, maka saya menggunakan aplikasi server dan klien untuk mengadaptasi DNS over HTTPS di MacBook Pro saya. Memasang Aplikasi DNS over HTTPS Saya menemukan aplikasi untuk menggunakan DNS over HTTPS di GitHub. Aplikasi ini ditulis dalam bahasa pemrograman Go dan harus dikompilasi dan dipasang sebelum digunakan. Karena saya juga menggunakan Go, maka saya bisa langsung melakukan kompilasi dan pemasangan aplikasi ini dengan cepat. Pertama, unduh aplikasi tersebut dengan menggunakan perintah go get. mactriphe:src matriphe$ go get -u github.com/m13253/dns-over-https package github.com/m13253/dns-over-https: no Go files in /Volumes/data/dev/golang/src/github.com/m13253/dns-over-https mactriphe:src matriphe$ Kemudian setelah kode aplikasi terunduh, saya melakukan kompilasi dengan make yang kemudian dilanjutkan dengan instalasi menggunakan make install. mactriphe:src matriphe$ cd github.com/m13253/dns-over-https mactriphe:dns-over-https matriphe$ make go get -d -v ./doh-client ./doh-server cd doh-client && go build cd doh-server && go build mactriphe:dns-over-https matriphe$ sudo make install Password: [ -e doh-client/doh-client ] || /Applications/Xcode.app/Contents/Developer/usr/bin/make doh-client/doh-client [ -e doh-server/doh-server ] || /Applications/Xcode.app/Contents/Developer/usr/bin/make doh-server/doh-server mkdir -p "/usr/local/bin/" install -m0755 doh-client/doh-client "/usr/local/bin/doh-client" install -m0755 doh-server/doh-server "/usr/local/bin/doh-server" mkdir -p "/usr/local/etc/dns-over-https/" [ -e "/usr/local/etc/dns-over-https/doh-client.conf" ] || install -m0644 doh-client/doh-client.conf "/usr/local/etc/dns-over-https/doh-client.conf" [ -e "/usr/local/etc/dns-over-https/doh-server.conf" ] || install -m0644 doh-server/doh-server.conf "/usr/local/etc/dns-over-https/doh-server.conf" if [ "`uname`" = "Linux" ]; then \ /Applications/Xcode.app/Contents/Developer/usr/bin/make -C systemd install "DESTDIR="; \ /Applications/Xcode.app/Contents/Developer/usr/bin/make -C NetworkManager install "DESTDIR="; \ elif [ "`uname`" = "Darwin" ]; then \ /Applications/Xcode.app/Contents/Developer/usr/bin/make -C launchd install "DESTDIR="; \ fi mkdir -p "/Library/LaunchDaemons" install -m0644 doh-client.plist "/Library/LaunchDaemons/doh-client.plist" install -m0644 doh-server.plist "/Library/LaunchDaemons/doh-server.plist" Note: Use "sudo launchctl load /Library/LaunchDaemons/doh-client.plist" to start doh-client, use "sudo launchctl load -w /Library/LaunchDaemons/doh-server.plist" to enable doh-server. mactriphe:dns-over-https matriphe$ Untuk menjalankan kedua aplikasi sebagai service sehingga setiap kali MacBook Pro saya menyala saya tidak perlu mengeksekusi aplikasi manual, saya menggunakan launchctl. mactriphe:dns-over-https matriphe$ sudo launchctl load -w /Library/LaunchDaemons/doh-server.plist mactriphe:dns-over-https matriphe$ sudo launchctl load /Library/LaunchDaemons/doh-client.plist mactriphe:dns-over-https matriphe$ Aplikasi ini akan menjalankan server DNS di localhost. Oleh karena itu, informasi server DNS juga harus diubah agar mengarah ke localhost di alamat IP 127.0.0.1. Menguji DNS over HTTPS hasil dnsleaktest.net menunjukkan penggunaan DNS GoogleSetelah aplikasi terpasang dan server DNS diset, saya menguji dengan membuka langsung beberapa situs yang diblokir, mengecek DNS dengan dnsleaktest.net, dan menggunakan tool nslookup dan dig ke reddit.com. Situs reddit.com yang selama ini diblokir, langsung terbuka dengan lancar di koneksi IndiHome tanpa menggunakan VPN seperti yang biasa saya lakukan. Hasil dari situs dnsleaktest.net juga menunjukkan bahwa server DNS yang digunakan adalah server DNS Google yang tersebar di beberapa negara. Saat menjalankan perintah nslookup dan dig, alamat IP reddit.com tidak lagi mengarah ke situs internet postif. mactriphe:~ matriphe$ nslookup reddit.com Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: reddit.com Address: 151.101.193.140 Name: reddit.com Address: 151.101.129.140 Name: reddit.com Address: 151.101.1.140 Name: reddit.com Address: 151.101.65.140 mactriphe:~ matriphe$ dig reddit.com ; <<>> DiG 9.9.7-P3 <<>> reddit.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER