Met DNS-over-HTTPS voer je DNS resolving uit over een beveiligde HTTPS verbinding. Op deze manier verhoog je de veiligheid voor jezelf omdat niemand kan ‘meekijken’ en je DNS aanvraag kan manipuleren door een ‘man-in-het-midden’ aanval.

DNS-over-HTTPS (onder de volksmond bekend als DoH) is nog niet voor veel DNS resolvers beschikbaar. Cloudflare heeft nu wel een implementatie met de tool cloudflared.

Om deze in te stellen moet je onderstaande stappen uitvoeren. Ik heb hiervan gebruik gemaakt van de informatie die ik vond in deze link.

Installeren

AMD64 architecture (meeste devices)

Download het installatie paket en gebruik dan ‘apt-get’ om het pakket te installeren. Voer het pakket met de -v vlag uit om te controleren dat alles goed werkt:

# Voor Debian/Ubuntu
wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb
sudo apt-get install ./cloudflared-stable-linux-amd64.deb
cloudflared -v

# Voor CentOS/RHEL/Fedora
wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.rpm
sudo yum install ./cloudflared-stable-linux-amd64.rpm
cloudflared -v

Binaries voor andere operating systemen kun je hier vinden.

ARM architecture (Raspberry Pi)

Hiervoor moet je de precompiled binary downloaden en copiëren naar de ‘/usr/local/bin/’ directory zodat deze door de ‘cloudflared’ gebruiker kan worden uitgevoerd. Gebruik de -v vlag om de juiste werking te controleren.

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

Configureren

Creëer een ‘cloudflared’ gebruiker om de daemon service uit te voeren:

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

Creëer een configuratie file voor cloudflared:

sudo nano /etc/default/cloudflared

Zet hierin de volgende inhoud:

# 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 de permissies van deze configuratie en binary file:

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

Creëer nu het systemd script ‘/etc/systemd/system/cloudflared.service’

sudo nano /etc/systemd/system/cloudflared.service

Zet hierin de volgende inhoud:

[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

Zorg ervoor dat de systemd service uitgevoerd wordt tijden opstarten, start de service en controleer de status:

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

Om te controleren of alles werkt kun je het dig commando gebruiken:

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

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

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             208     IN      A       172.217.4.78

;; Query time: 17 msec
;; SERVER: 127.0.0.1#5053(127.0.0.1)
;; WHEN: Sun Jun 28 17:03:12 CEST 2020
;; MSG SIZE  rcvd: 65

Configureren Pi-Hole

Tenslotte moeten we Pi-Hole configureren om de lokale cloudflared service te gebruiken als upstream DNS server. Dit doe je door ‘127.0.0.1#5053’ toe te voegen als Custom DNS (IPv4):



Testen

Om te testen of DOH werkt kun je deze link gebruiken.



Updaten ‘cloudflared’

Voer de volgende acties uit:

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

Verwijderen ‘cloudflared’

Voer de volgende acties uit:

sudo systemctl stop cloudflared
sudo systemctl disable cloudflared
sudo systemctl daemon-reload
sudo deluser cloudflared
sudo rm /etc/default/cloudflared
sudo rm /etc/systemd/system/cloudflared.service
sudo rm /usr/local/bin/cloudflared

Conclusie

Met een paar eenvoudige stappen kun je DoH gebruiken met Pi-Hole. Hierdoor wordt internet weer een stukje veiliger voor je.