Pihole + Unbound Docker Compose file
from Octavusss@lemm.ee to selfhosted@lemmy.world on 18 Jun 23:14
https://lemm.ee/post/67215371

Hi friends.

I’ve been trying to find docker-compose.yaml for pihole+unbound so I can use pihole as both a recursive dns server and as local dns alongside Nginx Proxy Manager. But since v6 of pihole all the old files I could find don’t work properly or at all.

Does anyone here use pihole+unbound in docker?

#selfhosted

threaded - newest

chris@lemmy.grey.fail on 18 Jun 23:19 next collapse

services:

  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    hostname: sheldon
    environment:
      HOST_CONTAINERNAME: pihole
      TZ: ${TZ}
      WEBPASSWORD: ${WEBPASSWORD}
      DNSMASQ_LISTENING: "all"
      PIHOLE_DNS_1: "unbound#53"
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
      - "8080:80/tcp"
    # network_mode: host
    dns:
      - 127.0.0.1
    networks:
      dns:
        ipv4_address: 172.22.0.2
    volumes:
      - /mnt/appdata/pihole/etc-pihole:/etc/pihole
      - /mnt/appdata/pihole/etc-dnsmasq.d:/etc/dnsmasq.d
    restart: unless-stopped
    depends_on:
      unbound:
        condition: service_healthy

  unbound:
    container_name: unbound
    image: klutchell/unbound:latest
    networks:
      dns:
        ipv4_address: 172.22.0.3
    volumes:
      - /mnt/appdata/unbound:/opt/unbound/etc/unbound/custom
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "dig", "google.com", "@127.0.0.1"]
      interval: 10s
      timeout: 5s
      retries: 5

  wg-easy:
    container_name: wg-easy
    image: ghcr.io/wg-easy/wg-easy:15
    ports:
      - "51820:51820/udp"
      - "51821:51821/tcp"
    # environment:
    #   TZ: ${TZ}
    #   LANG: en
    #   WG_HOST: ${WG_HOST}
    #   PASSWORD_HASH: ${PASSWORD_HASH}
    #   WG_DEFAULT_DNS: 172.22.0.2
    #   WG_MTU: 1420
    networks:
      dns:
        ipv4_address: 172.22.0.4
    volumes:
      - /mnt/appdata/wg-easy:/etc/wireguard
      - /lib/modules:/lib/modules:ro
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv6.conf.all.disable_ipv6=0
      - net.ipv6.conf.all.forwarding=1
      - net.ipv6.conf.default.forwarding=1
    restart: unless-stopped

networks:
  dns:
    external: true

Feel free to just delete the wg-easy service.

Octavusss@lemm.ee on 19 Jun 05:42 next collapse

Thank you very much.

chris@lemmy.grey.fail on 20 Jun 00:05 collapse

How’d it work out?

Octavusss@lemm.ee on 20 Jun 10:42 collapse

Deleted the WireGuard and modified few other things in docker compose file and so far it’s running fine without any errors. So far do good.

Outwit1294@lemmy.today on 19 Jun 09:22 next collapse

You seem knowledgeable. I have a question about this. I have ran this type of setup before. Every time, I ended up ditching unbound because it throws DNSSEC error. I have tried troubleshooting but it doesn’t work.

chris@lemmy.grey.fail on 19 Jun 15:31 next collapse

Is your ISP interfering?

Outwit1294@lemmy.today on 19 Jun 15:35 collapse

Not as far as I know. I have never been throttled or anything ever. I have never seen any charges.

chris@lemmy.grey.fail on 19 Jun 23:58 collapse

I mean in terms of hijacking DNS. Might be worth a look.

Outwit1294@lemmy.today on 20 Jun 04:49 collapse

I don’t think it happens because I have used NextDNS and the logs show my activity.

Zanathos@lemmy.world on 20 Jun 10:30 collapse

I just went through my setup to verify dnssec settings in unbound to troubleshoot strange latency when removing random names while browsing. Did you verify the unbound certificate file was created and had the proper permissions? There are also a couple other configuration items in unbound related to dnssec that can be tweaked to improve the implementation.

Outwit1294@lemmy.today on 20 Jun 20:12 collapse

I tried again today with baremetal and docker install but I always end up with SERVFAIL after some time.

Zanathos@lemmy.world on 20 Jun 21:05 collapse

Instead of port 53, I need to run unbound on 5335 (or another obscure port).I believe I also had to make some host level changed for DNS to operate correctly for incoming requests.

Here’s my podman run commands. These might have changed a bit with Pihole v6, but should still be ok AFAIK.

#PiHole1 Deployment/Upgrade Script podman run -d --name pihole -p 53:53/tcp -p 53:53/udp -p 8080:80/tcp --hostname pihole --cap-add=CAP_AUDIT_WRITE -e FTLCONF_REPLY_ADDR4=192.168.0.201 -e PIHOLE_DNS_=“192.168.0.201#5335;192.168.0.202#5335” -e TZ=“America/New York” -e WEBPASSWORD=" MyPassword" -v /var/pihole/pihole1:/etc/pihole -v /var/pihole/pihole1/piholedns/:/etc/dnsmasq.d --restart=unless-stopped --label=“io.containers.autoupdate=registry” docker.io/pihole/pihole:latest

