Pi-hole en Unbound in docker

De onderstaande stappen en configuraties zijn gebaseerd op het gebruik van Docker Compose voor het installeren van Pi-hole en Unbound in Docker containers. Voor Unbound wordt gebruik gemaakt van de versie 1.18.0, gebaseerd op het Dockerfile van MatthewVance/unbound-docker, terwijl Pi-hole wordt ingezet met de standaard configuratie van docker-pi-hole.

Deze setup biedt een geïntegreerde oplossing voor DNS-beheer en advertentieblokkering op een Synology NAS, wat wordt bereikt door de volgende stappen:

SSH inschakelen op je Synology NAS:

  • SSH inschakelen op je Synology NAS:
  • Log in op DSM (DiskStation Manager).
  • Ga naar Configuratiescherm > Terminal & SNMP.
  • Vink SSH-service inschakelen aan en klik op Toepassen.

Verbinden met je NAS via SSH:

  • Gebruik een SSH-client zoals PuTTY (Windows) of de terminal (macOS/Linux).
  • Maak verbinding met je NAS door het volgende commando uit te voeren:
ssh [gebruikersnaam]@[IP-adres-van-je-NAS]

Identificeer de LAN-interface van de Synology:

  • Voer het volgende commando in:
/sbin/ifconfig -a
  • Noteer de naam van de LAN-interface, bijvoorbeeld ovs_eth0.

Creëer een macvlan netwerk:

  • Voer het volgende commando in, waarbij je [parent-interface] vervangt door de naam van de LAN-interface die je hebt geïdentificeerd:
sudo docker network create -d macvlan -o parent=[parent-interface] --subnet=192.168.10.0/24 --gateway=192.168.10.1 --ip-range=192.168.10.30/31 pihole_unbound_network

Maak de benodigde mappen aan:

  • Voer de volgende commando’s in:
mkdir -p /volume1/docker/pihole/dnsmasq.d
mkdir -p /volume1/docker/pihole/pihole
mkdir -p /volume1/docker/unbound

Bestanden downloaden naar de unbound map:

  • Download de benodigde bestanden van de Unbound configuratie van GitHub naar de unbound map die je eerder hebt aangemaakt.

https://gitea.ipalm.nl/palmw01/Unbound

Let op, er is geen forwarding opgenomen in de configuratie, dus alle DNS-queries worden rechtstreeks door de Unbound DNS-server zelf afgehandeld zonder doorverwijzing naar externe DNS-servers.

Docker Compose YAML-bestand maken:

  • Maak een Docker Compose YAML-bestand aan (docker-compose.yml) voor het deployen van de containers met behulp van Portainer.
version: "3.9"
services:
pihole:
image: pihole/pihole
container_name: pihole
mem_limit: 2g
cpu_shares: 768
security_opt:
- no-new-privileges:false
restart: on-failure:5
networks:
pihole_unbound_network:
ipv4_address: 192.168.10.30
pihole_bridge:
ipv4_address: 192.168.90.30
volumes:
- /volume1/docker/pihole/dnsmasq.d:/etc/dnsmasq.d:rw
- /volume1/docker/pihole/pihole:/etc/pihole:rw
environment:
WEB_BIND_ADDR: 192.168.10.30
WEB_PORT: 8080
WEBPASSWORD: [wachtwoord]
TZ: Europe/Amsterdam
DNSMASQ_USER: root
DNSMASQ_LISTENING: all
PIHOLE_DNS_1: 192.168.10.31
cap_add:
- NET_ADMIN

unbound:
image: mvance/unbound:latest
container_name: unbound
restart: on-failure:5
volumes:
- /volume1/docker/unbound:/opt/unbound/etc/unbound:rw
ports:
- "53:53/udp"
- "53:53/tcp"
- "8953:8953/tcp"
networks:
pihole_unbound_network:
ipv4_address: 192.168.10.31

