
Unser Garten liegt nicht weit von unserem Wohnhaus entfernt, ich schätze die Entfernung auf ca. 20 m. Aber leider reicht das WLAN meiner FRITZ!Box 3390 nicht zuverlässig bis in alle seine Ecken, sodass es bisher nicht möglich war, mal surfend mit dem Notebook auf der Bank zu sitzen oder beim Gartenbau Webradio per Smartphone zu hören. Etwas musste passieren – ein tragbarer WLAN-Repeater musste her!
Ein Blick auf das Power Pack mit 10.000mAh, welches ich vor kurzem geschenkt bekommen hatte, beförderte in mir die Idee: „Es muss doch möglich sein, einen Raspberry Pi als WLAN-Repeater zu benutzen?!“ Etwas Suche im Netz brachte mich dann zur Seite von eggIT (Quelle 1), wo anscheinend genau das beschrieben wird, was ich suchte. Die Komponenten waren klar beschrieben und schnell bestellt. Leider waren meine Versuche der Umsetzung nicht von Erfolg gekrönt, und ich ließ das Projekt erst einmal (auch wg. anderer zeitfressender Tätigkeiten) etwas ruhen. Aber der Sommer nahte (tut dies immer noch :)), die Gartenabende wurden länger und ich wollte mein WLAN im Garten!
Etwas Suche mit neuem Mut brachte mir dann zwei weitere Tutorials (Quellen 2 und 3), aus denen ich mir meine Lösung destilliert habe – der WLAN-Repeater läuft nun!
Anbei stelle ich für alle Interessierten die Anleitung bzw. alle relevanten Konfigurationsschritte bereit. Ich habe alle Konfigurationsschritte als root durchgeführt – RasPi-Nutzer wissen, was sie machen :)! Die Kurzübersicht:
- wlan0 (Hardware: EDIMAX EW-7811UN) meldet sich in meinem Heimnetz (SSID: HomeWLAN) mit fester IP-Adresse an.
- wlan1 (Hardware: TP-Link TL-WN722N) wird statisch zum Betrieb in einem eigenen Subnetz konfiguriert.
- hostapd stellt mittels wlan1 ein eigenes WLAN (SSID: HomeWLANportable) bereit.
- dnsmasq liefert IP-Adressen für alle Clients in HomeWLANportable.
- iptables sorgt dafür, dass Anfragen aus HomeWLANportable ins Internet geleitet werden und von dort auch wieder mit Antworten versorgt werden. Geräte im HomeWLANportable können nicht auf Geräte im HomeWLAN zugreifen.
Die detaillierte Konfiguration sieht wie folgt aus:
1. Netzwerkgeräte einrichten
/etc/network/interfaces: auto lo auto wlan0 auto wlan1 iface lo inet loopback # eth0 wird nur der Vollständigkeit halber konfiguriert, aber nicht gestartet iface eth0 inet static address 10.10.10.189 netmask 255.255.255.0 # Stick von EDIMAX iface wlan0 inet static address 10.10.10.190 netmask 255.255.255.0 gateway 10.10.10.187 wpa-driver wext wpa-ssid HomeWLAN wpa-ap-scan 1 wpa-proto RSN wpa-pairwise CCMP wpa-group CCMP wpa-key-mgmt WPA-PSK wpa-psk MYVERYSECRETWLANKEY # Stick von TP-Link iface wlan1 inet static address 10.0.0.254 netmask 255.255.255.0
Anschließend zeigt ifconfig nach einen Neustart neben lo und eth0 nun wlan0 und wlan1. So weit, so gut. Weiter im Text…
2. hostapd installieren/konfigurieren
apt-get install hostapd
/etc/default/hostapd: DAEMON_CONF="/etc/hostapd/hostapd.conf"
/etc/hostapd/hostapd.conf: interface=wlan1 driver=nl80211 ssid=HomeWLANportable channel=10 hw_mode=g ieee80211n=1 country_code=DE wpa=2 wpa_passphrase=MYOTHERVERYSECRETWLANKEY wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP auth_algs=1
3. dnsmasq installieren/konfigurieren
apt-get install dnsmasq
/etc/dnsmasq.conf: # Schnittstelle mit Adressvergabe per DHCP interface=wlan1 # DHCP-Adressbereich minimal, maximal, Subnetzmaske, Lease-Gültigkeitsdauer dhcp-range=10.0.0.1,10.0.0.253,255.255.255.0,1h # RasPi als Standard-Gateway setzen dhcp-option=option:router,10.0.0.254 # RasPi als DNS-Server setzen dhcp-option=option:dns-server,10.0.0.254 # Logausgabe nach /var/log/syslog aktivieren log-queries
Man kann auch den Router im HomeWLAN als Standardgateway und -DNS-Server eintragen. Da ich aber das HomeWLAN vor Zugriffen durch Geräte aus dem HomeWLANportable schützen will und meine FRITZ!Box unangetastet lassen möchte, muss die FRITZ!Box komplett transparent arbeiten können und darf in keiner Konfigurationsdatei den WLAN-Repeater betreffend auftauchen.
4. ifplugd anpassen
Um die Vergabe von IP-Adressen per dnsmasq zu ermöglichen, muss laut Quelle 4 noch folgende Anpassung durchgeführt werden:
/etc/default/ifplugd: INTERFACES="eth0" # ehemals "auto" HOTPLUG_INTERFACES="eth0" # ehemals "all"
Seltsamerweise ist diese Anpassung aktuell wirklich notwendig, damit DHCP funktioniert. Vor ca. einem halben Jahr, als ich den RasPi das erste Mal als WLAN-Repeater konfiguriert hatte, funktionierte alles auch ohne diesen Schritt.
Nach einem Neustart findet Smartphone und Co. das WLAN namens HomeWLANportable, können sich mittels des Schlüssels MYOTHERVERYSECRETWLANKEY einloggen, bekommen eine IP aus dem Bereich 10.0.0.1-10.0.0.253 zugewiesen – können aber noch nicht surfen.
5. IP-Forwarding aktivieren
/etc/sysctl.conf: net.ipv4.ip_forward=1
6. iptables-Regeln aktivieren
# NAT für alle ausgehenden Pakete aktivieren iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE # eingehende Verbindungen aus dem HomeWLAN akzeptieren iptables -A INPUT -s 10.10.10.0/24 -j ACCEPT # DNS-Anfragen aus dem HomeWLANportable akzeptieren iptables -A INPUT -p udp -m udp --dport 53 -m state --state NEW,ESTABLISHED -s 10.0.0.0/24 -j ACCEPT # DHCP-Anfragen generell akzeptieren iptables -A INPUT -p udp -m udp --dport 67 -m state --state NEW,ESTABLISHED -j ACCEPT # default-Policy für INPUT-Kette auf DROP setzen iptables -P INPUT DROP # Zugriff auf Geräte im HomeWLAN aus dem HomeWLANportable heraus verhindern iptables -A FORWARD -s 10.0.0.0/24 -d 10.10.10.0/24 -p all -j DROP # Forwarding für Pakete aus dem HomeWLANportable in Richtung Internet aktivieren iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT # Forwarding für Antwortpakete aus dem Internet in Richtung HomeWLANportable aktivieren iptables -A FORWARD -i wlan0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT # default-Policy für FORWARD-Kette auf DROP setzen iptables -P FORWARD DROP
Nun können Geräte, die sich bei HomeWLANportable eingemeldet haben, das Internet komplett nutzen. Über eventuelle Einschränkungen, was erlaubte Ports und Protokolle angeht, sollte man auch nachdenken, um die Nutzung durch Gäste z.B. auf Web und E-Mail einzuschränken.
7. iptables-Regeln sichern und automatisches Laden aktivieren
iptables-save > /etc/HomeWLANportable.rules
am Ende der Datei /etc/network/interfaces folgende neue Zeile anfügen: up iptables-restore < /etc/HomeWLANportable.rules
8. DNS-Auflösung konfigurieren
/etc/resolv.conf: nameserver 10.10.10.187 # Haupt-DNS-Server des lokalen Netzes
9. hostapd und dnsmasq neu starten
service hostapd restart service dnsmasq restart
Mit dieser Konfiguration habe ich nun jederzeit die Möglichkeit, WLAN-Empfang an per FRITZ!Box nicht gut versorgten Punkten zu ermöglichen, wenn der Repeater auf halber Strecke zur FB aufgestellt ist :)! Über Eure Kommentare bzgl. iptables-Regeln oder weitere Ideen zur Konfiguration freue ich jetzt schon – happy configuring!

