Dieses Tutorial erklärt, wie man:
- Mit hostapd den Raspberry Pi als Access Point (AP) konfiguriert.
- Mit dnsmasq einen DHCP und DNS Server für das AP-Netzwerk bereitstellt und konfiguriert.
- Mit lighttpd und PHP einen schlanken und schnellen Webserver aufbaut.
Für dieses Tutorial kam ein Raspberry Pi 2 Model B mit Ralink RT5370 Wireless Adapter zum Einsatz. Es wird das Netzwerk 192.168.222./24 aufgebaut bzw. benutzt. Der Pi hat in diesem Tutorial den Namen "my.pi". Als SSID habe ich "PiNet" gewählt und als dazugehörige Passphrase "myPiNetAP" gesetzt. Basis ist das Raspbian Jessie Lite Image vom 18.03.2016 (out of the box).
Dauer, wenn keine Fehler auftreten: Maximal 30 Minuten
Voraussetzungen: Basis Netzwerkkenntnisse.
Eingesetzter Router: FritzBox
Der Pi hat neben dem WLAN noch eine LAN-Verbindung zur FritzBox. Der Client (Windows Laptop) ist nur über WLAN verbunden - kein LAN.
1. Vorbereitung:
Das Image auf SD-Karte bringen. Ich habe dazu das portable USB Image Tool und eine 2GB SD-Karte verwendet.
Nach dem ersten Start mit dem User pi anmelden und die notwendigen Pakete installieren. Gegebenenfalls vorher die Spracheinstellungen anpassen. Wenn der Pi ans LAN angeschlossen wird und euer Router automatisch IP-Adressen an beliebige Netzwerkteilnehmer vergibt, geht das sogar headless. Einfach in eurem Router nachschauen, welche IP-Adresse für den Pi vergeben wurde und mit dem SSH Client eures geringsten Misstrauens eine Verbindung aufbauen. Ich habe dafür von meinem Windows-Laptop aus die portable Version von Kitty verwendet. Die Installation:
Prüfen, ob der WiFi Adapter erkannt wird:
$ lsusb
Bus 001 Device 005: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
[...]
=> Der WiFi Adapter wird erkannt.
Feste IP Adresse vergeben. Es wird eine private IP-Adresse nach RFC 1918 gewählt. Dazu in /etc/network/interfaces folgende Einträge vornehmen:
$ sudo nano /etc/network/interfaces
auto lo
iface lo inet loopback
iface eth0 inet manual
# AP Mode
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.222.1
netmask 255.255.255.0
Alles anzeigen
Zum Testen den Pi rebooten und mit ifconfig schauen, ob der Adapter wlan0 aktiv ist und ob die IP-Adresse 192.168.222.1 zugewiesen wurde. Wenn ja, weiter zum nächsten Schritt...
2. AP (hostapd) konfigurieren:
In /etc/default/hostapd die hostapd Konfigurationsdatei setzen. Dabei auch das Kommentarzeichen am Anfang entfernen:
Die Konfigurationsdatei /etc/hostapd/hostapd.conf mit folgendem Inhalt erstellen (ACHTUNG: Keine Leerzeichen vor oder nach dem Gleichheitszeichen):
$ sudo nano /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=PiNet
channel=6
hw_mode=g
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
wpa=2
wpa_passphrase=myPiNetAP
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Alles anzeigen
Anm.: Die Wahl von "channel" ist abhängig von Eurer Umgebung. Ggf. einen Anderen wählen. Der Eintrag "driver" muss zu eurem WLAN-Adapter passen. nl80211 steht für meine Ralink. Für Edimax gibt es hier ein Tutorial.
Den hostapd Service beim Booten starten und die neue Konfigurationsdatei einlesen:
Anm.: Normalerweise sollte der hostapd Service schon enabled sein.
Jetzt sollte das Netzwerk "PiNet" sichtbar sein. Das kann man mit folgendem Befehl prüfen:
Der Befehl sollte ungefähr folgende Ausgabe erzeugen:
Interface wlan0
ifindex 3
wdev 0x1
addr @@:@@:@@:@@:@@:@@
ssid PiNet
type AP
wiphy 0
channel 11 (2462 MHz), width: 20 MHz (no HT), center1: 2462 MHz
Man kann es auch mit einem anderen Rechner oder einem Handy testen. Mit einigen Handies soll es Schwierigkeiten geben. Der Test mit einem anderen Rechner ist daher zu bevorzugen. Für den Test zum Verbinden "PiNet" auswählen und mit der Passphrase "myPiNetAP" die Verbindung herstellen. Der Verbindungsaufbau sollte jetzt schon funktionieren. Allerdings wird noch keine IP-Adresse zugewiesen - zumindest nicht aus dem gewünschten Netzwerk 192.168.222.0/24. Dies kommt im nächsten Schritt.
Wenn es an dieser Stelle zu Fehlern kommt den Service hostapd stoppen und manuell im Debug-Mode starten:
Dann hilft nur lesen, suchen und lösen. Ansonsten wenn alles funktioniert weiter zum Nächsten Schritt...
3. DHCP und DNS (dnsmasq) konfigurieren:
Originale Konfigurationsdatei verschieben:
Neue Konfigurationsdaei /etc/dnsmasq.conf mit folgendem Inhalt erstellen:
$ sudo nano /etc/dnsmasq.conf
interface=wlan0
dhcp-range=192.168.222.100,192.168.222.254,255.255.255.0,48h
listen-address=127.0.0.1
listen-address=192.168.222.1
Anm.: Mit "dhcp-host=..." kann eine permanente IP-Adresse an einem Host zugewiesen werden. Für die genaue Syntax bitte die Anleitung von dnsmasq konsultieren. Ich habe bei mir noch
gesetzt. Dadurch bekommt mein Client (Windows Laptop) immer die gleiche IP-Adresse zugewiesen. Das @@:... mit der eigenen MAC-Adresse ersetzen.
In /etc/hosts die gewünschten Hostnamen setzen. Diese werden beim Starten von dnsmasq ausgelesen und im lokalen Netzwerk bereitgestellt. Hier ein Beispiel:
Den dnsmasq Service beim Booten starten und die neue Konfigurationsdatei übernehmen:
Zum Testen den Pi rebooten. Wenn alles OK ist, steht jetzt ein DHCP und DNS Server bereit. Dazu mit einem Client mit dem AP verbinden und die zugewiesene IP-Adresse, Subnetmask und Nameserver prüfen. Unter Windows geht das auf der Eingabeaufforderung (cmd) mit:
Unter dem Windows WLAN Adapter sollten folgende Einträge zu finden sein (Auszug):
Drahtlos-LAN-Adapter WiFi:
Verbindungsspezifisches DNS-Suffix:
[...]
DHCP aktiviert. . . . . . . . . . : Ja
[...]
IPv4-Adresse . . . . . . . . . . : 192.168.222.222(Bevorzugt)
Subnetzmaske . . . . . . . . . . : 255.255.255.0
Lease erhalten. . . . . . . . . . : Donnerstag, 24. März 2016 00:44:18
Lease läuft ab. . . . . . . . . . : Sonntag, 30. April 2152 07:13:11
Standardgateway . . . . . . . . . : 192.168.222.1
[...]
DNS-Server . . . . . . . . . . . : 192.168.222.1
Alles anzeigen
Um zu prüfen, ob auch die Namensauflösung klappt, geben wir an der Windows Befehlszeile noch folgendes ein:
Das sollte folgende Ausgabe produzieren:
Damit ist das kleine Netz aufgebaut und funktionsbereit.
4. lighttpd und PHP konfigurieren:
Installiert sind die beiden Pakete schon. Der Server ist auch schon "up and running". Wenn man noch immer mit dem AP verbunden ist, kann man dies testen. Dazu einfach die Adresse http://my.pi in euren Lieblingsbrowser eingeben. Es wird dann die Startseite von lighttpd angezeigt. Diese bzw. das DocumentRoot befindet sich unter /var/www/html.
Es muss jetzt nur noch PHP für den lighty eingerichtet werden. Dazu in der Datei /etc/lighttpd/lighttpd.conf am Anfang im Abschnitt "server.modules =" folgenden Eintrag hinzufügen:
Und am Ende der Datei die Konfiguration für fastcgi hinzufügen:
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/tmp/php.sock"
)))
Nach einem Neustart von lighttpd ist PHP verfügbar:
Zum Testen erstellen wir uns eine index.php im DocumentRoot mit folgendem Inhalt:
Wenn wir jetzt die Browseransicht (http://my.pi) aktualisieren, werden die PHP Infos angezeigt, da die index.php Vorrang vor der index.lighttpd.html hat.
5. Fazit:
Das war es. Mit diesen überschaubaren Schritten ist ein Access Point ohne Internetverbindung eingerichtet. Bei der Netzwerkkonfiguration habe ich hier noch die /etc/network/interfaces und nicht systemd verwendet. Dadurch sollte die Einrichtung eines AP auch unter wheezy funktionieren.
Und wenn man über den Pi doch eine Verbindung ins Internet haben möchte? Dann einfach folgende Einträge ans Ende der /etc/network/interfaces stellen:
# NAT und Masquerading aktivieren
up /sbin/iptables -A FORWARD -o eth0 -i wlan0 -m conntrack --ctstate NEW -j ACCEPT
up /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
up /sbin/iptables -t nat -F POSTROUTING
up /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# IP-Forwarding aktivieren
up sysctl -w net.ipv4.ip_forward=1
# hostapd und dnsmasq neu starten
up service hostapd restart
up service dnsmasq restart
Alles anzeigen
Viel Erfolg...
[TOM]