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
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
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
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.
tolong dijelasin lg dong mas untuk orang awam, habis install Go nya trs bingung euy diapain