image

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.