Dnsmasq installeren en configuren als adblock

Geschreven op en voor het laatst bijgewerkt op

Inhoudsopgave

Inleiding

In deze handleding komen alle stappen aan bod om dnsmasq te installeren en configureren als (simpele) DNS server voor het algehele netwerk, en meteen als adblock(er) te configureren.

Installatie dnsmasq

Dat is te doen met

sudo dnf install dnsmasq

En zorg er dan voor dat dnsmasq automatisch start met

sudo systemctl enable --now dnsmasq

Configuratie dnsmasq

Dit is een proces met een aantal stappen en met een aantal (losse) nieuwe configuratiebestanden.

Het globale configuratiebestand

Maak een nieuw globaal configuratiebestand aan in /etc/dnsmasq.q/01-global.conf met daarin het volgende:

# vim: ft=conf
# Global custom configuration file for dnsmasq

# Run throught the upstream DNS servers in the
# order they're listed
strict-order

# Set the domain part
domain=sesam.straat

# Add the domain name to simple names from /etc/hosts
expand-hosts

# Listen only on the specified network interface(s)
interface=enp1s0

# Do not provide DHCP, TFTP or router advertisement
no-dhcp-interface=enp1s0

# Bogus private reverse lookups. All reverse lookups
# which are not found in /etc/hosts or the DHCP leases
# file or any dnsmasq configuration file(s) are
# answered with "no such domain"
bogus-priv

# Tells dnsmasq to never forward A or AAA queries for
# plain names, without dots or domain names, to upstream
# DNS server(s)
domain-needed

# Set the size of the cache
cache-size=500

Let op dat je de domeinnaam in het configuratiebestand (domain=sesam.straat) aanpast naar je eigen situatie.

Configureren systemd

Om dit goed werkzaam te maken moet systemd op een aantal plaatsen geconfigureerd worden. Dat word hieronder uitgelegd.

systemd-resolved

Aangezien /etc/resolv.conf geconfigureerd moet worden om te fungeren als upstream server(s) later is het nodig om ervoor te zorgen dat systemd-resolved dit bestand niet gebruikt of aanmaakt.

Om dat te doen doe het volgende:

sudo mkdir -p /etc/systemd/resolved.conf.d/
sudo touch /etc/systemd/resolved.conf.d/override.conf

En plaats daar het volgende in

[Resolve]
DNSStubListener=no

Herstart daarna systemd-resolved met

sudo systemctl daemon-reload
sudo systemctl stop systemd-resolved

/etc/resolv.conf

Plaats het volgende in /etc/resolv.conf. Overschrijf de inhoud die er al in zit. Verwijder het bestand eerst, want dat is nu nog een symlink naar /run/systemd/resolve/stub-resolv.conf. Doe het volgende:

sudo rm /etc/resolv.conf
sudo touch /etc/resolv.conf

En vul het nieuwe /etc/resolv.conf bestand met het volgende:

nameserver 8.8.8.8
nameserver 8.8.4.4

nameserver 208.67.222.222
nameserver 208.67.200.200

nameserver 1.1.1.1
nameserver 1.0.0.1

En om later gedoe met het alsnog overschrijven van dit bestand door een ander proces te voorkomen maak het bestand immutable met

sudo chattr +i /etc/resolv.conf

Adblock hosts bestand systeemservice

Om het regelmatig updaten van het blocklist bestand te regelen maak je een nieuwe systeemservice aan. Maak een nieuw bestand aan /etc/systemd/system/dnsmasq-adblock-hosts.service

[Unit]
Description=Update the adblock hosts file
Wants=dnsmasq-adblock-hosts.timer

[Service]
Type=oneshot
ExecStart=/usr/bin/curl -SLso /etc/dnsmasq.d/02-adblock-hosts.conf https://raw.githubusercontent.com/notracking/hosts-blocklists/master/dnsmasq/dnsmasq.blacklist.txt
ExecStart=/usr/bin/curl -SLso /etc/dnsmasq.d/03-popupads.conf https://raw.githubusercontent.com/hagezi/dns-blocklists/refs/heads/main/dnsmasq/popupads.txt
ExecStop=/usr/bin/systemctl restart dnsmasq.service

[Install]
WantedBy=multi-user.target

Adblock hosts bestand systeemtimer

En om er dan voor te zorgen dat dit bestand regelmatig ververst word maak een nieuwe systeemtimer aan in /etc/systemd/system/dnsmasq-adblock-hosts.timer met daarin het volgende:

[Unit]
Description=Update the adblock hosts file timer
Requires=dnsmasq-adblock-hosts.service
Requires=network.target

[Timer]
Unit=dnsmasq-adblock-hosts.service
OnCalendar=*-*-* 00,08,16,20:00:00

[Install]
WantedBy=timers.target

Zorg er daarna voor dat deze timer ook daadwerkelijk word uitgevoerd met

sudo systemctl enable --now dnsmasq-adblock-hosts.timer

Configuratie firewall

Open de DNS service in de firewall. Doe dat als volgt

sudo firewall-cmd --add-service=dns
sudo firewall-cmd --runtime-to-permanent