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

Mit Raspbian Stretch geprüft.

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

Typischerweise sind WLAN-Router für den Internet-Zugang gleichzeitig auch WLAN-Access-Points. In solchen Fällen verfügt der Access-Point über einen DHCP- und DNS-Server. Man konfiguriert also ein eigenes IP-Netzwerk. Wenn man aber schon einen DHCP- und DNS-Server im lokalen Netzwerk hat, macht der Betrieb eines zusätzlichen WLAN-Routers nicht so viel Sinn. Vor allem, weil sich durch das Kaskadieren von Routern unnötigerweise Schwierigkeiten ergeben. Meistens äußert sich das mit Verbindungsproblemen.

In der Regel reicht es aus, den Raspberry Pi als Netzwerk-Brücke zu betreiben, der die Datenpakete und Verbindungen zwischen WLAN und LAN vermittelt.
Eine Netzwerk-Brücke, im Englischen Bridge, verbindet zwei Netzwerk-Segmente. Die verbundenen Rechner liegen alle im selben logischen IP-Netzwerk und erhalten ihre IP-Konfiguration aus dem selben Adressbereich.

Der Betrieb des Raspberry Pi als Netzwerk-Brücke setzt natürlich voraus, dass sich in dem lokalen Netzwerk bereits ein DHCP-Server, ein DNS-Server und ein Standard-Gateway befinden.

Aufgabe

  1. Prüfen, ob der WLAN-Adapter einen Access-Point-Modus hat.
  2. Den WLAN-Adapter als WLAN-Zugangspunkt einrichten.
  3. Den Ethernet-Port als Übergang ins leitungsgebundene Netz einrichten.

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.

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". Der DHCP Client Daemon ist davon nicht betroffen.

Es ist jedoch wichtig festzustellen, ob der "dhcpcd" überhaupt aktiv ist.

systemctl status dhcpcd

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

ip l

Beide Netzwerk-Schnittstellen (eth0 und wlan0) müssen vorhanden sein. Die IP-Konfiguration ist dabei unerheblich.

System aktualisieren und Software installieren

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

Dann brauchen wir zwei Dinge: Einmal einen Access-Point-Daemon und eine Software für die Netzwerk-Brücke. Der Host Access Point Daemon (HostAPD), kurz "hostapd", ist ein WLAN-Authenticator. Er kümmert sich darum, WLAN-Funktionen verschlüsselt anzubieten und die dazu notwendige Authentifizierung der WLAN-Clients vorzunehmen. Beispielsweise per WPA2-PSK.
"bridge-utils" enthält Bibliotheken und Kommandos, um Netzwerk-Brücken einzurichten.

sudo apt-get install hostapd bridge-utils

Nach der Installation geht es an die Konfiguration von vom WLAN-AP-Host und der Netzwerk-Brücke.

WLAN-AP-Host konfigurieren (hostapd)

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.

# Bridge-Betrieb
bridge=br0

# Schnittstelle und Treiber
interface=wlan0
#driver=nl80211

# WLAN-Konfiguration
ssid=WLANbridge
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 eine ist 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.
Wenn man schon einen WLAN-Access-Point hat, dann ist es nicht verkehrt dessen WLAN-Name und WLAN-Passwort zu verwenden. Die Clients wählen dann automatisch das WLAN, für das es einen besseren Empfang gibt. Zum Testen, ob die eingerichtete WLAN-Bridge tatsächlich funktioniert, sollte man temporär einen anderen WLAN-Namen ("ssid") wählen.

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 ändern und speichern.

Netzwerk-Brücke konfigurieren und in Betrieb nehmen

Jetzt müssen wir noch die Brücke und die Netzwerk-Interfaces konfigurieren.

sudo nano /etc/network/interfaces

Dazu nehmen wir folgende Minimal-Konfiguration in der Konfigurationsdatei für die Netzwerk-Einstellungen vor.

# Localhost
auto lo
iface lo inet loopback

# Ethernet
auto eth0
allow-hotplug eth0
iface eth0 inet manual

# WLAN
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wireless-power off

# Netzwerkbrücke
auto br0
iface br0 inet dhcp
bridge_ports eth0 wlan0 # build bridge
bridge_fd 0             # no forwarding delay
bridge_stp off          # disable Spanning Tree Protocol

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

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

Hinweis: Wenn Sie die Absicht haben, dem Raspberry Pi eine statische IPv4-Adresse zu geben, dann konfigurieren Sie das br0-Interface, und nicht "eth0" oder "wlan0", sonst können Sie sich nicht mehr per SSH mit dem Raspberry Pi verbinden.

Bei einer statische IP-Konfiguration empfiehlt es sich zusätzlich noch, den DHCPCD zu deaktivieren.

sudo service dhcpcd stop
sudo systemctl disable dhcpcd

Mehr Informationen:

Damit alle Änderungen übernommen werden, empfiehlt sich jetzt ein Neustart.

sudo reboot

Nach dem Neustart sollte man prüfen, ob die Netzwerkbrück in Betrieb gegangen ist.

brctl show

Hinweis: Nicht davon irritieren lassen, dass nur das Interface "eth0, aber "wlan0" noch nicht hinzugefügt wurde. Das Interface "wlan0" wird erst dann der Netzwerkbrücke hinzugefügt, wenn das Interface mit "hostapd" in Betrieb geht.

WLAN-AP-Host in Betrieb nehmen (hostpad)

Zuerst starten wir den "hostapd" mit der Option "-dd" im Debug-Modus. Dabei werden uns "alle" Fehlermeldungen angezeigt.

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

Im Debug-Modus (Parameter -dd) wird "hostapd" in jedem Fall Meldungen produzieren, wobei es sich dabei nicht um Fehlermeldungen handeln muss. Der Debug-Modus ist in diesem Fall sehr auskunftsfreudig. 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. Mit "Strg + C" kann es beendet werden.

Wenn der "hostapd" abbricht, 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 Aufruf des Kommandos.
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 "Raspbian". Andere abgespeckte Distributionen können Probleme machen.

Man kann "hostapd" auch normal aufrufen.

sudo hostapd /etc/hostapd/hostapd.conf

Ein gutes Zeichen ist es, wenn die Meldung "wlan0: AP-ENABLED" erscheint. Dann kann man die WLAN-Bridge 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 (CONNECTED) und auch wieder abmeldet (DISCONNECTED), wenn er die Verbindung beendet.

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

Mit der Installation von "hostapd" wird er automatisch beim Booten im Hintergrund gestartet. Allerdings 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.

Nach einem Neustart wird "hostapd" automatisch mit der angelegten Konfiguration gestartet. Die WLAN-Bridge sollte dann als WLAN-Access-Point zur Verfügung stehen.

sudo reboot

Troubleshooting: "hostapd" prüfen

Den Status von "hostapd" kann man wie folgt prüfen:

sudo systemctl status hostapd

Der "hostapd" ist in Betrieb gegangen, wenn folgende Meldung erscheint: ''Starting advanced IEEE 802.11 management: hostapd.''
Wenn nicht, dann kommt folgende Fehlermeldung: ''Starting advanced IEEE 802.11 management: hostapd failed!''

Dann bitte prüfen, ob der WLAN-Adapter den AP-Mode beherrscht:

iw list | grep AP$

Wenn nicht, dann erscheint hier auch keine Ausgabe. Man sollte also einen anderen WLAN-Adapter verwenden.

Ein anderes Problem kann durch den DHCPCD kommen, weil der sich das Interface unter den Nagel reißt und somit die Inbetriebnahme der Brück verhindern kann.

Dazu öffnen wir die Konfigurations-Datei des DHCPCD und tragen dort noch eine Zeile ein.

sudo nano /etc/dhcpcd.conf

Netzwerk-Interface von der Konfiguration durch den DHCPCD ausschließen:

denyinterfaces eth0

Diese Zeile klammert das betreffende Interface aus der Netzwerk-Konfiguration aus.

Troubleshooting: Netzwerkbrücke prüfen

Der Betrieb dieser WLAN-Brücke kann in der Praxis an der einen oder anderen Sache scheitern. In der Regel kommt man den Gründen nur schwer auf die Spur.
Grundsätzlich gilt, das WLAN-Interface wird nur dann zur Brücke hinzugefügt, wenn der "hostapd" erfolgreich in Betrieb geht.

Wenn ja, dann kann man sich ansehen, ob die Brück ebenfalls in Betrieb gegangen ist.

brctl show

Hier muss in der Spalte "interfaces" sowohl "eth0" als auch "wlan0" verzeichnet sein.
Hinweis: Es kann sein, dass die Brücke ein paar Sekunden braucht, bis alle Interfaces hinzugefügt wurden. Deshalb nicht gleich in Panik verfallen, wenn noch nicht beide Interfaces angezeigt werden.

Wenn man an der Stelle sich unsicher ist, dann sollte man einen Blick in die Systemmeldungen werfen.

dmesg
dmesg | grep br0

Dort sollten folgende Zeilen zu finden sein:

device wlan0 entered promiscuous mode
br0: port 2(wlan0) entered forwarding state

Wenn nicht, dann sollte man nach Fehlermeldungen schauen, die im Zusammenhang mit "wlan0" und "br0" stehen.

Man sollte dazu wissen, dass es USB-Sticks gibt (unabhängig vom Chipsatz), die stellen sich bei der Initialisierung während des Boot-Vorgangs ziemlich zickig an. Beispielsweise Fritz-WLAN-Sticks von AVM. Die initialisieren zuerst ein Laufwerk (für die Treiber-Installation). Erst danach geht der Stick in den WLAN-Betrieb über. Entsprechende Hinweise findet man mit "dmesg".
Das hat natürlich Konsequenzen für den automatischen Start von "hostapd". Der kann erst in Betrieb gehen, wenn das WLAN-Interface vorhanden ist.
Es kann also gut sein, dass man ein bis zwei Minuten nach dem Boot-Vorgang auf das WLAN-Interface warten muss.

ip a

Wenn es dann vorhanden ist, sollte man versuchen den "hostapd" manuell zu starten.

sudo systemctl start hostapd
sudo systemctl status hostapd

Wenn der Dienst gestartet wurde, dann geht es mal grundsätzlich.

iw wlan0 info

Wenn man später wissen will, welche MAC-Adressen (WLAN-Clients) mit der Brücke verbunden sind:

brctl showmacs br0

Wenn man die Konfiguration geändert hat

Wenn man die hostapd-Konfiguration während dem laufenden Betrieb ändert, dann sollte man danach einen Restart des "hostapd" vornehmen.

sudo systemctl restart hostapd

Alternativ kann man ihn auch stoppen und wieder starten.

sudo systemctl stop hostapd
sudo systemctl start hostapd

Wenn der automatische Start im Hintergrund beim Booten nicht gewünscht ist, kann man das auch wahlweise abstellen mit:

sudo systemctl disable hostapd

Den automatischen Start im Hintergrund beim Booten kann man wahlweise einschalten mit:

sudo systemctl enable hostapd

Hinweise zum Raspberry Pi als WLAN-Bridge

Egal welche Lösung, als WLAN-Access-Point ist der Raspberry Pi von seiner Schnittstellenleistung her nicht so gut 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 dieser Netzwerk-Brücke eine Sicherheitslücke ins lokale Netzwerk.

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

Erweiterung: Die WLAN-Bridge als Man-in-the-Middle fürs Netzwerk-Monitoring verwenden

Mit dieser WLAN-Bridge lässt sich hervorragend Netzwerk-Verkehr aufzeichnen. Beispielsweise fürs Netzwerk-Monitoring oder auch für Man-in-the-Middle-Angriffe.
Ein Man-in-the-Middle ist eine Netzwerk-Einrichtung, die in der Lage ist Netzwerkverkehr abzuhören, aufzuzeichnen und zu manipulieren. Damit das gelingt, muss sich das entsprechende Gerät in einer Netzwerk-Verbindung zwischen zwei Endpunkten befinden. Genau das ist mit der WLAN-Bridge der Fall.

Weitere verwandte Themen:

Teilen:

Produktempfehlungen