Access Point / Wlan-Repeater

Da ich zu Hause dringend einen Wlan-Repeater brauchte und ich bereits meinen ersten Pi als Heimserver in Betrieb hatte war für mich die Frage, kaufe ich mir einen guten Wlan-Repeater mit LAN-Anschluss oder für etwas weniger Geld einen Pi mit einem guten Wlan-Stick.

Die Überlegung: Der Wlan-Repeater musste per Kabel an das LAN angeschlossen werden, da im Zielbereich kein Wlan-Empfang mehr möglich war. Also käme z.B. der AVM Fritz!Wlan Repeater 300E in Frage (ca. 70,00 €) Alternativ könnte ich einen Raspberry Pi nehmen inkl. Netzteil und einem guten Wlan-Stick (ich habe den TP-Link TL-WN722N genommen). Gleich vorweg: die Reichweite und Sendeleistung des TL-WN722N ist sehr gut und sogar besser als ein 3Com Office Connect 3CRWE554G72T mit zwei Antennen, den ich hier noch liegen hatte! Und das obwohl der Pi mit dem Wlan-Stick bei rund 2,5 Watt Stromverbrauch liegt. (Der 3Com Router brauchte ca. 7 Watt!)

Also kaufte ich mir einen zweiten Pi mit Gehäuse, Netzteil und den TP-Link TL-WN722N Stick. Grsamtkosten knapp 52,00 € und damit günstiger, als das AVM-Gerät. Gleichzeitig aber mehr Spaß und man hat für zukünftige Funktionen gleich noch einen kleinen Rechner. Der Vorteil des gewählten Wlan-Sticks liegt neben der sehr guten Sende-/Empfangsleistung auch darin, dass die notwendigen Treiber bereits im Raspbian Betriebssystem enthalten sind. Somit gibt es hier keinerlei Probleme im Betrieb!

Die Installation

Die Installation ist im Grunde einfach. Ich gehe jetzt davon aus, dass der Pi bereits mit Raspbian installiert ist (siehe auch Grundinstallation) und auf dem aktuellen Software- und Firmwarestand ist (siehe Raspbian aktualisieren). Im Anschluss müssen wir nun zunächst zwei erforderliche Pakete installieren, die uns zum einen die Access-Point-Funktionen liefern und einige Konfigurationsmöglichkeiten für einen Wlan-Stick geben. Dieses tun wir mit den folgenden Befehl:

sudo apt-get install hostapd iw bridge-utils

Nachdem die Installation durchgeführt wurde, müssen wir als nächstes prüfen, ob die richtige Default-Konfiguration geladen wird. Je nach Paket-Version muss hier die Datei /etc/default/hostapd angepasst werden. Also öffnen wir diese Datei mit dem Editor mit folgendem Befehl:

sudo nano /etc/default/hostapd

In dieser Datei muss die folgende Zeile enthalten sein bzw. entsprechend so zu ändern:

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

Anschließend die Datei mit CTRL-O speichern und mit CTRL-X den Editor verlassen.

Wichtig: Die gleiche Zeile findet man auch in der Datei /etc/init.d/hostapd. Diese sollte man jedoch unverändert lassen, da sie bei einem Update überschrieben werden kann und damit die Änderungen verloren gehen!

Nun müssen wir den hostapd konfigurieren. Dazu gibt es die Datei /etc/hostapd/hostapd.conf. Diese Datei müssen wir nun mit dem folgenden Befehl editieren:

sudo nano /etc/hostapd/hostapd.conf

Ich habe hier als Beispiel meine Datei genommen. Diese ist mit entsprechenden Kommentaren versehen, damit die Einstellungen gut verständlich sind, die vorgenommen werden müssen:

# Nur fuer den Bridge-Betrieb, fuer Access-Point-Funktion die Zeile loeschen
bridge=br0

# Schnittstelle und Treiber (Standard sollte funktionieren!)
interface=wlan0
driver=nl80211

