edgy DoH is back!

and with more goodies, because good friends never let their friend do unencrypted dns queries

Setelah kapan hari gue nge-tweet kalau DoH server nya evilfactorylabs down karena gue udah gak jadi sysadmin lagi, gue merasa hidup seperti ada yang kurang. Gue merasa seperti memiliki 'hutang' ke publik terkait keyakinan yang gue yakini.

Yang salah satunya adalah membuat internet menjadi tempat yang lebih aman dan nyaman, dengan langkah pertama membuat query DNS dalam bentuk ter-enkripsi.

DNS Server/Resolver adalah gerbang utama dalam mengakses internet. Komputer lo gak bakal tau ke komputer mana harus berkomunikasi ketika lo mengakses faultable.dev misalnya di browser kesayangan lo. Namun query terkait DNS dilakukan dalam bentuk raw, siapapun yang berada di jaringan lo akan mengetahui lo mengakses apa, dan itu kagak keren.

Dengan menggunakan DoH (DNS-Over-HTTPS), proses query menjadi lebih keren karena siapapun yang berada di jaringan lo gak akan tahu lo mengakses apa, dan itu keren karena ber-internet adalah sebuah aktivitas pribadi. Ketika menggunakan DoH, siapapun yang berada di jaringan hanya mengetahui bahwa lo mengakses DoH Server yang lo gunakan (dns.edgy.network misalnya) meskipun yang lo akses adalah situs xhamster.com.

Apakah pemilik DoH Server mengetahui situs apa yang lo akses? Tentu saja.

Masalah tersebut sudah di address oleh Cloudflare, Fastly dan Apple dengan solusi bernama Oblivious DoH (ODoH), yang singkatnya menambahkan layer tambahan (yakni proxy) ke DoH server target.

Tapi tenang saja, DoH server dari evilfactorylabs (yang sekarang) memang mencatat alamat IP (klien), namun di anonymize. Yang berarti, bila alamat IP lo adalah 100.73.37.25, yang dicatat di log kita adalah 100.73.0.0.

Mengapa gue melakukan tersebut?

Untuk membedakan device-device yang gue miliki. Semua devices gue menggunakan DNS/DoH server yang sama, namun dengan beberapa konfigurasi yang berbeda. Contoh, di laptop gue tidak mem-blokir kategori media sosial dan bokep, sedangkan di mobile hanya mem-blokir situs-situs bokep (demi kebaikan gue).

Cara membedakannya devices ada 3 cara: via alamat IP, alamat MAC, dan CIDR.

Karena semua devices gue menggunakan VPN, jadi tinggal menggunakan alamat IP private sebagai identifier. Dan ya, tentu saja tidak ada query log yang dicatat, hanya (anonymized) client IP.

Kembali ke topik, filter-filter yang akan gue terapkan antara lain:

  • Ads & trackers
  • Malware/Phising
  • OS-specific tracker (Apple MacOS/iOS, Xiaomi phone, Windows OS)

Yang lebih lengkapnya bisa di cek di repo evilfactorylabs/gatekeeper.

Ditching off Pi-hole®

Gue fans berat Pi-hole® dan sangat mendukung misi yang mereka perjuangkan, yakni menjadi black hole nya internet untuk jaringan pengiklan. Sayangnya, berdasarkan pengalaman gue, ternyata Pi-hole tidak se-ringan yang gue bayangkan (meskipun mereka memfokuskan untuk perangkat Raspi).

Untuk menjalankan Pi-Hole, ada 2 komponen utama yang dijalankan:

  • FTLDNS, ini sepengetahuan gue adalah "versi Pi-hole" nya dnsmasq. FTL disitu adalah faster-than-light. Komponen inti dari Pi-hole, ditulis menggunakan C.
  • Pi-Hole Dashboard, sesuai namanya. Menjalankan PHP dan Lighttpd

Dan yang paling inti adalah Pi-hole melakukan banyak hal (yang mana oke) namun sayangnya hal-hal tersebut belum gue butuhkan.

Lalu gue mencoba menggunakan Adguard Home, yang mana produk Open Source juga dari Adguard. Sebelumnya gue lumayan skeptis dengan Adguard (sebagai perusahaan), namun karena produk tersebut Open Source, less bs, dan lebih ringan, gue putuskan untuk menjalankannya sebagai DNS sinkhole pengganti Pi-hole!

Dan seperti Pi-hole, Adguard Home membutuhkan Upstream DNS sebagai recursor dan disini gue masih menggunakan Unbound yang gue deploy ke 2 server dengan strategi round-robin agar lebih reliable dan tidak bergantung dengan layanan pihak ketiga.

Mulai Menggunakan

Ada 4 cara untuk menggunakan DNS Resolver nya evilfactorylabs.

Plain DNS

