Terug naar blog
Augustus 19, 2026Handleidingen

AdGuard Home instellen op een VPS

AdGuard Home op Ubuntu installeren, de eerste-startassistent afronden, de web-UI vergrendelen, DNS-over-HTTPS en DNS-over-TLS inschakelen, apparaten naar je resolver wijzen en voorkomen dat je een open DNS-server draait die het hele internet kan misbruiken.

AdGuard Home instellen op een VPS

AdGuard Home is een zelfgehoste DNS-sinkhole en een resolver van het recursieve type met een webinterface. Het kan advertenties, trackers en malwaredomeinen blokkeren voor elk apparaat dat het als DNS gebruikt — telefoons, laptops, smart-tv’s en andere VPS-projecten. Anders dan een browserextensie werkt het ook voor apps die hosts-bestanden negeren. Het op een VPS draaien is nuttig als je onderweg dezelfde filtering wilt, of als je geen Raspberry Pi in het thuisnetwerk wilt.

De gevaarlijke standaard die je niet mag uitrollen is een open resolver: als UDP/TCP 53 vanaf het hele internet bereikbaar is zonder toegangscontrole, gebruiken vreemden je VPS voor DNS-amplificatie en krijg je abuseklachten. Deze gids installeert AdGuard Home op Ubuntu, bindt DNS aan localhost of een privé-WireGuard-interface tenzij je versleutelde DNS bewust publiek maakt, zet het dashboard op HTTPS en laat zien hoe laptops en telefoons DNS-over-HTTPS (DoH) of DNS-over-TLS (DoT) kunnen gebruiken zonder klassieke poort 53 voor de wereld te openen.

Waar AdGuard Home goed in is

Pi-hole is de gebruikelijke vergelijking. AdGuard Home is één binair bestand met een ingebouwde web-UI, optionele versleutelde DNS-frontends en instellingen per client. Je kunt het in Docker of als systemd-service draaien. Op een Hiddence-VPS past het goed bij een privé-VPN: apparaten joinen WireGuard, sturen DNS via de tunnel naar de VPS en stellen poort 53 nooit openbaar bloot.

  • Netwerkbrede blokkering zonder op elk apparaat een app te installeren
  • DoH (443) en DoT (853) zodat DNS niet in klare tekst over openbare wifi gaat
  • Querylog en statistieken om te zien welk apparaat met welk domein praat
  • Eigen upstreams (Quad9, Cloudflare of je eigen Unbound)
  • Kleine voetafdruk — een 1 GB-VPS kan een huishouden plus een paar extra clients filteren

Vereisten

Je hebt een domein nodig als je een vertrouwd certificaat wilt voor DoH/DoT en voor het dashboard. Je kunt eerst testen via HTTP en het server-IP, maar laat het zo niet staan. Als systemd-resolved op Ubuntu al poort 53 in bezit heeft, geven we die vrij voordat AdGuard Home DNS bindt.

  • Ubuntu 22.04- of 24.04-VPS met root/sudo
  • 1 GB RAM is genoeg voor persoonlijk gebruik
  • Een domein of subdomein (dns.example.com) met een A-record naar de VPS
  • SSH-toegang; optioneel WireGuard als je DNS alleen in een tunnel wilt

Stap 1: Poort 53 vrijmaken en AdGuard Home installeren

Ubuntu Server draait systemd-resolved vaak als stub op 127.0.0.53:53. AdGuard Home wil 53 op de interfaces die jij kiest. De installer kan dat doen, maar het expliciet doen voorkomt half kapotte DNS op de VPS zelf (de server moet nog steeds pakketten kunnen resolven).

bash
ssh root@YOUR_VPS_IP
apt update && apt -y upgrade
apt -y install curl ca-certificates

# See who owns port 53:
ss -tulpn | grep ':53'

# Typical Ubuntu fix: stop stub listener, point the OS at a temporary resolver
mkdir -p /etc/systemd/resolved.conf.d
cat >/etc/systemd/resolved.conf.d/adguardhome.conf <<'EOF'
[Resolve]
DNS=1.1.1.1
DNSStubListener=no
EOF
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl restart systemd-resolved

curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v

