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.

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 oleh proxy DNS transparan IndiHome.

Cara ini memang agak sedikit berurusan dengan teknis.

Proxy DNS Transparan

cara kerja proxy DNS transparan, gambar dari dnsleaktest.net
cara kerja proxy DNS transparan, gambar dari dnsleaktest.net

Saat 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 Telkom
hasil dnsleaktest.net menunjukkan penggunaan DNS Telkom

IndiHome 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<<- opcode: QUERY, status: NOERROR, id: 9551
;; flags: qr rd; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;reddit.com.			IN	A

;; ANSWER SECTION:
reddit.com.		604800	IN	CNAME	internetpositif.uzone.id.
internetpositif.uzone.id. 30	IN	A	36.86.63.185

;; AUTHORITY SECTION:
telkomblacklisting.co.id. 604800 IN	SOA	localhost. root.localhost. 2018040311 3600 3600 604800 604800

;; Query time: 49 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Apr 03 10:11:03 WIB 2018
;; MSG SIZE  rcvd: 156

mactriphe:~ matriphe$

DNS over HTTPS

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 Google
hasil dnsleaktest.net menunjukkan penggunaan DNS Google

Setelah 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<<- opcode: QUERY, status: NOERROR, id: 48547
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;reddit.com.			IN	A

;; ANSWER SECTION:
reddit.com.		86	IN	A	151.101.193.140
reddit.com.		86	IN	A	151.101.129.140
reddit.com.		86	IN	A	151.101.1.140
reddit.com.		86	IN	A	151.101.65.140

;; Query time: 27 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Apr 03 11:38:37 WIB 2018
;; MSG SIZE  rcvd: 103

mactriphe:~ matriphe$

Teknik Enkripsi DNS Lainnya

Selain menggunakan DNS over HTTPS, teknik blokir melalui DNS yang dilakukan IndiHome bisa juga diakali dengan DNS over TLS dan DNSCrypt.

Namun tidak semua server dan klien DNS mendukung teknik enkripsi ini, sehingga kemungkinan untuk implementasi dan menjadi standar masih cukup lama.

DNS over TLS berfungsi seperti pada DNS tradisional, hanya saja seluruh permintaan dienkripsi dengan TLS. Server DNS yang mendukung teknik ini adalah Google Public DNS, CloudFlare DNS, Quad9, OpenDNS, dan Comodo DNS.

DNSCrypt hampir mirip dengan DNS over TLS, bedanya setiap permintaan DNS akan dibungkus dan dienkripsi. Server DNS yang mendukung teknik ini adalah OpenDNS dan Comodo DNS.

Seluruh teknik enkripsi DNS ini membutuhkan instalasi aplikasi tambahan agar komunikasi dengan server DNS bisa dilakukan.

Pertimbangan Keamanan

Perlu diperhatikan bahwa teknik ini tidak menjamin seluruh koneksi aman dan tidak dapat dipantau orang lain, karena yang dienkripsi hanyalah saat melakukan permintaan ke server DNS.

Untuk koneksi yang lebih aman, sebaiknya menggunakan VPN. Namun, jika menggunakan layanan VPN gratisan, pastikan bahwa layanan tersebut tidak melakukan kecurangan dengan memantau koneksi yang terjadi.

Artikel ini dipublikasikan pada 3 April 2018, sekitar 5 bulan yang lalu. Informasi yang dimuat di artikel ini mungkin sudah tidak akurat.

Ada 2 tanggapan
anonym 13 Mei 2018 17:59 WIB

tolong dijelasin lg dong mas untuk orang awam, habis install Go nya trs bingung euy diapain

Anonym 19 Juni 2018 23:12 WIB

sudah jelas, segala sesuatu yang gratis pasti berbahaya 🙂

This site uses Akismet to reduce spam. Learn how your comment data is processed.