Aus Raspberry Pi Geek 07/2025

Raspberry Pi als Access Point mit Captive Portal

© Zauberhut / Fotolia.com

Umleitung

Martin Mohr

Mit ein wenig Know-how lässt sich der Raspberry Pi als autarker WLAN-Hotspot betreiben, der alle Zugriffe auf ein integriertes Captive Portal umleitet.

Einige ehemalige Azubis des Autors kamen mit einem spannenden Projekt auf ihn zu: Es geht um ein virtuelles Escape-Room-Spiel, das autark auf einem Raspberry Pi laufen soll. Die Teilnehmer verbinden sich mit dem Mini-Rechner und lösen dort virtuelle Aufgaben, wobei LEDs als Timer dienen. Der Autor übernahm dabei das Setup des RasPi. Die Hauptkomponente des Projekts besteht aus einem Raspberry Pi 4 mit 4 GByte RAM. Da das System veranstaltungstauglich sein soll, bauen wir den RasPi in ein schickes Gehäuse [1] ein.

Um die Reichweite des WLANs zu erhöhen, kommt ein externer WLAN-Stick [2] zum Einsatz. Der muss zum einen mit Linux kompatibel sein und zum anderen einen Access Point öffnen können. Einige WS2812-RGB-LEDs [3] sollen Statusinformationen des Servers oder auch des Spiels visualisieren. Für die Montage der Dioden drucken wir einen modifizierten Deckel für das Gehäuse (Abbildung 1). Die dazu nötige STL-Datei finden Sie auf Thingiverse [4].

Abbildung 1: Das Servergehäuse mit gedrucktem Deckel und LEDs zur Statusanzeige.

Abbildung 1: Das Servergehäuse mit gedrucktem Deckel und LEDs zur Statusanzeige.

Erste Schritte

Da wir auf dem Raspberry Pi kein grafisches Frontend benötigen und das komplette Setup über SSH vornehmen, verwenden wir als Betriebssystem die 64-Bit-Variante von Raspberry Pi OS Lite. Mit dem Raspberry Pi Imager schreiben wir das Image auf die SD-Karte. Dazu gilt es, vorab SSH zu aktivieren und ein sicheres Passwort zu setzen (Abbildung 2).

Abbildung 2: Bereits beim Schreiben des Images auf die SD-Karte aktivieren Sie SSH und setzen ein sicheres Passwort.

Abbildung 2: Bereits beim Schreiben des Images auf die SD-Karte aktivieren Sie SSH und setzen ein sicheres Passwort.

Nach dem Booten des RasPi von der SD-Karte verbinden wir uns per SSH auf die Konsole und beginnen mit dem Setup (Listing 1). Die Rolle des Webservers übernimmt Apache 2. Um später die Bibliothek für die LEDs installieren zu können, benötigen wir die Python-Devel-Pakete. Der Dienst Rfkill verhindert das Aktivieren des WLANs, solange kein Land für den RasPi ausgewählt wurde. Mit dem letzten Kommando aus Listing 1 speichern wir den Wert DE in der Konfiguration. Somit können wir auf alle WLAN-Ressourcen frei zugreifen.

Listing 1

Installation und Setup

### Betriebssystem auf aktuellen Stand bringen
$ sudo apt update
$ sudo apt upgrade
### Softwarepakete installieren
$ sudo apt install apache2 python3-dev
### Apache automatisch starten
$ sudo systemctl enable apache2
### Rfkill deaktivieren
$ sudo raspi-config nonint do_wifi_country DE

Bevor wir mit dem Setup fortfahren, nehmen wir noch zwei kleine Checks vor. Als Erstes prüfen wir mit dem Kommando ip a, ob das externe USB-WLAN-Device vom Betriebssystem erkannt wurde. In der Ausgabe sollte sich die Schnittstelle wlan1 finden. Als Zweites kontrollieren wir, ob der USB-Stick als Access Point agieren kann, denn es gibt Exemplare, denen diese Funktion fehlt. Das Kommando iw list gibt alle Parameter der vorhandenen WLAN-Devices aus. Suchen Sie in der Sektion Supported interface modes: nach dem Parameter AP. Er muss vorhanden sein, ansonsten eignet sich der Stick nicht für dieses Projekt. Der von uns verwendete TP-Link Archer T3U Plus AC1300 High Gain funktioniert sehr gut.

Access Point

Da auf Debian 12 “Bookworm” der NetworkManager standardmäßig installiert ist, setzen wir ihn auch ein. Die alten Hasen unter Ihnen werden sich vermutlich über die nächsten Schritte etwas wundern: Der NetworkManager funktioniert komplett anders, als Raspberry-Pi-Anwender es bisher gewohnt waren.

Listing 2 zeigt die zum Aufsetzen des WLAN-Access-Points notwendigen Kommandos. Er trägt den Namen AP und publiziert das gleichnamige WLAN. Standardmäßig bekommt er die feste IP-Adresse 10.42.0.1. Der PSK (Pre-shared Key) muss mindestens 8 Stellen lang sein, sonst gibt es eine Fehlermeldung. Die IPv6-Unterstützung haben wir deaktiviert, da andernfalls bei den Tests eigenartige Phänomene auftraten. Das letzte Kommando aus Listing 2 zeigt die konfigurierten Verbindungen an (Abbildung 3).

Listing 2

Access-Point-Setup

$ sudo nmcli connection add type wifi ifname wlan1 con-name AP autoconnect yes ssid AP
$ sudo nmcli connection modify AP 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared
$ sudo nmcli connection modify AP wifi-sec.key-mgmt wpa-psk
$ sudo nmcli connection modify AP wifi-sec.psk 12345678
$ sudo nmcli connection up AP
$ sudo nmcli con show
Abbildung 3: Diese Ausgabe zeigt eine korrekt konfigurierte WLAN-Schnittstelle.

Abbildung 3: Diese Ausgabe zeigt eine korrekt konfigurierte WLAN-Schnittstelle.

Namensauflösung

Jetzt ist es an der Zeit, den DNS-Server zu konfigurieren. Dazu fügen wir in der Konfigurationsdatei /etc/NetworkManager/NetworkManager.conf in der Sektion main den Eintrag dns=dnsmasq hinzu.

Für den Redirect legen wir die Datei /etc/NetworkManager/dnsmasq.d/redirect.conf an und befüllen sie mit dem Eintrag address=/#/10.42.0.1. Diese Zeile sorgt dafür, dass alle DNS-Anfragen die IP-Adresse 10.42.0.1 als Antwort erhalten. Das ist das Geheimnis unseres Captive Portal: Egal, welche URL man eingibt, man landet immer auf dem RasPi-Webserver. Spannend ist dabei die Tatsache, dass sich die Google-Suche hier unkooperativ verhält. Scheinbar werden hier keine DNS-Anfragen generiert, um sich auf die Google Server zu verbinden.

Webserver

Kommen wir nun zum Webserver Apache 2. Wir binden ihn fest an die IP-Adresse des externen Interfaces. Es soll nur von dort aus zu erreichen sein. Zu diesem Zweck editieren wir die Datei /etc/apache2/ports.conf und passen den zugehörigen Eintrag an: Listen 10.42.0.1:80.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben