WLAN-Repeater mit Linux selber bauen
Mit einem eigenen WLAN-Repeater kann man verschiedene praktische Dinge machen:
- die Reichweite des WLANs erhöhen
- den eigenen Netzwerkverkehr bequem analysieren
- verlässlichere Traffic-Statistiken erstellen als die jeweiligen Clients es könnten
und natürlich noch viel mehr. Der Vorteil ist, dass man einen zentralen Knoten hat, über den der ganze Netzwerkverkehr läuft. Das geht natürlich mit jedem beliebigen kaufbaren Plastik-Router auch, die technischen Möglichkeiten sind auf einem voll ausgestatteten Linux-Rechner jedoch meist etwas größer.
Voraussetzungen
- ein Rechner mit Linux. Das kann natürlich irgendeiner sein, sehr gut eignet sich dafür auch ein Raspberry Pi
- zwei WLAN-Karten oder -Sticks, kompatibel mit Linux. Einer der
beiden Sticks muss außerdem kompatibel mit
hostapd
sein, was leider nicht für alle Modelle zutrifft. Ich habe mit dem
Hama MiMo WLAN USB 2.0
Adapter
gute Erfahrungen gemacht, der funktioniert direkt beim Anstecken.
Das wird der „Sender”.
Der zweite Stick, der „Empfänger” muss unter Linux lediglich funktionieren, es genügt also auch eine integrierte WLAN-Karte in einem Laptop oder so. Für den Raspberry Pi verwende ich einfach beliebten Edimax WLAN-Stecker. - Debian Linux. Es geht natürlich mit fast jeder anderen Distribution auch, diese Anleitung beschäftigt sich im speziellen mit Debian. Für den Raspberry Pi verwende ich hier Raspbian (GUI etc sind nicht notwendig. Die Anleitung spielt rein auf der Kommandozeile ab.
- optional: wer einen RaspberryPi verwendet, stößt mit zwei WLAN-Sticks und eventuell noch mehr Peripherie an die Grenzen der Stromversorgung – ein USB-Hub mit eigener Stromversorgung ist notwendig. Viele verwenden diesen hier von D-Link.
Vorgehen
Die Anleitung besteht aus vier Teilen: Etwas Vorarbeit, dann stellen wir die Verbindung zum bereits vorhandenen WLAN über den Empfänger her, als nächstes errichten wir über den Sender unser eigenes WLAN und Netzwerk, und zu guter Letzt verbinden wir die beiden Netzwerke miteinander, damit der Internetzugang möglich wird.
technische Vorarbeit
Unter Linux ist nicht in jedem Fall garantiert, dass die
Netzwerk-Interfaces von USB-Sticks immer die gleiche Benennung bekommen.
Aus wlan0
kann dann schon mal wlan1
werden und anders herum, schon
funktioniert die Konfiguration nicht mehr. In jedem Fall bleibt es aber
unübersichtlich, deswegen werden wir in einem ersten Schritt mit
ifrename
die WLAN-Interfaces eindeutig benennen. Dabei wird davon
ausgegangen, dass der Rechner bisher schon eine Netzwerkverbindung hat.
apt-get install ifrename
Mit ifrename
können wir eine Konfigurationsdatei erstellen, die anhand
der MAC-Adresse der jeweiligen Netzwerkkarten oder -Sticks eindeutige
Kennungen zuweist. Zuerst sollte der „Empfänger”-Stick eingesteckt
werden, wer eine interne Karte verwendet, muss also nichts einstecken.
Wir finden die MAC-Adresse wie folgt heraus:
LANG=C /sbin/ifconfig wlan0|grep HWaddr
Die Ausgabe sollte so ähnlich aussehen, der hintere Teil interessiert uns:
wlan0 Link encap:Ethernet HWaddr 00:11:22:33:44:55
Damit erstellen wir jetzt die Konfigurationsdatei /etc/iftab
mit
folgendem Inhalt, der natürlich an das Ergebnis des Befehls von oben
angepasst werden muss:
wan mac 00:11:22:33:44:55
Dadurch wird die „Empfänger”-Karte also anhand ihrer MAC-Adresse
identifiziert und nach dem nächsten Reboot als Netzwerk-Interface wan
verfügbar sein. Jetzt können wir den „Sender” anstecken und für ihn das
gleiche Spiel wiederholen:
LANG=C /sbin/ifconfig wlan1|grep HWaddr
Mit den Ergebnis passen wir wieder die /etc/iftab
an, die Zahl muss
hier natürlich wieder an das Ergebnis des Befehls angepasst werden:
wan mac 00:11:22:33:44:55
lan mac 11:22:33:44:55:66e
Ab dem nächsten Reboot wird der „Sender” also nun lan
heißen.
Verbindung zum bestehenden WLAN herstellen
Es ist für den Betrieb ohne grafische Oberfläche immens wichtig, dass die Konfiguration der Internetverbindung möglichst gleich bleibt. Wir stellen die WLAN-Konfiguration hier also auf eine statische Konfiguration ein und deaktivieren damit die Funktionalität von Programmen wie dem „Network Manager” oder den grafischen Konfigurationsprogrammen einer Standard-Installation auf dem Raspberry Pi.
Achtung: Auch wer bereits statische Netzwerkverbindungen konfiguriert hat, muss diese (wie in der folgenden Anleitung) anpassen, da wir im vorhergehenden Schritt die Namen der Netzwerk-Interfaces geändert haben!
Dazu benötigen wir das Paket wpasupplicant
und erstellen dafür eine
statische Konfigurationsdatei.
apt-get install wpasupplicant
Die Netzwerkeinstellungen nehmen wir in der Datei
/etc/network/interfaces
vor, man kann sie einfach unten anhängen:
allow-hotplug wan
iface wan inet dhcp
wpa-driver wext
wpa-ssid "Kennung des bestehenden WLANs"
wpa-psk "Kennwort des bestehenden WLANs"
Sollten noch Einträge für wlan0
o.Ä. vorhanden sein, können diese
durch Voranstellen eines #
deaktiviert werden.
Um die Netzwerkkonfiguration und vor allem die Umbenennung der Interfaces wirksam zu machen, starten wir den Rechner kurz neu:
reboot
Errichten des zusätzlichen WLANs
Nun sollte der Rechner über das bestehende WLAN Netzwerk- und Internetzugriff haben. Als nächster Schritt folgt jetzt das Errichten des zusätzlichen WLANs, samt Einrichtung eines eigenen, abgetrennten, Netzwerks dafür. Dazu brauchen wir einige Pakete:
apt-get install dnsmasq iptables hostapd
Netzwerk
Zunächst definieren wir die feste IP-Adresse des Rechners im
zusätzlichen WLAN, wieder in der Datei /etc/network/interfaces
:
iface lan inet static
address 192.168.234.1
netmask 255.255.255.0
WLAN
Automatisch aktivieren müssen wir dieses Netzwerk-Interface nicht, das
macht hostapd
für uns automatisch, wenn er das WLAN etabliert. Dessen
Konfiguration ist etwas aufwendiger. Wir erstellen die Datei
/etc/hostapd/hostapd.conf
mit folgendem Inhalt und passen die Angaben
ssid
, wpa_passphrase
und ggf. channel
an.
interface=lan driver=nl80211
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=NameDesNetzwerks
channel=11
hw_mode=g
ieee80211n=1
wpa=2
wpa_passphrase=KennwortDesNetzwerks
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
beacon_int=100
auth_algs=3
wmm_enabled=1
Um das Programm beim Systemstart zu aktivieren, muss noch die Datei
/etc/default/hostapd
geändert werden - vor der Zeile
DAEMON_CONF="/etc/hostapd/hostapd.conf"
einfach das #
entfernen.
DHCP-Server
Damit im zusätzlichen WLANs auch IP-Adressen verteilt und DNS-Anfragen
beantwortet werden, müssen wir noch dnsmasq
konfigurieren. Wir
ersetzen den Beispiel-Inhalt der Datei /etc/dnsmasq.conf
mit unserem
eigenen Inhalt:
interface=lan
bind-interfaces
dhcp-range=192.168.234.100,192.168.234.150,12h
dhcp-option=3,192.168.234.1
Mit diesen Einstellungen beschränken wir den DHCP- und DNS-Server auf
das zusätzliche Netwerk und geben vor, dass für Clients in diesem
Netzwerk die IP-Adressen 192.168.234.100
bis 192.168.234.150
vergeben werden dürfen. Nach 12 Stunden können bereits genutzte Adressen
auch wieder neu vergeben werden.
Um sicherzustellen, dass stets IP-Adressen vergeben und DNS-Anfragen
beantwortet werden, auch wenn sich etwas am LAN-Interface ändert,
erstellen wir noch ein kleines Script, was bei Verfügbarkeit des
LAN-Interface den DHCP-Server (neu) startet. Dazu legen wir die Datei
/etc/network/if-up.d/dnsmasq
an:
#!/bin/bash
if [ "$IFACE" = "lan" ]; then
/etc/init.d/dnsmasq restart
fi
Dann machen wir sie noch ausführbar:
chown root:root /etc/network/if-up.d/dnsmasq
chmod 755 /etc/network/if-up.d/dnsmasq
Jetzt können wir das zusätzliche WLAN errichten lassen:
/etc/init.d/hostapd start
Router
Nun könnte man sich theoretisch schon zum WLAN verbinden, man hätte
allerdings noch keinen Internetzugriff, da die Netzwerkverbindungen
lediglich innerhalb des neuen Netzwerks mit den IP-Adressen
192.168.234.*
stattfänden. Damit das auch nach außen kommt, müssen wir
noch die Routing-Funktionen aktivieren. Dazu bearbeiten wir die Datei
/etc/sysctl.conf
und suchen nach dem Eintrag
#net.ipv4.ip_forward= 1
, um in dieser Zeile das #
am Anfang zu
entfernen. Sollte der Eintrag nicht dabei sein, kann man ihn am Ende der
Datei auch einfach selbst erstellen (natürlich ohne das #
). Damit wir
nicht schon wieder neustarten müssen, aktivieren wir diese Einstellung
direkt:
echo 1 > /proc/sys/net/ipv4/ip_forward
Danach erstellen wir ein weiteres Script
/etc/network/if-up.d/router.sh
:
#!/bin/bash
iptables --table nat --append POSTROUTING --out-interface wan -j MASQUERADE
iptables --append FORWARD --in-interface lan -j ACCEPT
Wir machen es noch ausführbar und rufen es direkt einmal auf:
chown root:root /etc/network/if-up.d/router.sh
chmod +x /etc/network/if-up.d/router.sh
/etc/network/if-up.d/router.sh
Fertig
Nun sollte, spätestens nach einem Reboot, das oben konfigurierte zusätzliche WLAN verfügbar sein. Wer sich zu diesem Netzwerk verbindet, sollte dann auch eine Verbindung in’s Internet erhalten.