Pembaruan terkait edgy DNS

always use dns encryption or die

Pada tanggal 23 Januari 2021 kemarin, gue menulis tentang edgy DoH is back! yang intinya... judul sudah cukup menjelaskan I guess.

Setelah sekian lama selalu menggunakan VPN dalam melakukan aktivitas ber-internet, ada satu hal fatal yang gue lupa: ISP bisa rewrite/inject hasil DNS query.

Yang sedangkan, excerpt dari tulisan tersebut adalah and with more goodies, because good friends never let their friend do unencrypted dns queries.

Gue pernah menulis sedikit latar belakang terkait masalah tersebut ketika zaman-zamannya pertarungan antara Indihome dan Netflix yang bisa dibaca disini dan disini.

Untuk mempersingkat tulisan karena gue sibuk parah di weekend ini, intinya, edgy DNS tidak akan bertindak sebagai plain DNS resolver lagi namun tetap memberikan layanan sebagai Public DNS Resolver. Selain karena alasan ISP bisa rewrite/inject hasil DNS query (apapun DNS resolver yang kamu gunakan, answer tetap dilakukan oleh DNS yang ada di ISP) juga karena kemaren gue dapet email dari Linode.

Dan gue paling males kalau udah dapet email dari Linode, karena kemungkinannya cuma 2: Kalau gak terkait billing berarti CPU gue teriak.

Untuk kasus sekarang, kemungkinan nomor 2 yang terjadi. Dan gue gak harus capek-capek menganalisa apa yang membuat penggunaan CPU sampai 94.4% (threshold nya 90) karena di server itu services yang ada cuma Adguard Home, Unbound, (on-demand) Mosh, SSH, ufw, dan vnstat serta hanya mendengarkan 5 port: 22, 80, 443, 53 dan 853 (berdasarkan lsof -i -P -n | grep LISTEN).

Sebagai alternatif, gue akan kasih tau gimana caranya menggunakan DoT/DoH/DoQ di komputer lo.

Browser-level DoH

Kalau lo menggunakan Firefox/Brave/Chrome, mereka sudah menyediakan fitur seperti "encrypted dns" atau "use secure DNS" yang intinya dns query/answer akan dilakukan melalui DoH. Tapi ini cuma di level browser, diluar browser, DNS query akan menggunakan DNS Resolver yang diatur/disediakan oleh sistem.

Contoh di Google Chrome

Gue tidak merekomendasikan DoH di level browser kecuali memang harus, karena query-query yang terjadi diluar browser akan mengarah ke DNS resolver yang diatur oleh/di/dari sistem.

System-level DoH. And DoT. And DoQ.

Ini gue sedikit merekomendasikan khususnya untuk yang suka tantangan.

Untuk bisa menggunakan DoH/DoT/DoQ di level system, sistem lo harus menjalankan DNS Server yang upstream nya mengarah ke DNS kita. Program yang gue rekomendasikan adalah dnsproxy nya Adguard karena lumayan sederhana buat digunakan, cross platform dan ditulis di Go bukan CSS.

Ini gambarannya:

Contoh pakai DoT dan DoQ di level sistem

Dan ini tangkapan layar dari log nya:

DNSSEC is enabled by default!

Berdasarkan microbenchmark terkait resolve faultable.dev pakai DoH, DoT dan DoQ, cara yang paling cepat nge-resolve nya adalah DoH dengan statistik berikut:

  • Plain DNS (via ZT): 0.12 ms
  • DoH: 0.14 ms
  • DoT: 0.18 ms
  • DoQ: 0.26 ms

Tanpa menyimpan cache di level DNS Server.

Cara menerapkannya sederhana, unduh dnsproxy di repositori nya AdguardTeam/dnsproxy, lalu jalankan sebagai services. Untuk DNS upstream nya,  bisa menggunakan salah satu/semua dari pilihan berikut:

  • DoH: https://dns.edgy.network
  • DoT: tls://dns.edgy.network:853
  • DoQ: quic://dns.edgy.network:784

Dan sekarang, DNS mu akan benar-benar private deh!

Tapi aku gak mau ngejalanin DNS server di local, riz!

Oke tenang gue juga gitu kok.

Kalau memang lo harus banget pakai Plain DNS, cara satu-satunya adalah DNS resolver harus berada dalam VPN. Dan jika memang harus banget, lo bisa menggunakan Zerotier dan bergabung ke jaringan publik 3efa5cb78ab6fa44 yang mana itu adalah jaringan yang gue gunakan juga.

Gue menggunakan Zerotier untuk melakukan SSH (Mosh) dan DNS Server karena Mullvad cuma dukung private IP address kalau mau pakai custom DNS dan di Mac bisa menjalankan Zerotier dan Mullvad secara simultan.

Untuk menggunakan Zerotier, silahkan unduh dan bergabung ke jaringan yang udah gue sediakan, lalu gunakan alamat IP berikut sebagai DNS Server:

  • 192.168.192.73
  • fcb4:3199:daed:f933:4b02:0000:0000:0001

Jaringan gue berada di subnet 192.168.192/24 untuk IPv4 dan fcb4:3199:daxx::/80 untuk IPv6, untuk bagian search, bisa gunakan alamat berikut:

  • zt.dns.edgy.network

Yang pada dasarnya me-resolve 2 alamat IP diatas.

Catatan: Jangan aktifkan Allow Global untuk mendapatkan "VPN Gratis" karena gue cuma forward paket dari 192.168.192.127/32 untuk ke 0.0.0.0/0 yang mana itu adalah alamat IP private untuk iPad gue dan di iPad OS/iOS belum/gak akan pernah bisa jalanin 2 VPN secara simultan dan kernel akan drop paket lo.

Apa penting nya DNS?

Berbicara terkait privasi di internet, DNS adalah bagian yang paling dasar.

Di lapisan ini, siapapun yang menjalankan DNS Resolver (8.8.8.8 nya Google, 1.1.1.1 nya Cloudflare, dsb) akan mengetahui siapa mengakses apa.

Dan bila DNS Resolver tersebut adalah dari ISP, berarti ISP akan tahu siapa mengakses apa. Ini query log yang terjadi di edgy DNS dan demi contoh, gue tahu apa yang ehm gue akses.

Gak gue anonymized dulu

Data diatas sebenarnya tidak berguna, sampai dibuat menjadi berguna :)

Penutup

Hidup terlalu indah untuk melakukan DNS query yang tidak ter-enkripsi, maka jangan sia-sia kan hidupmu.

Setelah tulisan ini diterbitkan, rule ufw nya akan gue ubah menjadi ufw allow in on zt+ to any port 53 dan gue akan delete 53/tcp dan 53/udp untuk yang anywhere demi kebaikan bersama.

Sebagai penutup, always use dns encryption or die.