Plain DNS cocok untuk yang tidak menggunakan Mac OS Big Sur namun tetap ingin menggunakan DNS Resolver nya dari evilfactorylabs yang edgy itu.

Silahkan gunakan alamat berikut:

  • 192.46.229.118
  • 192.46.225.58 (redundancy)
  • 2400:8901::f03c:92ff:fe07:e105
  • 2400:8901::f03c:92ff:fe76:fd45 (redundancy)

Untuk sekarang gue hanya menawarkan Primary DNS Resolver, dan mungkin akan ada secondary DNS resolver juga untuk redundancy. Update (23/01/21): Done.

Update (23/0121): Catatan: Menggunakan Plain DNS tidak disarankan karena ISP mu bisa saja meng-inject hasil query yang diberikan edgy DNS, sebagaimana barusan sudah dicoba di perangkat sendiri :)

DoH (DNS over HTTPS)

Di Mac OS Big Sur, Apple menawarkan DoH di level sistem operasi, dan untuk sistem operasi lain setahu gue hanya berada di level peramban. Untuk menggunakan DoH, bisa menggunakan alamat berikut:

  • https://dns.edgy.network/dns-query

Dan untuk konfigurasi Apple Profile nya, bisa di unduh disini.

DoT (DNS over TLS)

Sejujurnya lumayan sulit untuk memberitahu 'benefit' perbedaan antara menggunakan DoH atau DoT. Namun yang paling kontras—sejauh yang gue tahu—adalah dengan DoT, koneksi berada di protokol khusus dan menggunakan UDP daripada TCP.

Di DoH, protokol yang dikunjungi biasanya 443 dan koneksi berada dalam protokol TCP. Plain DNS menggunakan port 53, dan koneksi berada dalam protokol UDP namun paket yang ada tidak dalam bentuk ter-enkripsi.

Di DoT, hampir serupa dengan Plain DNS namun paket yang ada dalam bentuk ter-enkripsi. Personally speaking gue menggunakan DoT di level sistem operasi karena gue menggunakan Mac OS Big Sur.

Untuk menggunakan DoT, bisa menggunakan alamat berikut:

  • tls://dns.edgy.network:853

Dan untuk konfigurasi Apple Profile nya, bisa di unduh disini.

DoQ (DNS over QUIC)

Buat yang anaknya experimental dan living at the edge, bisa coba menggunakan DoQ menggunakan DNS Resolver kita. QUIC sendiri adalah protokol baru (masih draft) yang mana memiliki kepanjangan Quick UDP Internet Connection.

Di ranah internet, QUIC menjadi fondasi untuk HTTP/3, penyempurna HTTP/2 dan TLS namun menggunakan protokol UDP.

Personally speaking gue belum pernah mencoba DoQ (mungkin nanti), namun kalau penasaran, silahkan bisa menggunakan alamat berikut:

  • quic://dns.edgy.network:784

Dan beritahu gue apa yang kamu dapat!

Reliabilitas

Khusus DNS Resolver ini gue provision mesin baru yang hanya bertindak sebagai DNS Resolver dan subnet untuk relay VPN gue (yang digunakan di 3 devices).

Tidak ada Docker, semua berjalan diatas systemd demi meraih performa yang maksimal.

Dan tidak ada layanan lain yang berjalan, hanya:

  • DNS resolver (53/tcp, 53/udp) di interface eth0
  • DNS recursor (5353/udp) di interface tailscale0
  • SSH server (22/tcp) di interface tailscale0
  • DNS over TLS (853/udp) di interface eth0
  • DNS over HTTPS (443/tcp) di interface eth0
  • DNS over QUIC (784/udp) di interface eth0
  • HTTP (80/tcp) di interface eth0
  • Tailscale daemon (41641/udp) di interface eth0

Dan juga gue meminimalisir proses I/O seperti beberapa proses yang menulis log ke syslog, namun yang perlu diketahui: Tidak ada log yang ditulis oleh Unbound dan Adguard Home ke syslog.

Ketika gue coba untuk menyimpan query log, data yang disimpan oleh Adguard Home adalah seperti ini (dengan anonymized ip dan gue beautify):

{
  "IP":"100.73.0.0",
  "T":"2021-01-23T05:04:49.361724166Z",
  "QH":"ssl.google-analytics.com",
  "QT":"A",
  "QC":"IN",
  "CP":"",
  "Answer":"L7OBgAABAAEAAAAAA3NzbBBnb29nbGUtYW5hbHl0aWNzA2NvbQAAAQABwAwAAQABAAAACgAEAAAAAA==",
  "Result":{
    "IsFiltered":true,
    "Reason":3,
    "Rule":"||google-analytics.com^",
    "FilterID":1
  },
  "Elapsed":188979
}

Dan ini untuk query yang belum tersimpan di cache:

