Raspberry Pi als WLAN-Router einrichten (WLAN-Access-Point)

Mit Raspbian Jessie geprüft.

Raspberry Pi als WLAN-Router einrichten (WLAN-Access-Point)

Ein WLAN-Router stellt mehreren WLAN-Clients über seinen integrierten Access-Point ein WLAN mit einer eigenen IP-Konfiguration zur Verfügung. Dazu verfügt der WLAN-Router über einen DHCP- und DNS-Server.

Eine Alternative für diesen WLAN-Access-Point ist eine WLAN-Bridge. Hier dient der Raspberry Pi nur als Netzwerk-Brücke für zwei Netzwerk-Segmente. Auf der einen Seite das WLAN und auf der anderen Seite das kabelgebundene Netzwerk.

Aufgabe

  1. Ermitteln Sie, welche Bestandteile und Voraussetzungen für den Betrieb eines WLAN-Routers notwendig sind.
  2. Ermitteln Sie die notwendige IP-Konfiguration.
  3. Richten Sie den WLAN-Access-Point ein.
  4. Richten Sie einen DHCP-Server ein.
  5. Richten Sie die Router-Funktionen ein.

Hinweis: Bezeichnung der Netzwerk-Schnittstellen

Seit Raspbian Stretch haben die Netzwerk-Schnittstellen für Ethernet und WLAN andere Bezeichnungen. Also nicht mehr "eth0" und "wlan0", sondern "enx..." und "wlx...". Das betrifft per USB angeschlossenen Netzwerk-Adapter, deren Bezeichnung von den hier genannten Bezeichnungen abweichen. Das bedeutet, dass man zuerst die individuelle Bezeichnung ermitteln oder die Namensgebung auf das alte Verfahren umstellen muss.

Voraussetzungen prüfen

Um Probleme beim Einrichten zu vermeiden empfiehlt es sich eine frische Raspbian-Image zu verwenden. Ein Raspbian Jessie Lite ist ausreichend. Außerdem sollte man sicherstellen, dass der verwendete WLAN-Adapter mit dem Raspberry Pi grundsätzlich funktioniert und den Access-Point-Modus beherrscht. Mit dem internen WLAN-Adapter im Raspberry Pi 3 funktioniert es.

Stellen wir also zuerst einmal fest, ob der vorgesehene WLAN-Adapter den AP-Modus beherrscht. Um das zu prüfen müssen die Wireless-Tools installiert sein.

sudo apt-get install iw
iw list | grep AP

Wenn dieses Kommando eine oder mehrere Zeilen mit "AP" auswirft, dann ist alles im grünen Bereich und der WLAN-Adapter beherrscht den Access-Point-Modus. Dann ist der WLAN-Adapter für unsere Aufgabe geeignet. Wenn nicht, dann sollte man sich einen anderen WLAN-Adapter besorgen.

Netzwerk-Konfiguration

In Raspbian Jessie ist standardmäßig ein DHCP Client Daemon (DHCPCD) aktiviert. Die Netzwerk-Konfiguration wird in der Datei "/etc/dhcpcd.conf" vorgenommen. Für einen Teil der Konfiguration der Netzwerk-Brücke verwenden wir hier die Datei "/etc/network/interfaces".

sudo nano /etc/network/interfaces

Hier tragen wir folgende Zeilen ein:

# Localhost
auto lo
iface lo inet loopback

# Ethernet
auto eth0
iface eth0 inet manual

# WLAN-Interface
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.1.1
netmask 255.255.255.0

In dieser IPv4-Konfiguration hat das WLAN-Interface eine statische IPv4-Adresse. Das brauchen wir für den Betrieb des DHCP- und DNS-Servers.

Es wäre auch denkbar, der Ethernet-Schnittstelle eine statische IP-Konfiguration zu verpassen. Das muss aber nicht sein. In dieser Form hat der WLAN-Router den Vorteil, dass er in jedem lokalen Netzwerk funktioniert, wenn die IPv4-Konfiguration per DHCP an die Ethernet-Schnittstelle geliefert wird. Wenn IPv6 aktiviert ist, dann funktioniert es ebenso.

Speichern und schließen mit Strg + O, Return, Strg + X.

Jetzt ist zu prüfen, ob der "dhcpcd" aktiv ist.

sudo systemctl status dhcpcd

Wenn ja, ergänzen wir dessen Konfiguration um folgende Zeile.

