Den Raspberry Pi als WLAN-Hotspot einrichten

Der Rasperry Pi kann per WLAN am heimischen Router angeschlossen werden, oder auch als WLAN-Hotspot für andere Geräte als Access Point dienen. Voraussetzung sind neben dem Raspberry Pi auch ein entsprechender WLAN-Stick, der den „Access-Point“-Modus unterstützt, wie z.B. der Edimax EW-7811UN oder Edimax EW-7612UAn, mit dem in diesem Beitrag der Hotspot realisiert wurde.

 

Was wird benötigt?


Man benötigt entweder den Raspberry Pi B+ oder den Raspberry Pi 2 B. Der Raspberry Pi A geht nicht, da dieser keinen Netzwerkanschluss hat. Und einen WLAN-Stick. Die Anleitung ist für den Edimax EW-7811UN und dem Edimax EW-7612UAn erstellt.

Anschluss des WLAN-Sticks (Edimax)

Der Stick wird sofort nach dem Einstecken vom System erkannt. Um den genauen Treiber zu sehen, lassen wir uns diese Informationen per

dmesg

ausgeben:

[    3.544418] usb 1-1.2: New USB device found, idVendor=7392, idProduct=7811
[    3.560287] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    3.581449] usb 1-1.2: Product: 802.11n WLAN Adapter
[    3.594232] usb 1-1.2: Manufacturer: Realtek
[    3.600477] usb 1-1.2: SerialNumber: 00e04c000001
[    8.132990] usbcore: registered new interface driver rtl8192cu

Der eingesteckte Edimax Stick wurde von der Firma Realtek hergestellt und der entsprechende Treiber wurde rtl8192cu bereits geladen. Damit müsste jetzt auch ein neues Netzwerk-Device wlan0 erscheinen. Überprüft kann dieses per

ip a

mit der entsprechenden Ausgabe:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether b8:27:eb:28:f5:82 brd ff:ff:ff:ff:ff:ff
    inet 192.168.178.220/24 brd 192.168.178.255 scope global eth0:0
       valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 74:da:38:05:0f:b8 brd ff:ff:ff:ff:ff:ff

Wir sehen das Loopback (lo) und den neuen WLAN-Adapter (wlan0) – der Stick wurde problemlos erkannt. Sollen nicht nur die Datenpakete im eigenen Netz verschickt werden, sondern auch ins Internet, so muss der Hotspot auch mit dem Router verbunden werden. Dies geschieht hier per Kabel, also eth0.

Installation der benötigten Pakete

Installation der Pakete hostapd und dnsmasq

sudo apt-get install hostapd dnsmasq

Einrichtung des Raspberry Pi als AccessPoint (Hotspot)

Dem Raspberry muss eine statische IP-Adresse zugewiesen werden. Dazu muss die

sudo vi /etc/network/interfaces

entsprechend angepasst/erweitert werden:

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.66.1
netmask 255.255.255.0
broadcast 192.168.66.255

Wichtig ist hier, dass nur eine Definition für wlan0 existiert. Das Netzwerk kann nun offen oder per WPA/WEP betrieben werden. Ein wenig Sicherheit tut nicht weh und so konfigurieren wir den HostAPD mit WPA2. Dazu wird die

sudo vi /etc/hostapd/hostapd.conf

erzeugt und folgende Daten eingetragen:

# Schnittstelle
interface=wlan0

# Treiber
driver=rtl871xdrv

# WLAN-Konfiguration
ssid=WLAN-NAME
channel=1
hw_mode=g

# ESSID sichtbar
ignore_broadcast_ssid=0

# Verschlüsselung (hier: WPA2)
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=WLAN-SCHLUESSEL
auth_algs=3

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

# Ländereinstellungen
country_code=DE
ieee80211d=1

# MAC-Authentifizierung (0=aus)
macaddr_acl=0

Diese Datei muss HostAPD bekannt gemacht werden:

sudo vi /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"

Damit jedem Client eine IP per DHCP zugewiesen bekommt, muss die

sudo vi /etc/dnsmasq.conf

angepasst werden:

interface=wlan0
dhcp-range=interface:wlan0,192.168.66.100,192.168.66.200,infinite
no-dhcp-interface=eth0

Der Raspberry-Hotspot vergibt nur IPs im Bereich von 192.168.66.100 bis 192.168.66.200. Zum Abschluss den AccessPoint starten und so konfigurieren, dass auch nach einem Reboot der Hotspot wieder zur Verfügung steht:

sudo service hostapd restart
sudo service dnsmasq restart  

sudo update-rc.d hostapd enable
sudo update-rc.d dnsmasq enable

Internet-Verbindung weiterleiten

Im letzten Schritt wird NAT (Network Address Translation) konfiguriert. Dazu muss IP-Forwarding aktiviert werden. Damit dies auch nach dem Reboot des Raspberries noch funktioniert, sollte es in der

sudo vi /etc/sysctl.conf

eingetragen bzw. einkommentiert werden:

net.ipv4.ip_forward=1

Damit auch die Regeln dann wieder zur Verfügung stehen, folgendes Script in

sudo vi /etc/network/if-up.d/accesspoint

mit dem Inhalt erzeugen:

#!/bin/sh
iptables -A FORWARD -o eth0 -i wlan0 -s 192.168.66.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  

und dem Script die richtigen Rechte geben:

sudo chmod +x /etc/network/if-up.d/accesspoint

Damit wird das Forwarding von eth0 auf wlan0 freigeschaltet. Nach dem Reboot hat wlan0 eine IP zugewiesen bekommen. Der Raspberry Pi ist nun verbunden mit dem Internet (eth0) und dient als Hotspot per wlan0

ip a

mit der entsprechenden Ausgabe:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether b8:27:eb:28:f5:82 brd ff:ff:ff:ff:ff:ff
    inet 192.168.178.200/24 brd 192.168.178.255 scope global eth0
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 74:da:38:1a:95:90 brd ff:ff:ff:ff:ff:ff
    inet 192.168.66.1/24 brd 192.168.66.255 scope global wlan0
       valid_lft forever preferred_lft forever

Probleme beim Start von hostapd

Auch wenn man in der /etc/hostapd/hostapd.conf den richtigen Treiber konfiguriert hat, kann es vorkommen, dass hostapd nicht startet:

$ sudo service hostapd restart

Configuration file: /etc/hostapd/hostapd.conf
Line 2: invalid/unknown driver 'rtl871xdrv'
1 errors found in configuration file '/etc/hostapd/hostapd.conf'

oder

$ sudo service hostapd restart

[ ok ] Stopping advanced IEEE 802.11 management: hostapd.
[....] Starting advanced IEEE 802.11 management: hostapdioctl[RTL_IOCTL_HOSTAPD]: Invalid argument
. ok

Der Hintergrund ist, dass hostapd je nach Distribution nicht mit dem RTL8188CUS Chipsatz kompiliert wurde und damit wird der Edimax-WLAN-Stick nicht erkannt. Abhilfe schafft der Austausch der /usr/sbin/hostapd durch eine entsprechend kompilierte Version. Eine bereits fertig kompilierte Version der hostapd findet sich hier und ist per wget abrufbar.

wget http://www.linux-ratgeber.de/wp-content/uploads/2015/03/hostapd.zip
unzip hostapd.zip 
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.bak
sudo mv hostapd /usr/sbin/hostapd.RTL8188CUS
sudo ln -sf /usr/sbin/hostapd.RTL8188CUS /usr/sbin/hostapd 
sudo chown root.root /usr/sbin/hostapd 
sudo chmod 755 /usr/sbin/hostapd

Wer kein Vertrauen in eine „3rd party“-Quelle hat, kann auch die Sourcen direkt von der Realtek-Website herunterladen und selbst kompilieren. Hier das Modell auswählen (RTL8188CUS) und das Zip für Linux herunterladen und auf dem Raspberry ablegen. Hier die einzelnen Schritte (Der Dateiname des heruntergeladenen Zips kann sich ändern):

cd /tmp

unzip 0001-RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip
cd RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/
tar -xvf wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz
cd wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd/

make
make install

Unter /usr/local/bin/hostapd liegt nun die frisch kompilierte hostapd. Diese wie oben beschrieben nach /usr/sbin/hostapd kopieren und entsprechende Rechte setzen. Ein Restart von hostapd zeigt den Erfolg:

sudo service hostapd restart
[ ok ] Stopping advanced IEEE 802.11 management: hostapd.
[ ok ] Starting advanced IEEE 802.11 management: hostapd.

4 Kommentare

  1. Andreas

    „Diese wie oben beschrieben nach /usr/sbin/hostapd kopieren und entsprechende Rechte setzen. “
    Ist damit chmod +x gemeint?

    Antworten
  2. Florian

    Hallo super Anleitung, doch leider kommt bei mir folgender Fehler wenn ich versuche den Service hostapd zu starten. Ich verwende ebenfalls den Edimax EW-7811UN.

    pi@raspberrypi ~ $ hostapd /etc/hostapd/hostapd.conf
    Configuration file: /etc/hostapd/hostapd.conf
    Line 5: invalid/unknown driver ‚rtl871xdrv‘
    1 errors found in configuration file ‚/etc/hostapd/hostapd.conf‘

    Kennt jemand eine Lösung für dieses Problem.

    Antworten
    1. Jonas

      Lesen hilft!

      Antworten
  3. SirNuke

    Danke!

    Das Tutorial hat mir sehr geholfen.
    Ich hab auf Google und in diversen Foren eine Ewigkeit gesucht und nichts gefunden dass mir bei dem Treiberproblem geholfen hat.

    Nochmal DANKE an den Autor!

    LG SirNuke

    Antworten

Schreibe einen Kommentar zu Florian Antworten abbrechen

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

 
x