Stap 2: Assistent bij eerste start

De installer print een URL, meestal http://YOUR_IP:3000/. Open die, maak een beheerdersgebruiker met een lang wachtwoord aan en kies luisteradressen. Voor een openbare VPS is een veilige eerste setup: Admin Web op 127.0.0.1:3000 (Caddy ervoor) of op 80/443 na TLS; DNS-luisteren op 127.0.0.1:53 plus een VPN-interface, niet op 0.0.0.0:53. Heb je écht LAN-achtige DNS voor vrienden nodig, kies dan DoH/DoT op 443/853 met authenticatie, geen open 53/udp.

Kies upstream-DNS-servers die je vertrouwt. Veel mensen gebruiken https://dns.quad9.net/dns-query of Cloudflare. Zet parallelle verzoeken aan als je snellere failover wilt. Schakel de standaardfilterlijsten in en voeg later meer toe — vijftig lijsten op dag één maakt debuggen onmogelijk als een site stukgaat.

Kun je poort 3000 niet vanaf je laptop openen, gebruik dan een SSH-tunnel: ssh -L 3000:127.0.0.1:3000 root@YOUR_VPS_IP en ga naar http://127.0.0.1:3000/

Stap 3: Reverse proxy en HTTPS voor het dashboard

Na de assistent verplaatst AdGuard Home de UI meestal naar poort 80. Dat botst met Caddy of Nginx als je ook sites host. Een schoon patroon: AdGuard Home-web op 127.0.0.1:8080, DNS op 127.0.0.1:53, Caddy op 443 voor dashboard en DoH.

bash
# In AdGuard Home settings, bind the web UI to 127.0.0.1:8080
# Example Caddyfile:

dns.example.com {
    reverse_proxy 127.0.0.1:8080
}

# After Caddy is up:
curl -I https://dns.example.com

Stap 4: DNS-over-HTTPS en DNS-over-TLS inschakelen

Zet in de versleutelingsinstellingen versleuteling aan, stel de servernaam in op dns.example.com en wijs AdGuard Home naar je certificaatbestanden — die van Caddy, of certificaten die AdGuard Home zelf ophaalt als het op 443 luistert. DoH is meestal https://dns.example.com/dns-query. DoT is dns.example.com:853. Heeft Caddy 443 al, laat Caddy TLS beëindigen en het DoH-pad reverse-proxyn naar de platte HTTP-DoH-poort van AdGuard Home, of laat AdGuard Home op 443 luisteren en zet het dashboard op een ander subdomein.

Controleer met een client voordat je elk apparaat omzet. Op een laptop met een moderne curl:

bash
curl -H 'accept: application/dns-json' 'https://dns.example.com/dns-query?name=example.com&type=A'

# DoT test (kdig from knot-dnsutils, if installed):
# kdig @dns.example.com +tls-ca +tls-host=dns.example.com example.com

Stap 5: Echte apparaten naar je resolver wijzen

Windows 11 en recente Android-builds kunnen een DoH-sjabloon gebruiken. iOS kan een configuratieprofiel of een client met DoH gebruiken. Firefox en Chromium staan ook een eigen DoH-URL toe. Op een thuisrouter WAN-DNS alleen instellen als de router DoT/DoH kan; anders WireGuard draaien en DNS op het VPN-IP van de VPS zetten, zodat klassieke DNS nooit het internet oversteekt.

  • Android 9+: Privé-DNS (DoT) → dns.example.com
  • Firefox: Instellingen → Netwerk → DNS over HTTPS → eigen URL https://dns.example.com/dns-query
  • Apple-apparaten: een ondertekend mobileconfig of een app met DoH/DoT
  • Andere VPS: resolv.conf of systemd-resolved op het WireGuard-IP van deze AdGuard-instantie zetten
  • Zet dit VPS-IP niet als DNS op willekeurige openbare netwerken zonder versleuteling

Stap 6: Firewall — open recursieve DNS sluiten

Dit deel voorkomt een nare verrassing. Sta SSH, HTTPS en optioneel 853/tcp voor DoT toe. Sta 53/udp niet toe vanaf 0.0.0.0/0 tenzij je een zeer specifiek, rate-limited, geauthenticeerd ontwerp hebt — en zelfs dan zou je het waarschijnlijk niet moeten doen.