sudo nano /etc/dhcpcd.conf
denyinterfaces wlan0

Nachdem man die Änderungen vorgenommen hat kann man die Datei speichern und schließen: Strg + O, Return, Strg + X.

Die Änderungen wurden aber noch nicht in die aktuelle Netzwerk-Konfiguration übernommen. Grundsätzlich empfiehlt sich hier ein Reboot, wenn man per SSH die Konfiguration vorgenommen hat.

sudo reboot

Dann müssen wir sicherstellen, dass sowohl das Ethernet-Interface (eth0) als auch der WLAN-Adapter (wlan0) funktionieren und vorhanden sind.

ip a

Beide Netzwerk-Schnittstellen (eth0 und wlan0) müssen vorhanden sein und eine IPv4-Konfiguration aufweisen.

System aktualisieren

Wenn der Raspberry Pi und der WLAN-Adapter alle Voraussetzungen erfüllen, dann können wir loslegen. Wir beginnen mit der Installation der notwendigen Software. Davor führen wir noch eine Systemaktualisierung durch.

sudo apt-get update
sudo apt-get upgrade

DHCP-Server und DNS-Cache einrichten (dnsmasq)

Als nächstes richten wir den DHCP-Server und DNS-Cache ein. Der DHCP-Server sorgt dafür, dass die WLAN-Clients nach der Anmeldung alle nötigen Informationen für die IP-Konfiguration bekommen. Der DNS-Dienst übernimmt die Namensauflösung. Um beides kümmert sich "dnsmasq".

sudo apt-get install dnsmasq

Danach müssen wir "dnsmasq" konfigurieren. Dazu öffnen wir die Datei "/etc/dnsmasq.conf".

sudo nano /etc/dnsmasq.conf

Dort tragen wir folgende Zeilen als Minimal-Konfiguration ein:

# DHCP-Server aktiv für WLAN-Interface
interface=wlan0
# DHCP-Server nicht aktiv für bestehendes Netzwerk no-dhcp-interface=eth0 # IPv4-Adressbereich und Lease-Time dhcp-range=192.168.1.100,192.168.1.150,24h # DNS dhcp-option=option:dns-server,192.168.1.1

Hier wird der DHCP-Server und das DNS-Forwarding für die Netzwerk-Schnittstelle "wlan0" aktiviert und für die Schnittstelle "eth0" nur DNS, aber kein DHCP serviert. Außerdem wird festgelegt, dass im WLAN die IPv4-Adressen von 192.168.1.100 bis 192.168.1.150 für die Clients vergeben werden und die Adresse des DNS-Servers festgelegt.

DHCP-Server und DNS-Cache prüfen und in Betrieb nehmen (dnsmasq)

Vor der Inbetriebnahme empfiehlt es sich, die Konfiguration zu testen.

dnsmasq --test -C /etc/dnsmasq.conf

Die Syntaxprüfung sollte mit "OK" erfolgreich sein.

DNSMASQ neu starten:

sudo systemctl restart dnsmasq

DNSMASQ-Status anzeigen:

sudo systemctl status dnsmasq

DNSMASQ beim Systemstart starten:

sudo systemctl enable dnsmasq

Wenn man möchte, dann kann man sich mit einem WLAN-Client erneut am WLAN-AP anmelden und prüfen, ob man eine IPv4-Konfiguration bekommen hat.

WLAN-AP-Host einrichten (hostapd)

Dann installieren wir den Host Access Point Daemon, kurz "hostapd". Das ist ein WLAN-Authenticator. Er kümmert sich darum, WLAN-Funktionen verschlüsselt anzubieten und die dazu notwendige Authentifizierung der WLAN-Clients vorzunehmen.

sudo apt-get install hostapd

Nach der Installation geht es ans Einrichten von "hostapd", der den WLAN-Access-Point für den Router betreibt.

Die Konfiguration des WLAN-AP-Hosts:

sudo nano /etc/hostapd/hostapd.conf

Die Datei sollte noch nicht vorhanden und somit leer sein. Wenn die Datei doch vorhanden ist, dann sollte man sie vollständig überschreiben.
In die Datei tragen wir folgende Minimal-Konfiguration ein. Selbstverständlich gibt es noch mehr Parameter, die in diesem Fall keine Rolle spielen.

# WLAN-Router-Betrieb

# Schnittstelle und Treiber
interface=wlan0
#driver=nl80211