networks:
pihole_bridge:
driver: bridge
ipam:
config:
- subnet: 192.168.90.0/24
gateway: 192.168.90.1
pihole_unbound_network:
external:
name: pihole_unbound_network
  • Vervang 192.168.10.30 en 192.168.10.31 door de gewenste IP-adressen binnen het subnet dat je eerder hebt ingesteld voor het macvlan netwerk.
  • Indien je dit vervangt moet je ook het gewenste IP-adres vervangen bij het WEB_BIND_ADDR (IP-adres Pi-Hole) en PIHOLE_DNS_1 (IP-adres Unbound).

Docker Compose stack deployen via Portainer:

  • Log in op Portainer en navigeer naar Stacks.
  • Klik op Add stack en plak de inhoud van je Docker Compose YAML-bestand (docker-compose.yml) in het veld.
  • Geef je stack een naam, bijvoorbeeld pihole_unbound_stack.
  • Klik op Deploy the stack.

Controleer de deployed services:

  • Ga naar Containers in Portainer om te controleren of de pihole en unbound containers correct zijn gestart.

Wijzig DNS-instellingen op Synology NAS:

  • Log in op DSM (DiskStation Manager) van je Synology NAS.
  • Navigeer naar Configuratiescherm > Netwerk > Algemeen.
  • Selecteer DNS-server handmatig configureren.
  • Verander de DNS-serverinstellingen naar het IP-adres dat je hebt ingesteld voor de pihole container in het Docker Compose YAML-bestand. Kies ook een alternatieve DNS-server zoals 1.1.1.1 om geen DNS problemen te krijgen met andere docker containers.
  • Klik op toepassen.

Wijzig de DNS-instellingen in je netwerk (bijvoorbeeld UniFi):

  • Log in op de beheerinterface van je netwerkapparatuur (bijvoorbeeld UniFi Controller).
  • Navigeer naar de instellingen voor je netwerk of VLAN waar je Synology NAS en andere apparaten zijn verbonden.
  • Wijzig de DNS-instellingen zodat de Pi-hole container als DNS-server wordt gebruikt.

Wijzig unbound.conf om unbound-control in te schakelen:

  • Log in op je Synology NAS via SSH.
  • Navigeer naar de unbound map waar je unbound.conf zich bevindt (bijvoorbeeld /volume1/docker/unbound).
  • Open het unbound.conf bestand met een teksteditor.
  • Zoek naar de regel die unbound-control instellingen bevat.
  • Verander de waarde van unbound-control van no naar yes.
  • Sla het bestand op en sluit de teksteditor af.

Herstart de Unbound-container:

  • Om de wijzigingen in unbound.conf toe te passen, herstart je de Unbound-container.
  • Ga terug naar Portainer of gebruik SSH om de Unbound-container te herstarten.
docker restart unbound

Gebruik unbound-control via SSH:

  • Met unbound-control kun je verschillende operationele commando’s uitvoeren op de Unbound DNS-server.
  • Gebruik het volgende commando via SSH om unbound-control commando’s uit te voeren:
docker exec unbound unbound-control <command>
  • Vervang <command> door het gewenste commando.

Lijst met beschikbare unbound-control commando’s:

  • status: Toon de huidige status van de Unbound-server.
  • reload: Herlaad de configuratie van de Unbound-server.
  • start: Start de Unbound DNS-server.
  • stop: Stop de Unbound DNS-server.
  • stats_noreset: Toon statistieken zonder deze te resetten.
  • flush_zone : Verwijder de cache voor een specifieke DNS-zone.
docker exec unbound unbound-control status
docker exec unbound unbound-control reload
docker exec unbound unbound-control stats_noreset

Een volledige lijst met de commands kun je vinden via:

https://unbound.docs.nlnetlabs.nl/en/latest/manpages/unbound-control.html

Door deze stappen te volgen, kun je unbound-control inschakelen, de Unbound DNS-server beheren en specifieke commando’s uitvoeren via SSH op je Synology NAS.