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
/admindurfte nur intern aufgerufen werden.-
Externe Zugriffe sollten geblockt werden
(
403 Forbidden).
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.
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.
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.