Quellen:
- http://eggit.de/raspberry-pi-als-wlan-repeater/
- http://pantofflhelden.com/2013/02/raspberry-pi-wifi-repeater-im-eigenbau/
- http://www.pro-linux.de/artikel/2/1672
- http://sirlagz.net/2013/02/10/how-to-use-the-raspberry-pi-as-a-wireless-access-pointrouter-part-3b/
Will der Laptop vielleicht einen Proxy nutzen, der als Nutzer des Gast-WLANs nicht erreichbar ist?
Hallo Kay,
es ist eingestellt, dass der Firefox die Proxy-Einstellungen des Systems verwendet. Soweit ich das beurteilen kann, habe ich zumindest nicht wissentlich irgendwelche Proxys konfiguriert. (Betriebssystem Linux Mint 17 Cinnamon, Browser Firefox 31.0)
Kannst Du vom Laptop aus anpingen:
?
Hallo Kay,
ich kann nicht oft genug DANKE für Deine unermüdliche Hilfe sagen! Alleine hätte ich dieses Projekt vermutlich schon wieder eingestampft. Es tut mir außerdem leid, dass ich durch meine ständigen Nachrichten Deinen Blog zumülle. Im Anhang sind meine Ping-Ergebnisse vom Laptop im WLAN des RasPi. Bei Standardgateway bin ich nicht sicher, ob Du den Router mit der Internet-Anbindung meinst? In dem Fall ist das mein Handy mit der IP 192.168.43.1. Ab diesen Punkt kam keine Antwort mehr. Ich kann 192.168.43.1 sowie Internet-Adressen immer nur von der Konsole des RasPi’s mit Erfolg anpingen.
Rainer
rainer@laptop ~ $ ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.076 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.122 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.112 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.139 ms
64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.109 ms
64 bytes from localhost (127.0.0.1): icmp_seq=6 ttl=64 time=0.109 ms
^C
--- localhost ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 4998ms
rtt min/avg/max/mdev = 0.076/0.111/0.139/0.019 ms
rainer@laptop ~ $ ping 10.0.0.184
PING 10.0.0.184 (10.0.0.184) 56(84) bytes of data.
64 bytes from 10.0.0.184: icmp_seq=1 ttl=64 time=0.097 ms
64 bytes from 10.0.0.184: icmp_seq=2 ttl=64 time=0.092 ms
64 bytes from 10.0.0.184: icmp_seq=3 ttl=64 time=0.101 ms
64 bytes from 10.0.0.184: icmp_seq=4 ttl=64 time=0.104 ms
^C
--- 10.0.0.184 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.092/0.098/0.104/0.010 ms
rainer@laptop ~ $ ping 10.0.0.254
PING 10.0.0.254 (10.0.0.254) 56(84) bytes of data.
64 bytes from 10.0.0.254: icmp_seq=1 ttl=64 time=1.78 ms
64 bytes from 10.0.0.254: icmp_seq=2 ttl=64 time=111 ms
64 bytes from 10.0.0.254: icmp_seq=3 ttl=64 time=1.62 ms
64 bytes from 10.0.0.254: icmp_seq=4 ttl=64 time=107 ms
^C
--- 10.0.0.254 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 1.629/55.486/111.028/53.794 ms
rainer@laptop ~ $ ping 192.168.43.1
PING 192.168.43.1 (192.168.43.1) 56(84) bytes of data.
^C
--- 192.168.43.1 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4032ms
rainer@laptop ~ $ ping kay-farin.de
PING kay-farin.de (194.116.187.25) 56(84) bytes of data.
^C
--- kay-farin.de ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 5039ms
Hi Rainer! Irgendwo steckt da noch ein Fehler, den ich bisher noch nicht finden konnte, da müssen wir noch mal Deine Konfiguration durchkämmen. Aktuell habe ich unter der Woche wenig Zeit dazu. Schmeiß das Projekt aber noch nicht vorschnell weg – ich melde mich am Wochenende für einen weiteren Versuch! Vielleicht können wir dann etwas interaktiver miteinander daran arbeiten…
Hallo Rainer,
läuft das Projekt auf Deiner Seite noch? Falls ja, können wir gerne versuchen, noch eine Lösung für Sein Setup zu finden. Es wird vielleicht etwas dauern, aber einen Versuch wäre es wert.
Hallo,
ich habe deine Anleitung genau befolgt…
aber leider bekomme ich beim Versuch die iptables zu aktivieren immer die Fehlermeldung „iptables-restore: line 1 failed“. Habe die Zeile schon endlos oft überprüft auf Fehler.
Kann aber nichts feststellen…
Hallo,
Ich habe exakt das selber Problem. Die Konfiguration sieht bei mir auch identisch aus, wie bei Rainer. Wenn ich einen Ping starte, wird die IP-Adresse auch richtig aufgelöst, allerdings funktioniert der Ping selber nicht und das Laden von Seiten stürzt ab. Alle Logs sehen auch identisch aus. Wurde für dieses Problem schon eine Lösung gefunden?
Super Tutorial soweit. Versuche das jetzt schon seit einigen Tagen zum laufen zu bekommen.
Vielen Dank schonmal
Gruß
Super danke Dir hat auch aktuell auf Raspi 1 mit dem Edimax und einem TPLink WN822N super geklappt!