From 3e23b794e7a8fe2d54728a73e9b57a55e9ba5038 Mon Sep 17 00:00:00 2001 From: juvdiaz Date: Mon, 29 Jun 2026 14:10:50 -0600 Subject: [PATCH] Fix Pi-hole v6 LAN DNS mode --- infra/rpi-services/README.md | 9 +++++---- infra/rpi-services/bootstrap.sh | 5 ++--- infra/rpi-services/docker-compose.yml | 1 + jeannie | 8 +++----- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/infra/rpi-services/README.md b/infra/rpi-services/README.md index 37f207c..e5d9ad7 100644 --- a/infra/rpi-services/README.md +++ b/infra/rpi-services/README.md @@ -11,9 +11,10 @@ Kubernetes cluster: Pi-hole also keeps public fallback upstreams in its config, so DNS can continue to resolve through `1.1.1.1` and `9.9.9.9` if the Unbound container stops. -For Pi-hole v6, the stack sets `FTLCONF_dns_interface=ALL` through -`PIHOLE_DNS_INTERFACE` so LAN clients such as the Debian control host are not -rejected as non-local networks. +For Pi-hole v6, the stack sets `FTLCONF_dns_interface=ALL` and +`FTLCONF_dns_listeningMode=ALL` through `PIHOLE_DNS_INTERFACE` and +`PIHOLE_DNS_LISTENING_MODE` so LAN clients such as the Debian control host are +not rejected as non-local networks. The bootstrap script prefers Docker data under `/nvme-storage/docker` only when that path is an active mount point and writable. If the NVMe is missing or @@ -35,7 +36,7 @@ Useful overrides: ```bash LAB_RPI_HOST=192.168.100.89 ./jeannie rpi-services PIHOLE_WEBPASSWORD='' ./jeannie rpi-services -PIHOLE_DNS_INTERFACE=ALL ./jeannie rpi-services +PIHOLE_DNS_INTERFACE=ALL PIHOLE_DNS_LISTENING_MODE=ALL ./jeannie rpi-services PIHOLE_WEB_PORT=8081 UPTIME_KUMA_PORT=3001 ./jeannie rpi-services LAB_RPI_STOP_LEGACY_PIHOLE=false ./jeannie rpi-services ``` diff --git a/infra/rpi-services/bootstrap.sh b/infra/rpi-services/bootstrap.sh index 264b3c1..39f711e 100755 --- a/infra/rpi-services/bootstrap.sh +++ b/infra/rpi-services/bootstrap.sh @@ -141,6 +141,7 @@ PIHOLE_DNS_BIND_IP=${PIHOLE_DNS_BIND_IP:-0.0.0.0} PIHOLE_WEB_BIND_IP=${PIHOLE_WEB_BIND_IP:-0.0.0.0} PIHOLE_WEBPASSWORD=${PIHOLE_WEBPASSWORD} PIHOLE_DNS_INTERFACE=${PIHOLE_DNS_INTERFACE:-ALL} +PIHOLE_DNS_LISTENING_MODE=${PIHOLE_DNS_LISTENING_MODE:-ALL} PIHOLE_UPSTREAMS=${PIHOLE_UPSTREAMS:-unbound#53;1.1.1.1;9.9.9.9} PIHOLE_DATA_DIR=${PIHOLE_DATA_DIR:-${DATA_DIR}/pihole/etc-pihole} PIHOLE_DNSMASQ_DIR=${PIHOLE_DNSMASQ_DIR:-${DATA_DIR}/pihole/etc-dnsmasq.d} @@ -254,9 +255,7 @@ for line in useful_lines(static_dhcp_hosts_file): PY sudo docker cp "${dnsmasq_file}" "${pihole_container}:/etc/dnsmasq.d/02-homelab-managed-dns.conf" rm -f "${dnsmasq_file}" - if ! sudo docker exec "${pihole_container}" pihole reloaddns; then - sudo docker restart "${pihole_container}" >/dev/null - fi + sudo docker restart "${pihole_container}" >/dev/null } seed_uptime_kuma_monitors() { diff --git a/infra/rpi-services/docker-compose.yml b/infra/rpi-services/docker-compose.yml index af97095..3668f53 100644 --- a/infra/rpi-services/docker-compose.yml +++ b/infra/rpi-services/docker-compose.yml @@ -23,6 +23,7 @@ services: WEBPASSWORD: ${PIHOLE_WEBPASSWORD:-homelab-change-me} DNSMASQ_LISTENING: all FTLCONF_dns_interface: ${PIHOLE_DNS_INTERFACE:-ALL} + FTLCONF_dns_listeningMode: ${PIHOLE_DNS_LISTENING_MODE:-ALL} PIHOLE_DNS_: ${PIHOLE_UPSTREAMS:-unbound#53;1.1.1.1;9.9.9.9} FTLCONF_dns_upstreams: ${PIHOLE_UPSTREAMS:-unbound#53;1.1.1.1;9.9.9.9} REV_SERVER: ${PIHOLE_REV_SERVER:-false} diff --git a/jeannie b/jeannie index ed24496..5296ebb 100755 --- a/jeannie +++ b/jeannie @@ -4658,12 +4658,10 @@ status_http_reachable() { esac } -status_gitea_public_repo_ok() { +status_gitea_public_ok() { local root_url="${LAB_GITEA_ROOT_URL:-${LAB_PUBLIC_URL:-https://lab2025.duckdns.org}/git/}" - local repo_owner="${LAB_GITEA_REPO_OWNER:-jv}" - local repo_name="${LAB_GITEA_REPO_NAME:-my-homelab-configs}" - status_http_ok "${root_url%/}/${repo_owner}/${repo_name}/" + status_http_ok "${root_url%/}/user/login" } status_cascade_check() { @@ -4855,7 +4853,7 @@ status_cascade_report() { status_cascade_check "OCI edge SSH" check_edge_ssh || failures=$((failures + 1)) status_cascade_check "Traefik LoadBalancer HTTP" status_http_reachable "http://${LAB_TRAEFIK_LB_IP:-192.168.100.240}/" || failures=$((failures + 1)) status_cascade_check "Website public URL" status_http_ok "${LAB_PUBLIC_URL:-https://lab2025.duckdns.org}/" || failures=$((failures + 1)) - status_cascade_check "Gitea public repo URL" status_gitea_public_repo_ok || failures=$((failures + 1)) + status_cascade_check "Gitea public login URL" status_gitea_public_ok || failures=$((failures + 1)) if ((failures > 0)); then printf '\nStatus cascade found %s blocking failure(s).\n' "${failures}" >&2