Ehrweb.de

Warum Pi-hole erst 403 zeigte und dann funktionierte

Das Ziel war: Pi-hole Admin nur im internen Netzwerk erlauben. Genau das wurde serverseitig per Nginx-Regel umgesetzt.

1) Was korrekt konfiguriert war

2) Warum trotzdem auch intern ein 403 kam

Der Browser hat www.meineWebseite.net zuerst auf die öffentliche IP 88.95.88.5 aufgelöst. Damit kam der Request aus Sicht des Servers „extern“ an.

Folge: Die interne Allow-Regel hat nicht gegriffen, und Nginx hat korrekt mit 403 Forbidden geblockt.

3) Warum der erste DNS-Fix nicht gereicht hat

In Pi-hole v6 wurde der lokale Eintrag nicht über die alte Quelle ausgewertet. Deshalb zeigte die DNS-Auflösung weiterhin auf 88.95.88.5.

4) Der funktionierende Fix

Der lokale DNS-Eintrag wurde in Pi-hole v6 über die passende FTL-Konfiguration gesetzt: www.meineWebseite.net -> 192.168.0.2.

Ergebnis: Im LAN wird jetzt auf 192.168.0.2 aufgelöst, der Request gilt als intern, und die Admin-Seite ist intern wieder erreichbar (Login statt 403). Extern bleibt der Zugriff weiterhin gesperrt.

5) Exakte Konfiguration für das gleiche Problem

Folgende Dateien und Werte müssen gesetzt werden, wenn man intern Zugriff erlauben und extern blockieren will.

5.1 Nginx-VHost-Datei

Datei: /etc/nginx/sites-available/raspi

In den Location-Blöcken für Pi-hole Admin und API diese Regeln setzen:

location /admin/ {
    allow 127.0.0.1;
    allow ::1;
    allow 192.168.0.0/24;
    allow fd00::/8;
    deny all;
    proxy_pass http://127.0.0.1:8081/admin/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    auth_basic "Pi-hole";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

location /api/ {
    allow 127.0.0.1;
    allow ::1;
    allow 192.168.0.0/24;
    allow fd00::/8;
    deny all;
    proxy_pass http://127.0.0.1:8081/api/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    auth_basic "Pi-hole";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

Danach prüfen und laden:

sudo nginx -t
sudo systemctl reload nginx

5.2 Pi-hole v6 Local DNS (FTL)

Nicht nur /etc/pihole/custom.list verwenden, sondern den offiziellen FTL-v6-Schlüssel setzen:

sudo pihole-FTL --config dns.hosts '["192.168.0.2 www.meineWebseite.net meineWebseite.net"]'
sudo pihole reloaddns

Kontrollieren:

sudo pihole-FTL --config dns.hosts
dig +short @127.0.0.1 www.meineWebseite.net

Erwartung: 192.168.0.2

5.3 Optional: persistente Grundlage in der Install-Config

Datei: ~/raspi-install.env

Das interne Netz muss dort korrekt gesetzt sein, damit Generator-Skripte die richtigen Nginx-Allow-Regeln schreiben:

LOCAL_NETWORK=192.168.0.0/24

5.4 Client-Cache leeren

Auf macOS nach DNS-Änderung:

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

Kurzfassung

Der Zugriffsschutz war richtig. Das Problem war die Auflösung auf die falsche IP. Erst mit lokaler DNS-Auflösung auf 192.168.0.2 passt beides: intern erlaubt, extern geblockt.