{
  "IP":"100.73.0.0",
  "T":"2021-01-23T05:04:45.653078021Z",
  "QH":"caldav.fe.apple-dns.net",
  "QT":"A",
  "QC":"IN",
  "CP":"",
  "Answer":"ZPCBgAABAAgAAAAABmNhbGRhdgJmZQlhcHBsZS1kbnMDbmV0AAABAAHADAABAAEAAAA8AAQR+KRRwAwAAQABAAAAPAAEEfikJ8AMAAEAAQAAADwABBH4pAzADAABAAEAAAA8AAQR+KQIwAwAAQABAAAAPAAEEfikZMAMAAEAAQAAADwABBH4pFPADAABAAEAAAA8AAQR+KQswAwAAQABAAAAPAAEEfikJA==",
  "Result":{},
  "Elapsed":3248333,
  "Upstream":"127.0.0.1:5353"
}

Dan gue rasa itu aman-aman aja kalau disimpan, meskipun gue belum ada alasan khusus kenapa gue harus nyimpen query log walau hanya 30 hari.

Catatan tambahan

Sebagai gambaran, kurang lebih berikut data yang dimiliki oleh DNS Resolver:

Gue matiin Anonymized IP dan Re-enable query log nya dulu

Dari situ gue bisa mengetahui situs apa aja yang gue kunjungi, sekaligus bisa melakukan profiling. Misal, query log gue pada 7 hari terakhir sering ngebuka tokopedia dan amazon. Besar kemungkinan, gue lagi ingin belanja sesuatu, kan?

Atau, misal domain yang sering gue kunjungi adalah stackoverflow; duckduckgo, dan hackernews. Besar kemungkinan gue adalah seorang programmer, tidak menggunakan produk Google, dan senang mencari berita baru.

Dan hey, dia ternyata menggunakan iPad, berada di Los Angeles (aslinya itu alamat IP private), dan menggunakan ISP Linode (aslinya mah telkom). Data-data tersebut bisa digunakan untuk segmentasi, dan bukan tanpa alasan mengapa lo mendapatkan iklan yang 'relevan'.

Gue tidak menjual data tersebut (ya kali jual data sendiri), tidak tertarik untuk melakukan segmentasi pada data tersebut (ya kali profiling diri sendiri, udah kayak krisis identitas), dan karena gue tidak mau ada effort untuk menjaga data tersebut aman, lebih baik kita usai disini tidak menyimpan data sama sekali hahaha.

Oh iya, gue ada rencana buat daripada ngasih tau kalau device ini adalah "faultable's iPad", mending gue pake identifier misal 77a5d335 seperti pendekatan yang dilakukan NextDNS, jadi sedikit lebih aman dan lebih efektif gue rasa.

Sayangnya gue males, jadi, yaudah deh mending sekalian di anonymized aja dulu.

Mengapa menggunakan DoH/DoT/DoQ?

Umm kayaknya gue sering membahas tentang ini deh, mungkin bisa cek tulisan ini aja kali ya?

Mengapa tidak menggunakan Cloudflare Warp/NextDNS?

Nice question.

Pertama, gue anti Cloudflare dan itu karena alasan pribadi aja.

Kedua, gue tidak masalah dengan NextDNS dan gue lumayan puas dengan layanan yang ditawarkan oleh NextDNS ketika mencoba. Dan, hey, itu gratis selama seminggu dan hanya ~300rb per-tahun yang mana relatif murah untuk membuat aktivitas ber-internet gue menjadi lebih baik.

Gue merekomendasikan NextDNS kalau lo butuh DNS Resolver dari pihak ketiga, NextDNS pada dasarnya seperti Pi-hole, namun berada di Cloud™. Tapi kalau lo lebih percaya dengan DNS resolver yang ditawarkan oleh evilfactorylabs, you are always welcome.

Perbedaan inti dari NextDNS dan DNS yang ditawarkan oleh evilfactorylabs hanyalah:

  • Treat Indonesian as first-class citizen
  • Using internet in fariz way
  • Support evilfactorylabs mission and fariz's shit(s)

Gue ada rencana buat bikin layer on top of Adguard Home ini biar lebih mudah dikonfigurasi per-individu/per-device, but let's see because you already know that fariz has many unfinished shits.

Penutup

Go use my shit!

Sampai minggu depan gue akan log query (tapi alamat IP anonymized) buat konten (dan kalau gak males), setelah tanggal 31 januari akan gue delete semua log dan statistik, serta gak akan menyimpan satupun query log yang akan gue verifikasi di direktori data dari Adguard Home yang bernama querylog.json.

Gue menggunakan DNS resolver ini di 3 devices gue (plus Raspi, berarti ada 4), dan ketika shit happens, gue akan turun tangan langsung untuk menanggulanginya.

Jika ada pertanyaan, please do ask.

Terima kasih!