# WLAN-Konfiguration
# Bei Bridge-Betrieb die gleiche SSID wie der Router verwenden!
ssid=Wlan-zu-Hause

# Der Channel sollte mindestens +/- 3 wie der Router sein!
channel=1

# ESSID als sichtbar einstellen
ignore_broadcast_ssid=0

# Ländereinstellungen
country_code=DE
ieee80211d=1

# Übertragungsmodus
hw_mode=g

# Optionale Einstellungen koennen ignoriert werden
# supported_rates=10 20 55 110 60 90 120 180 240 360 480 540

# Draft-N Modus aktivieren / optional, wenn der Stick das kann
# Der TL-WN722N kann das!
ieee80211n=1

# wmm-Funktionalität (fuer draft-n)
# wmm sind WiFi Multimedia Funktionen für Audio und Video
wmm_enabled=1

# Übertragungsmodus / Bandbreite 40MHz / siehe iw list
# ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40]

# Beacons
beacon_int=100
dtim_period=2

# MAC-Authentifizierung, Hier koennte man MAC-Adressen
# erlauben bzw. ausschliessen.
macaddr_acl=0

# max. Anzahl der moeglichen Wlan-Clients
max_num_sta=20

# Ausloggen durch Inaktivität erst nach 1200 Sekunden
ap_max_inactivity=1200

# Größe der Datenpakete/Begrenzung
rts_threshold=2347
fragm_threshold=2346

# hostapd Log Einstellungen
# Hier wird in die /var/log/messages protokolliert logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2

# temporäre Konfigurationsdateien
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0

# Authentifizierungsoptionen
auth_algs=3

# Verschlüsselung / hier wird nur WPA2 aktiviert
wpa=2
rsn_preauth=1
rsn_preauth_interfaces=wlan0
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

# Schlüsselintervalle / Standardkonfiguration
wpa_group_rekey=600
wpa_ptk_rekey=600
wpa_gmk_rekey=86400

# Zugangsschlüssel (PSK) / hier in Klartext (ASCII)
wpa_passphrase=MeinWlanPasswort

Die oben gezeigte Konfiguration ist für den sogenannten Bridge-Modus vorbereitet, also wenn man so wie ich die Reichweite eines Wlan erhöhen will. Soll der Pi jedoch als separater Access Point eingesetzt werden (z.B. mit einem getrenntem Wlan und Sicherheitsregeln, beispielsweise ein Gast-Wlan), so muss die erste Zeile bridge=br0 auskommentiert oder gelöscht werden.

Da ich nicht nur die Reichweite erhöhen, sondern auch ein Roaming haben wollte (wenn ich mit meinem Tablet-PC durch das Haus laufe, will ich immer Wlan haben) habe ich die gleiche SSID eingetragen, die auch mein Router (eine AVM Fritz!Box) hat und habe einen Channel gewählt, der 3 Kanäle über dem liegt, den meine Fritz!Box verwendet. Das Wlan-Passwort ist ebenfalls identisch wie beim Router. Dadurch erkennen eigentlich alle Wlan-Geräte, wenn der Empfang zu einem anderen Gerät stärker ist und melden sich dort an, ohne dass ich Wlan unterbrechen oder gar manuell stoppen und wieder starten müsste!

Konfiguration der „interfaces“ für Bridge-Betrieb

Nachdem wir nun den hostapd konfiguriert haben, müssen wir noch die Netzwerkschnittstellen konfigurieren. Dazu editieren wir die Datei mit dem Kommando sudo nano /etc/network/interfaces. Die Datei muss dann wie folgt aussehen:

auto lo

iface lo inet loopback

# LAN-Schnittstelle des Pi
iface eth0 inet static
        address 192.168.1.6
        netmask 255.255.255.0
        gateway 192.168.1.9
        dns-nameservers 192.168.1.9

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

