CaptivePortal Check mit PiHole

Posted by quark007 | Posted in Computer & IT, Smartphone & Android | Posted on 05-04-2021-05-2008

0

Schon vor langer Zeit hatte ich mit den Artikel von Kuketz-Blog vorgenommen und bei meinen Smartphones den Captiveportal Check umgestellt. Doch bei einem Smartphone ging das nicht und ich hatte keine Idee wieso. Egal was ich eingestellt hatte, es wurde immer noch der check auf google/gstatic/android gelaufen ist.

Da mein PiHole ja sowieso läuft und von Hausaus einen Webserver mitbringt, sollte sich das doch lokal einstellen lassen. Seit der neuesten Version von PiHole gibt es auch die Möglichkeit DNSrecords direkt einzugeben. Damit können also die CaptivePortal Adressen direkt auch auf das PiHole selbst geleitet werden ohne umwege über die hosts-datei.

Zunächst habe ich für captiveportal eine eigenen lighttpd vhost angelegt:

$HTTP["host"] =~ "connectivitycheck" {
        server.document-root = "/var/www/captiveportal/"
        include "/var/www/captiveportal/rewrite.conf"
}
$HTTP["host"] =~ "msftconnecttest.com" {
    server.document-root = "/var/www/captiveportal/"
    $HTTP["url"] =~ "^/connecttest.txt$" {
        url.redirect = ( "" => "index.php" )
        url.redirect-code = 302
    }
    $HTTP["url"] =~ "^/redirect$" {
        url.redirect = ( "" => "index.php" )
        url.redirect-code = 302
    }
}

Anschließend musste noch die index.php angelegt werden, die nichts anders macht als den Status-Code 204 zurückzugeben.

<?php header("HTTP/1.0 204 No Content"); ?>

Ein Problem gibt es noch: von einigen Android-Versionen wird die folgende URL aufgerufen: connectivitycheck.gstatic.com/generate_204 (ohne Slash am Ende). Anfangs hatte ich versucht über eine 301 Weiterleitung den 204 Status auszugeben, was aber nicht funktioniert hat (da Android für diesen Check der Weiterleitung nicht folgt).

Ich habe mich dafür dann dem mod-rewrite Modul bedient und folgende Regel erstellt:

url.rewrite-if-not-file = (
    "^/(.+)/?$" => "/index.php"
)

Dieses Regel-File ist in der Seiten-Konfiguration (siehe oben) schon enthalten (mittels include). Es leitet einfach jede Anfrage auf die index.php um, wenn es die Datei nicht gibt.

Damit erhalte ich nun endlich nicht mehr die nervigen Benachrichtigungen, dass ich mich im Netzwerk anmelden müsste. Das lässt sich auch ganze einfach prüfen, indem im Browser die URL connectivitycheck.gstatic.com/generate_204 (mit und ohne Slash) aufgerufen wird und über die Entwicklerwerkzeuge der Rückgabe-Statuscode geprüft wird. Es darf dort NUR 204 stehen und zu jeder Anfrage auch nur eine Verbindung geben (sonst hätte man wieder die Weiterleitung per 301, die für diesen Zweck nicht funktioniert).

An dieser Stelle sei auch auf die wirklich guten Beitrag zu weiteren Möglichkeiten mit dem PiHole verweisen.

Write a comment