Mit einem WLAN-Repeater kann die Reichweite eines WLAN-Netzwerks erhöht werden. Der Raspberry Pi kann durch das integrierte WLAN-Modul oder alternativ mit einem USB-WLAN-Dongle als ein WLAN Repeater konfiguriert und genutzt werden. Wie du einen Raspberry Pi als WLAN Repeater einrichten kannst, erfährst du in diesem Artikel.
WLAN Repeater in der Praxis
Das WLAN-Signal eines Routers kann je nach räumlicher Beschaffenheit, Sendeleistung und Wandstärke nicht immer jeden Standort bedienen. Durch diverse Störeinflüsse, wie andere Funksignale oder metallische Materialien, wird das Funksignal zusätzlich geschwächt. Mit einem WLAN-Repeater kann man jedoch das schwache WLAN Signal verstärken.
Ein WLAN-Repeater empfängt das schwache Funksignal und strahlt dieses mit größerer Leistung wieder ab. Dadurch wird das schwache Signal aufbereitet und die Reichweite des WLAN-Netzwerks erhöht.
Raspberry Pi WLAN Repeater
Vorüberlegung
Der Raspberry Pi kann grundlegend als WLAN-Client fungieren und sich mit einem Netzwerk verbinden – oder sein eigenes WLAN-Netzwerk mit einem Access Point anbieten.
Für die Realsierung eines Raspberry Pi WLAN Repeaters muss der Pi jedoch beides gleichzeitig erledigen. Folglich muss eine Client-Verbindung zum Quell-Netzwerk (typischerweise ein Internet-Router) hergestellt werden und gleichzeitig ein Hotspot aktiv sein, mit dem sich andere WLAN-Clients mit dem Raspberry Pi verbinden. Beide Netzwerke müssen anschließend gebrückt und miteinander verknüpft werden.
Realisierung mit einem Wifi-Chipsatz
Für den Raspberry Pi WLAN Repeater soll in diesem Tutorial lediglich ein WLAN-Chipsatz genutzt werden. Die aktuellen Modelle Raspberry Pi 3 und Raspberry Pi 4 besitzen ein WLAN-Modul on Board, sodass ein USB-WLAN-Dongle nicht notwendig ist.
Die Herausforderung liegt nun aber darin, dass sowohl eine Client-Verbindung zum Internet-Router, sowie ein Access Point gleichzeitig über eine WLAN-Schnittstelle (wlan0) abgebildet werden sollen.
Realsierung mit zwei WLAN-Schnittstellen (alternative Methode)
Gegenüber anderen Herangehensweisen, bei denen zwei WLAN-Schnittstellen zum Einsatz kommen, kann man sich mit dieser Methode einen USB-WLAN-Dongle sparen. Bei alternativen Lösungen wäre es möglich, zwei WLAN-Schnittstellen zu nutzen:
- wlan0 (Raspberry Pi on Board Wifi-Chip) für Client Verbindung zum Internet Router
- wlan1 (USB-WLAN-Dongle) für Acces Point
Zubehör
- Raspberry Pi 4 oder Raspberry Pi 3B+
- MicroSD-Speicherkarte Class 10, mindestens 8 GB
- Netzteil für Raspberry Pi: Micro-USB Netzteil oder USB-C Netzteil, je nachdem welcher Raspberry Pi verwendet wird
Raspberry Pi WLAN Repeater konfigurieren (nur mit wlan0)
Für den Raspberry Pi WLAN Repeater wollen wir lediglich eine WLAN-Schnittstelle verwenden (wlan0). In meinem Fall nutze ich den Raspberry Pi 4 (4GB) mit Raspbian Buster.
Bevor wir wir mit der Einrichtung beginnen, aktualisieren wir unser System.
sudo apt-get update
sudo apt-get upgrade -y
Schritt 1: Hostapd installieren
Für den Access Point des Raspberry Pi WLAN Repeaters benötigt man das Softwarepaket hostapd. Hostapd ist eine Daemon-Software, die es ermöglicht, eine Netzwerkschnittstelle als Access Point zu betreiben.
sudo apt-get install -y hostapd
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
Mit den Befehlen systemctl unmask
und systemctl enable
erlauben wir den Start von hostapd und lassen dessen Service beim Boot automatisch starten.
Schritt 2: Hostapd konfigurieren für virtuelle Schnittstelle ap0 des Access Points
Für den Access Point des WLAN Repeaters legen wir mit Hostapd eine virtuelle Schnittstelle an. Dazu erstellen wir eine Hostapd-Konfigurationsdatei. In dieser Datei musst du ssid, country_code und wpa_passphrase mit deinen gewünschten Einstellungen setzen.
- ssid: dein gewünschter Netzwerkname (SSID), mit dem sich andere Client verbinden
- country_code: Ländercode des WLAN-Netzwerks
- wpa_passphrase: WLAN-Passwort des Access Points
cat > /etc/hostapd/hostapd.conf <<EOF
interface=ap0
driver=nl80211
ssid=DeineNetzwerkSSID
country_code=DE
hw_mode=g
channel=1
auth_algs=1
wpa=2
wpa_passphrase=DeinWlanApPasswort
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
EOF
Alternativ kannst du die Datei auch mit sudo nano /etc/hostapd/hostapd.conf
erstellen und den Dateiinhalt setzen (ohne EOF am Ende).
Anschließend müssen die Rechte der Hostapd-Konfigurationsdatei anpassen.
chmod 600 /etc/hostapd/hostapd.conf
Schritt 3: Hostapd Standard-Daemon setzen
Die erstelle Hostapd-Konfiguration für ap0 setzen wir anschließend als Standard Deamon-Konfiguration für Hostapd.
sed -i 's/^#DAEMON_CONF=.*$/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/' /etc/default/hostapd
Schritt 4: Hostapd Service anpassen
Weiterhin muss im hostapd.service
die Zeile After=network.target
auskommentiert werden. Hierfür bearbeiten wir den Hostapd-Service mit folgendem Befehl.
sudo systemctl --full edit hostapd.service
Die Zeile After=network.target
muss nun mit einer vorangestellten Raute auskommentiert werden, sodass in der Zeile nun #After=network.target
steht. Anschließend kann der Editor mit Strg + X, Y und Enter gespeichert und geschlossen werden.
Schritt 5: Virtuelles Interface ap0 zu hostapd.service hinzufügen
Im nächsten Schritt fügen wir hostapd.service das neu definierte virtuelle Interface ap0 hinzu. Dazu editieren wir hostapd.service.
sudo systemctl edit hostapd.service
In dem leeren Editor fügen wir folgenden Inhalt ein und speichern anschließend die Konfiguration.
[Unit]
Wants=wpa_supplicant@wlan0.service
[Service]
ExecStartPre=/sbin/iw dev wlan0 interface add ap0 type __ap
ExecStopPost=-/sbin/iw dev ap0 del
Schritt 6: wpa_supplicant für Client-Verbindung zum Router einrichten
Bisher haben wir den virtuellen Access Point ap0 eingerichtet, mit dem sich WLAN-Clients am Raspberry Pi WLAN Repeater verbinden können. Nun muss der Raspberry Pi auch noch seine eigene Client-Verbindung zum Internet-Router erhalten.
Dazu erstellen wir eine neue wpa_supplicant Konfiguration für wlan0. Führe dazu den folgenden Befehl mit deinen Einstellungen für country, ssid und psk aus.
cat >/etc/wpa_supplicant/wpa_supplicant-wlan0.conf <<EOF
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="WlanNetzwerkSsidDeinesInternetRouters"
psk="WlanPasswortDeinesRouters"
key_mgmt=WPA-PSK # see ref (4)
}
EOF
Bist du bereits via wlan0 mit deinem Router verbunden und hast die Einstellungen dafür schon getroffen, dann kannst du die bestehende Konfiguration auch einfach kopieren und weiternutzen.
sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
Anschließend muss die neue wpa_supplicant-wlan0.conf
noch die passenden Rechte erhalten. Außerdem deaktivieren die alte Konfiguration und aktivieren die neue, sodass diese beim Bootvorgang automatisch geladen wird.
sudo chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
sudo systemctl disable wpa_supplicant.service
sudo systemctl enable wpa_supplicant@wlan0.service
Der neue Service wpa_supplicant@wlan0.service
muss anschließend noch definiert werden. Weiterhin wird mit diesem Service die IP-Maskierung gesetzt.
sudo systemctl edit wpa_supplicant@wlan0.service
In dem leeren Editor fügen wir folgenden Inhalt ein und speichern diesen.
[Unit]
BindsTo=hostapd.service
After=hostapd.service
[Service]
ExecStartPost=/sbin/iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
ExecStopPost=-/sbin/iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE
Schritt 7: Statische Netzwerkschnittstellen definieren
Im letzten Schritt müssen die Netzwerkschnittstellen für wlan0 und ap0 definiert werden.
Für wlan0 erstellen wir folgende Konfiguration:
cat > /etc/systemd/network/08-wlan0.network <<EOF
[Match]
Name=wlan0
[Network]
IPForward=yes
# DHCP options
DHCP=yes
# static options
#Address=192.168.178.100/24
#Gateway=192.168.178.1
#DNS=84.200.69.80 1.1.1.1
EOF
In meinem Fall soll die Netzwerkschnittstelle wlan0, sprich die Schnittstelle für die Client-Verbindung zum Internet-Router, die IP via DHCP beziehen. Möchtest du eine statische IP-Adresse nutzen, kannst du die DHCP-Option auskommentieren und die statischen Optionen nutzen.
Für ap0 erstellen wir folgende Konfiguration:
cat > /etc/systemd/network/12-ap0.network <<EOF
[Match]
Name=ap0
[Network]
Address=192.168.10.1/24
DHCPServer=yes
[DHCPServer]
DNS=84.200.69.80 1.1.1.1
EOF
Die Netzwerkschnittstelle ap0 arbeitet in diesem Fall mit der statischen IP-Adresse 192.168.10.1 und nutzt für die WLAN-Clients einen DHCP-Server, sodass Clients, die sich mit dem Raspberry Pi WLAN Repeater verbinden automatisch eine IP-Adresse zugeteilt bekommen.
Schritt 8: Raspberry Pi neustarten
Damit alle Einstellungen übernommen werden, muss der Raspberry Pi neugestartet werden.
sudo reboot
Quelle: Stackexchange
Letzte Aktualisierung am 2021-09-01 / Affiliate Links / Bilder von der Amazon Product Advertising API
Hmm, wäre cool wenn es funktionieren würde. ap0 bekommt aber leider nicht die 192.168.10.1 und agiert auch nicht als DHCP Server.
Hi, erstmal vielen Dank für den Artikel…
Ich denke alles übernommen zu haben. Leider bleibt der RasPi jetzt beim boote stehen. Im Display steht: systemd-hostnamed.service
Weiter passiert nichts. Was kann ich jetzt noch tun????
Hallo,
ich habe leider das gleiche. Gibt es hierzu schon eine Lösung?
Hmm, ich stehe nicht so auf die “virtuelle” Version.
Da mein Rasp eh am LAN hängt wäre es doch schicker auf den virtuellen WLAN zu verzichten und stattdessen mit eth0 mit dem Router zu verbinden und wlan0 als access point.
Wie würde dann die Konfiguration aussehen?
Schöner Artikel. Nun wäre es noch schön, wenn eine Firewall und ein Filter dazugefügt werden könnte.
Super Gedanke und recht einfache Einrichtung (wenn es funktionieren würde), leider habe ich ebenfalls das Problem das sich ap0 nur eine self assigned 169.254 IP gibt und weder die konfigurierte übernimmt, noch per DHCP Adressen vergibt.