# Bridge-Schnittstelle
auto br0
iface br0 inet static
        address 192.168.1.7
        netmask 255.255.255.0
        gateway 192.168.1.9
        dns-nameservers 192.168.1.9
        bridge_ports eth0 wlan0
        bridge_fd 0
        bridge_stp no

Als erstes erhält hier der LAN-Port des Pi die IP-Adresse 192.168.1.6. Der Router wird als Gateway zum Internet mit der 192.168.1.9 angegeben. Da dieser Router hier auch gleichzeitig DNS-Server ist, wird dieser Eintrag ebenfalls hinzugefügt.

Im zweiten Schritt müssen wir das virtuelle Interface für die Bridge (br0) definieren. Dieses braucht ebenfalls eine IP-Adresse für die Verwaltung im gleichen Netzwerk und sollte natürlich das gleiche Gateway und DNS-Server besitzen, wie die LAN-Schnittstelle. Dann geben wir an, dass die beiden Ports eth0 und wlan0 Mitglieder der Bridge sind. Dadurch werden also Datenpakete zwischen dem Kabelgebundenen LAN und dem Wlan-Stick übermittelt.

Der Parameter bridge_fd 0 gibt an, dass die Interfaces ohne Verzögerung sofort die Datenpakete übermitteln sollen. bridge_stp no gibt an, dass eine Zusammenarbeit über das „Spanning Tree Protocol“ mit anderen im Netzwerk verfügbaren Bridges nicht aktiviert ist.

Da der Sinn einer Bridge in der Erweiterung des Wlan-Funkbereichs liegt, verzeichten wir hier auf die Einrichtung eines DHCP-Servers. Durch die Bridge-Funktion bekommt jeder Wlan-Client eine IP-Adresse vom DHCP-Dienst des Routers.

Konfiguration für einen Access-Point

Um den Pi als Access-Point zu konfigurieren, sind ein paar Schritte mehr erforderlich. Zum Unterschied: Ein Access-Point bietet nicht einfach die Erweiterung des bestehenden Wlan, sondern erstellt ein neues Wlan mit einem neuen Sicherheitsbereich und neuen Einstellungen!

Dazu müssen zunächst zwei weitere Softwarepakete installiert werden. Wir brauchen erstens einen DNS-Weiterleitungsdienst und zweitens eine IP-Firewall, die für uns die Datenpakete zwischen dem neuen Wlan und dem bestehenden Lan transportiert bzw. wenn gewünscht auch blockieren kann. Dazu geben wir folgenden Befehl ein:

sudo apt-get install dnsmasq iptables

Nach der erfolgten Installation der Pakete müssen wir nun zunächst die Netzwerkschnittstellen konfigurieren. Dazu editieren wir die Datei mit dem Kommando sudo nano /etc/network/interfaces. Die Datei muss dann wie folgt aussehen:

auto lo
iface lo inet loopback

iface default inet dhcp

# LAN-Schnittstelle des Pi
iface eth0 inet static
        address 192.168.1.6
        netmask 255.255.255.0
        gateway 192.168.1.9
        dns-nameservers 192.168.1.9

 # WLAN Interface / Access-Point Einstellungen allow-hotplug wlan0
auto wlan0
iface wlan0 inet static
        address 192.168.100.1
        netmask 255.255.255.0
        boradcast 192.168.100.255

# Loeschen aller bestehenden Firewall-Regeln up /sbin/iptables -F
up /sbin/iptables -X
up /sbin/iptables -t nat -F

# Maskieren der LAN-Schnittstelle, Netzwerkweiterleitung & NAT aktivieren
up iptables -A FORWARD -o eth0 -i wlan0 -s 192.168.100.0/24 -m conntrack --ctstate NEW -j ACCEPT
up iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
up sysctl -w net.ipv4.ip_forward=1 

# hostapd und dnsmasq nach der Firewall neu starten
up /etc/init.d/hostapd restart
up /etc/init.d/dnsmasq restart