# WLAN-Konfiguration
ssid=WLANrouter
channel=1
hw_mode=g
ieee80211n=1
ieee80211d=1
country_code=DE
wmm_enabled=1

# WLAN-Verschlüsselung
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=testtest

Drei Einstellungen sind individuell zu tätigen. Das sind der WLAN-Name ("ssid"), der Kanal ("channel"), der von 1 bis 13 frei konfiguriert werden kann, wobei man hier nichts ändern muss. Eventuell muss man hier den Kanal wechseln, wenn eine WLAN-Analyse ergibt, dass bereits mehrere andere WLANs diesen Kanal belegen. Prinzipiell können mehrere WLANs den selben Kanal belegen. Das ist besser, als wenn sich die Kanäle überschneiden.

Der dritte Parameter ist das WLAN-Passwort ("wpa_passphrase"). Hier sollte man ein Passwort von mindestens 8 Zeichen Länge im Klartext eintragen.

Hinweis zum WLAN-Treiber: Es gibt in dieser Konfigurationsdatei den Parameter "driver", der auskommentiert (#) ist. Normalerweise wird von "hostapd" automatisch der richtige Treiber geladen. Es kann natürlich sein, dass das nicht gelingt. Dann muss man hier den richtigen Treiber explizit angeben.

Anschließend speichern und schließen mit Strg + O, Return, Strg + X.

Weil diese Datei das WLAN-Passwort im Klartext enthält, sollte nur der Benutzer "root" Leserechte auf diese Datei haben.

sudo chmod 600 /etc/hostapd/hostapd.conf

Keine Sorge, mit dem Benutzer "pi" kann man die Datei jederzeit wieder ändern und speichern.

WLAN-AP-Host-Konfiguration prüfen und in Betrieb nehmen (hostpad)

Bevor wir uns an das weitere Einrichten des WLAN-Routers machen, nehmen wir zuerst den WLAN-Host in Betrieb. Nur wenn das funktioniert, lohnen sich die weiteren Schritte. Wenn der WLAN-Host nicht in Betrieb geht, braucht man die Router-Funktionen gar nicht erst einzurichten.

Zur Inbetriebnahme des WLAN-Hosts starten wir "hostapd" im Debug-Modus. Dabei werden uns "alle" Fehlermeldungen angezeigt.

sudo hostapd -dd /etc/hostapd/hostapd.conf

Hinweis: Mit "Strg + C" kann man die laufende hostapd-Instanz bei Bedarf beenden.

"hostapd" wird in jedem Fall Meldungen produzieren. Sofern die Konfiguration richtig ist und der WLAN-Adapter mitspielt, läuft die Konfiguration durch. Das Programm wird aber nicht beendet. Das heißt, "hostapd" kehrt nicht zur Befehlseingabe zurück. Wenn folgende Meldungen erscheinen, dann ist alles im grünen Bereich:

wlan0: interface state COUNTRY_UPDATE->ENABLED
wlan0: AP-ENABLED 

Das ist eine gute Gelegenheit den WLAN-AP zu testen. Dazu versucht man mit einem WLAN-Client das WLAN zu finden und sich dort anzumelden.
Dabei kann man in der Kommandozeile schön beobachten, wie sich der WLAN-Client anmeldet (AP-STA-CONNECTED) und auch wieder abmeldet (AP-STA-DISCONNECTED), wenn er die Verbindung zum WLAN beendet.

Hinweis: Wenn man die Konfiguration per SSH vornimmt, dann sollte man das Prüfen des WLAN-AP mit einem anderen Client vornehmen, weil man sich sonst durch das Wechseln des WLANs die SSH-Verbindung abschießt.

Wenn "hostapd" mit Fehlermeldungen abbricht und zur Kommandoeingabe zurückkehrt, dann stimmt irgendetwas noch nicht. Die Fehler sind allerdings äußerst vielfältig und die dazugehörigen Fehlermeldungen nicht immer eindeutig. Ein beliebter Fehler ist das fehlende "sudo" beim Aufrufen von "hostapd".
Weitere Fehlerquellen kann man ausschließen, wenn man sicherstellt, dass der WLAN-Adapter grundsätzlich funktioniert und den AP-Modus beherrscht.
Eine weitere Fehlerquelle ist die verwendete Distribution. Funktionieren wird es auf alle Fälle mit dem Original-Raspbian.

Damit der "hostapd" als Daemon im Hintergrund startet, muss man dem Daemon noch sagen, wo er seine Konfiguration findet.
Wenn "hostapd" noch läuft, dann beenden wir es mit "Strg + C". Dann öffnen wir eine Konfigurationsdatei:

sudo nano /etc/default/hostapd

Darin ergänzen wir folgende Parameter:

RUN_DAEMON=yes
DAEMON_CONF="/etc/hostapd/hostapd.conf"

Anschließend speichern und schließen mit Strg + O, Return, Strg + X.

Den "hostapd" nimmt man dann mit folgende Kommando in Betrieb.

sudo systemctl start hostapd
sudo systemctl enable hostapd

Den Status des Daemons kann man mit folgendem Kommando prüfen.

sudo systemctl status hostapd

Router- und Firewall-Konfiguration für die Internet-Verbindung

Bis hierhin hat man im Optimalfall eine Verbindung zum WLAN und eine IPv4-Konfiguration erhalten. Was noch nicht funktioniert, ist eine Verbindung ins Internet. Darum kümmern wir uns jetzt.

Hierzu ergänzen wir die Netzwerk-Einstellungen.

sudo nano /etc/network/interfaces

Hier ergänzt man die bereits bestehende Konfiguration um die folgenden Zeilen:

...

# Vorhandene Firewall-Regel löschen
up /sbin/iptables -F
up /sbin/iptables -X
up /sbin/iptables -t nat -F

# Loopback zulassen
up /sbin/iptables -A INPUT -i lo -j ACCEPT
up /sbin/iptables -A OUTPUT -o lo -j ACCEPT

# 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 -A POSTROUTING -o eth0 -j MASQUERADE

# IP-Forwarding aktivieren
up sysctl -w net.ipv4.ip_forward=1
up sysctl -w net.ipv6.conf.all.forwarding=1

# hostapd und dnsmasq neu starten
up service hostapd restart
up service dnsmasq restart

Hier wird NAT, Masquerading und IP-Forwarding aktiviert. Beides sind wichtige Router-Funktionen.
Dann werden die Dienste "hostapd" und "dnsmasq" neu gestartet.

Anschließend muss man die Datei speichern und schließen: Strg + O, Return, Strg + X.

Ein Neustart des Raspberry Pi ist abschließend erforderlich.

sudo reboot

WLAN-, Router- und DHCP/DNS-Funktion prüfen

Wenn der Raspberry Pi neu gestartet ist, sollte man kontrollieren, ob die Dienste "hostapd" und "dnsmasq" laufen, bevor man sich am neu eingerichteten WLAN-Router anmeldet.

sudo systemctl status hostapd
ps ax | grep hostapd
sudo systemctl status dnsmasq ps ax | grep dnsmasq

Wenn die Dienste laufen und die Prozesse für die beiden Dienste angezeigt werden, dann kann man versuchen sich mit einem WLAN-Client am WLAN-Router anzumelden und eine Internet-Verbindung aufzubauen.

Hinweis zum Raspberry Pi als WLAN-Router

Egal welche Lösung, als WLAN-Access-Point ist der Raspberry Pi von seiner Schnittstellenleistung her nicht geeignet. Die Einrichtung ist fehleranfällig, umständlich und unter Umständen nicht sicher. Davon abgesehen ist der Raspberry Pi mit der notwendigen Ausstattung teurer als ein WLAN-Router. Wer ernsthaft und dauerhaft einen WLAN-Access-Point betreiben möchte, der sollte einen Blick auf OpenWRT legen und sich einen günstigen kompatiblen Router dazu besorgen. Preislich, aber auch vom Komfort ist das viel interessanter.

Sicherheitshinweise

Wer eigene Netzwerk-Komponenten einrichtet und in Betrieb nimmt, der übernimmt auch dafür die Verantwortung. Mit dieser Lösung kann man sich unter Umständen ins Knie schießen. Wenn man denkt, dass die hier dargestellte Lösung fertig ist, dann ist das ein Irrtum. Wenn man keine zusätzlichen Sicherheitsvorkehrungen trifft, dann reißt man sich mit diesem WLAN-Router eine Sicherheitslücke ins lokale Netzwerk.

Beachten Sie bitte die Sicherheitshinweise zum Betrieb eines WLAN-Access-Points.

Weitere verwandte Themen:

Teilen:

Produktempfehlungen