#UnBound1 Deployment/Upgrade Script podman run -d --name unbound -v /var/pihole/pihole1/unbound:/opt/unbound/etc/unbound/ -v /var/pihole/pihole1/unbound/unbound.log:/var/log/unbound/unbound.log -v /var/pihole/pihole1/unbound/root.hints:/opt/unbound/etc/unbound/root.hints -v /var/pihole/pihole1/unbound/a-records.conf:/opt/unbound/etc/unbound/a-records.conf -p 5335:5335/tcp -p 5335:5335/udp --restart=unless-stopped --label=“io.containers.autoupdate=registry” docker.io/mvance/unbound:latest

Outwit1294@lemmy.today on 22 Jun 04:41 collapse

I used a similar docker compose config. Yesterday I learned that unbound doesn’t have root.hints by default. I downloaded it following Anudeep’s guide on Github and it was working. But within 2 hours, it started taking too long to respond and eventually stopped replying to pihole. I had to switch to cloudflare.

Zanathos@lemmy.world on 22 Jun 10:33 collapse

Have you modified the default unbound config at all? This sounds like increasing the cache size limits and timeframes in the unbound config could help.

I’m actually chasing an issue I’ve always had where everything works great in my environment, but on mobile certain domains take ages to finally load up for me. I think it’s a combination of my Pihole blocking and the amount of domains tied to a page (advertisements and tracking), but would love to figure it out. I work around it right now by flipping wifi off and on again in those instances.

Outwit1294@lemmy.today on 22 Jun 16:04 collapse

I have used pi-hole recommended config. I have used unbound recommended config (which feels incomplete and confusing). I have tried tweaks here and there. End result is this.

So far, the longest I have had success is with unbound docker container. The issue with that is that it seems to not be caching entries.

irmadlad@lemmy.world on 19 Jun 16:58 collapse

How well does that run in docker? I’ve always liked docker, but it seems to me that certain apps should touch metal than be containerized. Maybe I’m too old school.

B0rax@feddit.org on 19 Jun 18:15 next collapse

I have all these services in docker as well (although not with the docker compose file here) and they run perfectly fine with a very low resource footprint.

irmadlad@lemmy.world on 20 Jun 01:57 collapse

0K that’s cool. I love docker. I would like to upgrade to k8s but I haven’t yet plumbed the depths of docker. I was just with the overhead of docker, since Pi-Hole/Unbound is a dedicated system, I thought maybe it’d get better thru put baked in. I wouldn’t listen to me tho, I’m medicated.

B0rax@feddit.org on 20 Jun 06:30 collapse

As an anecdote: I have one system (x86) with pi-hole and unbound in a docker, and a secondary raspberry pi with pi-hole running on bare metal. The docker system (although much more performant in general) has a lower latency as the raspberry bare metal install.

chris@lemmy.grey.fail on 19 Jun 23:55 next collapse

It runs quite well; Docker’s not a full fledged virtual machine so much as a virtualization layer. I also love the portability of running this in Docker. I rsync a backup of this and the Appdata folder every night. When or if this server fails, I can be up and running again in minutes on another machine.

Zanathos@lemmy.world on 20 Jun 10:27 collapse

I do exactly the same thing for all three of these services! My implementation is on podman rather than docker, but basically the same deal.

Appoxo@lemmy.dbzer0.com on 20 Jun 22:29 collapse

Focker Docker container in host mode is sufficient for most cases requiring bare deployment.

irmadlad@lemmy.world on 21 Jun 00:36 collapse

I’ve heard of Docker, Incus, k8s, VM, but not Focker. Is this some new containerization software?

Appoxo@lemmy.dbzer0.com on 21 Jun 06:44 collapse

Typo

irmadlad@lemmy.world on 21 Jun 10:19 collapse

Hey you never know. Could be the next big thing: Focker by Mo’Fugger Industries.

thagoat@lemmy.sdf.org on 19 Jun 00:51 next collapse

github.com/IAmStoxe/wirehole

Vanilla_PuddinFudge@infosec.pub on 20 Jun 13:26 collapse

3 years ago

2 years ago

uh, nah

thagoat@lemmy.sdf.org on 20 Jun 16:19 collapse

That’s when the compose file was written. The docker images named in the file are updated constantly. Fear not ad-block seeker!

Vanilla_PuddinFudge@infosec.pub on 20 Jun 16:23 collapse

Dope. Gonna give it a spin on a vps tonight.

slackarr@piefed.ca on 19 Jun 21:07 next collapse

I used to use a pihole+unbound single container docker image but technitium is just easier for me. Might be worth exploring other options like adguard home also.

numblyscabbyeach@lemmy.zip on 21 Jun 22:28 collapse

community-scripts.github.io/ProxmoxVE/scripts?id=…