Zum Schluß muss noch die Datei /ect/dnsmasq.conf angepasst werden. Für unsere Konfiguration brauchen wir nur folgende paar Zeilen, die wir am Ende der Datei einfügen können:

# DHCP-Server nur über Wlan aktivieren
interface=wlan0
# DHCP-Server nicht für die LAN-Schnittselle
no-dhcp-interface=eth0
# DHCP-IP-Adressbereich und Lease-Time festlegen
dhcp-range=interface:wlan0,192.168.100.10,192.168.100.30,12h

Hier sorgen wir dafür, dass der DHCP-Dienst nicht in unserem LAN IP-Adressen verteilen kann. Das würde auch keinen Sinn machen, da in unserem Wlan ein anderer Adressbereich (192.168.100.x) liegt, als in unserem LAN (192.168.1.x). Da wir oben maximal 20 Clients erlaubt haben, reicht der Adressbereich für DHCP von 192.168.100.10 bis 192.168.100.30 aus. Die sogenannte „Lease-Time“ gibt an, dass eine IP-Adresse für 12 Stunden reserviert bleibt, sobald der Client nicht mehr im Netzwerk angemeldet ist. Danach wird Sie für den nächsten Client wieder freigegeben.

Übrigens: Ein Client fragt beim DHCP-Dienst immer zuerst an, ob die vorherige DHCP-Adresse noch frei ist. Wenn dem so ist, erhält der Client diese Adresse wieder.

Wichtig zu erwähnen: Die hier gezeigte Konfiguration lässt es nicht zu, dass man aus dem LAN einen Wlan-Client erreicht. Das wird durch den Einsatz von NAT und Masquerade verhindert. Dieses ist eine der Möglichkeiten, sein LAN vom Wlan abzusichern. Möchte man diese Funktion jedoch nutzen, ist vielleicht die Konfiguration einer Bridge sinnvoller!

Zusätzliche Hinweise

Für beide Konfigurationen gilt: Nach dem Erstellen der Konfiurationsdateien sollte man den Pi neu starten (sudo shutdown -r now). Anschließend kann man mit einem Wlan-Client (Handy, Tablet, Notebook…) den Zugang testen.

Wichtig für diese Installationen ist jedoch, dass man sich genau überlegt, was auf dem Pi alles möglich ist und aktiviert ist. Jeder Client in Reichweite kann nun versuchen und das Wlan und somit zum Pi zu gelangen. Also sollten wir uns folgende Fragen stellen:

1. Ist der Standarduser “pi” noch mit dem Standardpasswort “raspberry” aktiviert?
2. Ist der ssh-Zugriff für den root-Benutzer aktiviert ?
3. Ist das Passwort des root-Benutzers einfach zu erraten?
4. Ist das Wlan-Passwort einfach zu erraten?
5. Kann ich von der SSID her schlließen, wem das Wlan gehört?

Dieses sind die wichtigsten Überlegungen, damit man keine Überraschungen erlebt. Man sollte sich immer ein wenig Zeit nehmen und in Ruhe das Wlan konfigurieren, bevor sich im eigenen Vorgarten ungewollt ein Internetcafe bildet. 😉

Ich habe meinen Pi als Wlan-Bridge nun seit einigen Wochen am Laufen und bin sehr zufrieden. Er läuft stabil und ich habe mittlerweise über 20 verschiedene Wlan-Clients getestet (Handys, Tablets, Notebooks etc.) und alle haben fehlerfrei und schnell im Wlan gearbeitet.

 

2 Kommentare

  1. Nachtrag zu 5:

    Kann ich von der SSID her schlließen, wem das Wlan gehört?

    Ich habe eine extra Email-Adresse für die SSID eingerichtet und nutze diese als SSID (StraßeHausnummer@domäne.de)

    So kann man sich bei Problemen absprechen mit einer einfachen Email – ich kann ja eh messen wohin das Netz gehört

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax