Membuka Blokir IndiHome dengan DNS over HTTPS

13 minutes 88,697 16

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

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

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

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.

17 responses
  1. Gravatar of anonym
    anonym

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

  2. Gravatar of Anonym
    Anonym

    sudah jelas, segala sesuatu yang gratis pasti berbahaya 🙂

  3. Gravatar of mesyn
    mesyn

    Saya sudah install tapi malah dapet DNS_PROBE_FINISHED_NXDOMAIN di chrome, gimana ya mas? saya jalanin valet, udah di stop sama saja. Mohon bantuannya

  4. Gravatar of ryan
    ryan

    gan, bagaimana cara mengubah “server DNS di localhost. Oleh karena itu, informasi server DNS juga harus diubah agar mengarah ke localhost di alamat IP 127.0.0.1.” klo ganti di advance setting/dns ke 127.0.0.1 malah ga bisa connect. liat di github di suruh make command sudoedit, tp di mac ga ada command itu

    Gravatar of Muhammad Zamroni
    Muhammad Zamroni

    ada kok. saya kan juga pake mac. coba dibaca dengan detail lagi, ya..

  5. Gravatar of rahmat
    rahmat

    Mas, ini netflix nya udah kebuka, tapi masih slow ya kayaknya masih kena limit indihome. Saya pakai mac, baca2 pakai GoodbyeDPI, tapi itu buat windows aja. Ada saran mungkin?

  6. Gravatar of kru
    kru

    Buat yang awam, gunakan Stubby, sebagai windows dns client.
    Tutorial : https://www.techjunkie.com/dns-over-tls/
    Download : https://dnsprivacy.org/wiki/display/DP/Windows+installer+for+Stubby?

  7. Gravatar of Deni
    Deni

    Perintah make nya ga bisa jalan

  8. Gravatar of bertekno
    bertekno

    memang sangat sulit untuk saya apa ada alternatif lain ya itu contoh web saya yang tidak pakai https selalu kena inject.

  9. Gravatar of Audi
    Audi

    Paling mudah menggunakan Firefox sih. Tinggal diubah pengaturannya. Tanpa perlu install lagi aplikasi lainnya. Tapi blokiran terbuka hanya ketika menggunakan Firefox.

    Kalau saya saat ini menggunakan DNSCrypt. Tapi kapan-kapan bisa dicoba cara alternatif ini.

  10. Gravatar of deri
    deri

    Sukses bisa buka reddit dan netflix, tapi gabisa ngeplay video nya netflix.. ada config khusus kah mas buat play video netflix?

  11. Gravatar of semua
    semua

    buat yang pake indihome lalu bingung kenapa gak bisa buka netflix. indihome tidak pernah blokir netflix menggunakan dns, namun mrk hanya melimit bandwidth yang ke arah netflix dengan nilai yang sangat kecil. dengan demikian klo di ping ya bisa2 saja. satu2nya jalan hanya menggunakan VPN atau menggunakan smartdns.

  12. Gravatar of f4th4n
    f4th4n

    Berhasil gan, terimakasih.
    Aneh juga telkom ngeblock reddit dan vimeo, padahal ane butuh vimeo buat belajar di appacademy. Dan ane nggak mau pake VPN karena jadi lebih lambat (bottleneck).
    Sekali lagi terimakasih.

  13. Gravatar of Eka
    Eka

    Tambahin lagi gan, pake stubby. Settingannya lumayan gampang dan support hampir semua penyedia DNS

  14. Gravatar of ito
    ito

    cara make stubby gmana om

  15. Gravatar of Alderina
    Alderina

    Aku lagi nyari cara bisa pasang vpn di router zte bawaan indihome tapi tidak sukses.. hahaha

  16. Gravatar of Jasa SEO
    Jasa SEO

    Mantap nih.. artikel udah 5 tahun tapi masih tetap relevan dan bermanfaat untuk dijadikan referensi