bash
ufw allow OpenSSH
ufw allow 443/tcp comment 'dashboard + DoH'
ufw allow 853/tcp comment 'DoT'
# If DNS is only on WireGuard (example iface wg0, 10.8.0.1):
# ufw allow in on wg0 to any port 53 proto udp
ufw enable
ufw status verbose

# Confirm 53 is not public:
ss -tulpn | grep ':53'

Filters, allowlists en clients

Begin met de standaard-DNS-filter van AdGuard en één malwarelijst. Als een site zich misdraagt, kijk in het querylog en voeg dan een specifieke allowlistregel toe in plaats van alle blocking uit te zetten. Gebruik clientnamen (op IP of op ClientID in de DoH-URL) zodat je strengere lijsten op een smart-tv en lossere op een werklaptop kunt zetten. Zet veilige zoekopdrachten alleen aan als je dat écht wilt — het verrast mensen die niet om herschreven Google-resultaten hebben gevraagd.

  • Querylog: vind het geblokkeerde domein en whitelist het als het een vals positief is
  • Clientinstellingen: verschillende blocklists per apparaat
  • Niet-toegestane clients: blokkeer reeksen die je niet bezit
  • Rate limiting: zet aan als je ooit meer dan een handjevol gebruikers blootstelt

Problemen oplossen

Als de VPS zelf geen apt update meer kan, heb je lokale DNS kapotgemaakt bij het vrijmaken van poort 53 — zet een statische resolver in resolved.conf zoals hierboven. Als apparaten «internet hebben» maar advertenties nog laden, omzeilen ze jouw DNS (hardgecodeerde resolvers, DoH in de browser of een app met eigen DNS). Is het dashboard leeg, dan kijk je naar de verkeerde instantie of tik je nog op poort 3000 nadat de assistent de UI heeft verplaatst.

  • apt faalt: controleer /etc/resolv.conf en systemd-resolved
  • Poort 53 in gebruik: ss -tulpn, schakel de stub-listener uit
  • DoH-certificaatfouten: hostnaam moet overeenkomen met de SAN van het certificaat
  • Advertenties nog zichtbaar: browser-DoH naar een andere provider overschrijft het OS
  • Veel RAM: querylog + te veel filterlijsten — lijsten inkorten en logretentie verkorten

Beveiligingschecklist

De web-UI is een beheerpanel. Uniek wachtwoord, alleen HTTPS, en publiceer de URL niet. Houd AdGuard Home bijgewerkt; zowel het installatiescript als de UI bieden een updatepad. Beperk 443 als alleen jouw apparaten DoH mogen gebruiken — HTTP-basicauth op het DoH-pad of alleen WireGuard-toegang is veel veiliger dan een bekende open resolver.

  • Geen openbare 53/udp
  • HTTPS op het dashboard
  • Sterk beheerderswachtwoord, opgeslagen in een wachtwoordbeheerder
  • Kies WireGuard + interne DNS voor gezinsapparaten
  • Back-up van AdGuardHome.yaml buiten de server

Tips

  • Maak een back-up van /opt/AdGuardHome/AdGuardHome.yaml voor elke upgrade
  • Gebruik een dedicated subdomein; deel het niet met een ongerelateerd CMS
  • Draait Caddy al, laat Caddy 443 bezitten en houd AdGuard Home op localhost
  • Documenteer de DoH-URL voor je apparaten — je vergeet hem
  • Combineer met de gidsen voor SSH-hardening en firewall zodat de VPS niet alleen «DNS-veilig» is

AdGuard Home op een VPS is overzichtelijk: poort 53 lokaal vrijmaken, de installer draaien, de assistent afronden met een sterk beheerderswachtwoord, de UI op HTTPS zetten, DoH/DoT inschakelen en klassieke DNS van het openbare internet afhouden. Wijs apparaten naar je versleutelde eindpunt of naar een VPN-IP, begin met een kleine set filters en gebruik het querylog als iets stukgaat. Dat is een privéresolver die je echt beheert — geen openbare open DNS die je VPS in abusedatabases zet.