Konfigurasi DNS-Over-HTTPS di Pi-Hole

DNS-Over-HTTPS adalah protokol yang bertugas untuk menangani permintaan alamat dari DNS menggunakan protokol yang sama saat anda browsing website dengan aman menggunakan protokol HTTPS.

Jika menggunakan fitur DNS standar, setiap permintaan data dikirimkan dalam format text biasa, sehingga dengan mudah tiap orang yang memiliki akses terhadap DNS Server tersebut mengetahui apa yang anda akses dan memiliki kemungkinan untuk mem-forward response dari permintaan yang anda lakukan ke alamat url palsu misalnya.

Penggunaan DNS-Over-HTTPS mencegah hal ini terjadi dengan menggunakan standar protokol HTTPS dalam setiap permintaan alamat ke DNS Server. Ini berarti koneksi dari device ke DNS Server adalah aman dan tidak mudah untuk monitor ataupun hal-hal jahat lainnya. Saat ini bahkan beberapa situs yang cukup terkenal seperti Reddit menerapkan DNS-Over-HTTPS terhadap situsnya, sehingga user yang tidak menggunakan DNS-Over-HTTPS di jaringan lokalnya tidak bisa mengakses situsnya.

Konfigurasi DNS-Over-HTTPS

Seiring dengan di aktifkannya DNS Service 1.1.1.1 yang dimiliki Cloudflare, maka kita dapat mengimplementasikan DNS-Over-HTTPS proxy dengan menggunakan salah satu dari tools yang dimilikinya yaitu: cloudflared. Selanjutnya saya akan menjelaskan, bagaimana cara meng-install dan mengkonfigurasi tools ini di Pi-hole.

ARM architecture (Raspberry Pi)

Karena saya menggunakan Raspberry Pi sebagai DNS Server berbasis Pi-hole, maka saya akan menggunakan tools yang berbasis ARM Architecture. Kita akan melakukan download file binary cloudflared dan kemudian meng-copy nya ke folder: /usr/local/bin/ sehingga bisa dieksekusi oleh user cloudflared.

wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz
tar -xvzf cloudflared-stable-linux-arm.tgz
sudo cp ./cloudflared /usr/local/bin
sudo chmod +x /usr/local/bin/cloudflared
cloudflared -v

Konfigurasi cloudflared Agar Berjalan di Startup

Buat cloudflared user, dengan cara:

sudo useradd -s /usr/sbin/nologin -r -M cloudflared

Buat file konfigurasi untuk cloudflared dengan meng-copy perintah di bawah ke dalam file /etc/default/cloudflared.

# Commandline args for cloudflared
CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query

Update permisi file konfigurasi dan file cloudflared sehingga bisa diakses oleh cloudflared user:

sudo chown cloudflared:cloudflared /etc/default/cloudflared 
sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared

Kemudian buat systemd script dengan cara meng-copy perintah di bawah ke dalam file berikut: /etc/systemd/system/cloudflared.service. Agar script ini dapat berjalan di startup sebagai service.

sudo nano /etc/systemd/system/cloudflared.service
[Unit]
Description=cloudflared DNS over HTTPS proxy 
After=syslog.target network-online.target 

[Service] 
Type=simple 
User=cloudflared 
EnvironmentFile=/etc/default/cloudflared 
ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS 
Restart=on-failure 
RestartSec=10 
KillMode=process 

[Install] 
WantedBy=multi-user.target

Kemudian aktifkan systemd service agar berjalan di startup, kemudian start service dan cek statusnya:

sudo systemctl enable cloudflared
sudo systemctl start cloudflared
sudo systemctl status cloudflared

Untuk melakukan tes apakah konfigurasi yang telah kita lakukan sudah berjalan dengan baik, maka dapat dilakukan cara berikut:

pi@raspberrypi:~ $ dig @127.0.0.1 -p 5053 google.com

; <<>> DiG 9.11.5-P4-5.1-Raspbian <<>> @127.0.0.1 -p 5053 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12157
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 22179adb227cd67b (echoed)
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             191     IN      A       172.217.22.14

;; Query time: 0 msec
;; SERVER: 127.0.0.1#5053(127.0.0.1)
;; WHEN: Wed Dec 04 09:29:50 EET 2019
;; MSG SIZE  rcvd: 77

Konfigurasi Pi-hole

Dan yang terakhir, kita akan melakukan konfigurasi Pi-hole untuk menggunakan cloudflared service sebagai upstream DNS Server dengan cara menggunakan 127.0.0.1#5053 sebagai Custom DNS (IPv4).

Selesai deh, sekarang DNS Server anda sudah menerapkan DNS Over HTTPS sehingga lebih aman dalam penggunaannya. Mudah-mudahan cukup jelas dan mudah untuk diterapkan.