Raspberry Pi als WLAN-Hotspot einrichten (WLAN-Access-Point)

Der Raspberry Pi ist vielseitig einsetzbar. Vom Erlernen einer Programmiersprache über einen Server für die Hausautomatisierung bis zur Alternative zu Dropbox lässt sich hier fast alles realisieren. Dieser Beitrag erklärt, wie aus dem Raspberry Pi ein WLAN Access Point wird und somit das heimische Netzwerk beispielsweise in den Garten erweitert. 

Damit kann der Raspberry Pi ein privates oder öffentliches Netzwerk aufbauen und die Internetverbindung vom Ethernet-Port oder einem zweiten WLAN-Modul weiterleiten. Gleichzeitig wird der Raspberry Pi als DHCP-Server konfiguriert, so dass die IP-Vergabe automatisch funktioniert.

Raspberry Pi als WLAN Access Point nutzen (Bild: Copyright Benjamin Blessing).

Raspberry Pi als WLAN Access Point einrichten

Diese Anleitung wurde am 25.06.2016 aktualisiert. Einleitend wird das Einrichten eines WLAN Access Point mit dem aktuellen Raspberry Pi 3 erläutert. Weiter unten findet sich dann die Anleitung für den Raspberry Pi 2 zusammen mit dem Edimax WLAN USB-Stick. Beide Anleitungen setzen lediglich ein lauffähiges Raspbian voraus und die Bereitschaft, den Terminal für die Einrichtung zu nutzen. Wird Hilfe bei der Konfiguration benötigt, finden sich Anleitungen zum Einrichten des Raspberry Pi unter OS X sowie zum Einrichten des Raspberry Pi unter Windows ebenfalls hier auf RandomBrick.de.

Raspberry Pi 3 als WLAN Access Point einrichten

Das spannende am neuen Raspberry Pi 3 ist das integrierte WLAN-Modul. Das reduziert die Treiberprobleme, die bei einem USB-WLAN-Stick von Drittanbieter auftauchen können. Der Broadcom Chip BCM43438 wird von dem Open-Source Treiber brcmfmac unterstützt, wodurch sich die Einrichtung eines WLAN Access Points sehr einfach gestaltet.

Schritt 1: Raspbian aktualisieren

Vor dem Start wird das Betriebssystem auf den neusten Stand gebracht:

sudo apt-get update && sudo apt-get upgrade

Schritt 2: Pakete installieren

Nach der Aktualisierung von Raspbian werden die Pakete dnsmasq und hostapd installiert:

sudo apt-get install dnsmasq hostapd

Zum Verständnis:

  • hostapd: Dieses Paket ermöglicht die Nutzung des integrierten WLANs als Access Point
  • dnsmasq: Das ist ein kombinierter DHCP- und DNS-Server der sich sehr einfach konfigurieren lässt

Nutzer mit großen Ambitionen können auch die isc-dhcp-server und bind9 Pakete für einen DHCP- und DNS-Server verwenden. Für meine Ansprüche genügt jedoch dnsmasq.

Schritt 3: Interfaces konfigurieren

Im nächsten Schritt wird das wlan0 Interface mit einer statischen IP-Adresse versehen. Solltet ihr bis zu diesem Punkt über WLAN mit dem Raspberry Pi verbunden sein, sollte jetzt die Steuerung über Ethernet oder Tastatur und Monitor erfolgen. In aktuellen Versionen von Raspian erfolgt die Konfiguration der Interfaces automatisch über dhcpcd. Deshalb ist hier festzulegen, dass wlan0 ignoriert wird. Dazu ist dhcpcd aufzurufen:

sudo nano /etc/dhcpcd.conf

Folgende Zeile ist ganz unten in der Datei einzutragen. Überprüft dabei, ob in dhcpcd irgendeine Zeile steht, die das Wort interface enthält. Falls ja, muss die einzufügende Zeile darüber eingefügt werden.

denyinterfaces wlan0

Schritt 4: Statische IP-Adresse konfigurieren

Anschließend wird für wlan0 eine statische UP-Adresse festgelegt. Dazu ist die Konfigurationsdatei für die Interfaces aufzurufen und der wlan0 Abschnitt zu bearbeiten:

sudo nano /etc/network/interfaces

Der wlan0 Abschnitt sollte anschließend so aussehen. Bei der IP-Adresse könnt ihr eine für euch passende wählen oder meine Vorgaben einfach übernehmen.

allow-hotplug wlan0
iface wlan0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Jetzt muss dhcpcd neugestartet und die Konfiguration für wlan0 neu geladen werden:

sudo service dhcpcd restart
sudo ifdown wlan0; sudo ifup wlan0.

Schritt 5: Hostapd einrichten

In diesem Schritt wird hostapd konfiguriert. Dazu wird eine neue Konfigurationsdatei erstellt:

sudo nano /etc/hostapd/hostapd.conf

In diese Datei müssen folgende Werte kopiert werden. Zum Verständnis habe ich diese mit Kommentaren versehen. Sollten die Kommentare nicht benötigt werden, kann jede Zeile die mit einem Hashtag beginnt, entfernt werden.

# Der Name des WLAN Interface das hier konfiguriert wird
interface=wlan0

# Verwendung des nl80211 Treibers mit dem brcmfmac Treiber
driver=nl80211

# Der sichtbare WLAN-Name
ssid=Dein_WLAN

# Vewende das 2,4 GHz Band
hw_mode=g

# Verwende Kanal 6
channel=6

# Aktiviere 802.11n
ieee80211n=1

# Aktiviere WMM
wmm_enabled=1

# Nutze 40MHz Frequenzen mit 20ns Sicherheitsintervall
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]

# Akzeptiere alle MAC Adressen
macaddr_acl=0

# Verwende WPA Authentifizierung
auth_algs=1

# Klienten müssen den Namen des Netzwerks nicht kennen
ignore_broadcast_ssid=0

# Verwende WPA2
wpa=2

# Verwende einen Pre-shared Key
wpa_key_mgmt=WPA-PSK

# Das WLAN-Passwort
wpa_passphrase=Dein_Passwort

# Verwende AES anstatt TKIP
rsn_pairwise=CCMP

Mit Strg + X, Y und anschließend Enter wird alles gespeichert und der Editor geschlossen. Mit einem kurzen Befehl lässt sich prüfen, ob die Konfiguration funktioniert:

sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf.

Sollte bis hier alles funktioniert haben, müsste jetzt ein neues WLAN mit dem Namen Dein_WLAN auftauchen. Eine Verbindung mit dem WLAN dürfte allerdings noch nicht funktionieren, da den Endgeräten noch keine IP-Adresse zur Verfügung gestellt wird, solange dnsmasq nicht konfiguriert ist. Mit Strg + C wird die Anfrage unterbrochen.

Abschließend muss hostapd noch mitgeteilt werden, wo die Konfigurationsdatei nach dem Hochfahren zu finden ist. Dazu ist die default Konfigurationsdatei zu öffnen:

sudo nano /etc/default/hostapd

In dieser Datei ist folgende Zeile zu suchen

#DAEMON_CONF=““

Und durch diese zu ersetzen:

DAEMON_CONF=“/etc/hostapd/hostapd.conf“

Schritt 6: Dnsmasq einrichten

Dnsmasq wird mit einer sehr umfangreichen Konfigurationsdatei ausgeliefert, die weit mehr Einstellungen und Informationen beinhaltet, als für diesen Zweck benötigt werden. Anstatt die Konfigurationsdatei einfach zu löschen, empfiehlt es sich, diese umzubenennen und eine neue Datei zu erstellen:

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
sudo nano /etc/dnsmasq.conf

In die neue Datei sind folgende Werte zu kopieren. Achtet dabei auf die IP-Adresse. Diese sollte mit den Werten aus Schritt 4 übereinstimmen:

# Das zu nutzende Interface
interface=wlan0

# Die IP-Adresse über die der DNS zuhört
listen-address=192.168.0.1
bind-interfaces

# Weiterleitung von DNS Anfragen an den Google DNS
server=8.8.8.8

# Kurznamen werden nicht weitergeleitet
domain-needed
bogus-priv

# Der DHCP-Server verteilt Adressen im Adressbereich zwischen 192.168.0.50 und 192.168.0.150 und vergibt diese an das jeweilige Endgerät für 10 Tage (240 Stunden).
dhcp-range=192.168.0.50,192.168.0.150,240h

Mit Strg + X, Y und Enter speichern und schließen.

Schritt 7: IPV4-Weiterleitung

Anschließend wird noch die Einrichtung eine Paketweiterleitung benötigt, bevor Traffic irgendwohin gesendet werden kann. Dazu ist ein Eintrag in der sysctl.conf notwendig:

sudo nano /etc/sysctl.conf

In dieser Datei ist der Hashtag (#) vor der Zeile #net.ipv4.ip_forward=1 zu entfernen, so dass diese nur noch wie folgt aussieht:

net.ipv4.ip_forward=1

Mit Strg + X, Y und Enter speichern und schließen. An dieser Stelle empfiehlt sich ein Neustart des Raspberry Pi mit

sudo reboot

Damit der Access Point auf dem Raspberry Pi auch die Internetverbindung weitergibt, ist ein NAT zwischen dem wlan0 und eth0 Interface einzurichten. Das erledigen folgende Kommandos:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state –state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

Da diese Regeln bei jedem Neustart des Raspberry Pis anzuwenden sind, werden diese Regeln in die Datei /etc/iptables.ipv4.nat gespeichert:

sudo sh -c „iptables-save > /etc/iptables.ipv4.nat“

Zusätzlich ist noch die rc.local zu bearbeiten:

sudo nano /etc/rc.local

Über der Zeile mit exit 0 ist folgende Zeile einzufügen:

iptables-restore < /etc/iptables.ipv4.nat

Mit Strg + X, Y und Enter speichern und schließen.

Abschließend sind die verwendeten Dienste einmal neuzustarten.

sudo service hostapd start
sudo service dnsmasq start

Jetzt sollte der Raspberry Pi einen Access Point bereitstellen und die Internetverbindung weitergeben. Zur Sicherheit empfehle ich einen letzten Neustart, damit auch alles wie gewünscht funktioniert:

sudo reboot

Nach dem Neustart läuft der Raspberry Pi als WLAN Access Point und gibt die Internetverbindung über die Ethernetkarte an das interne WLAN-Modul weiter.

Raspberry Pi 2 als WLAN Access Point einrichten

Dieser Abschnitt bezieht sich auf den Raspberry Pi 2, der selbst kein internes WLAN-Modul enthält. Für einen Access Point benötigt der Raspberry Pi hierzu einen USB WLAN Adapter. Diese Anleitung bezieht sich auf den Adapter von Edimax. Der BeitragRaspberry Pi 2 Edimax WLAN einrichten zeigt Schritt für Schritt wie der USB-Adapter zu konfigurieren ist.

Die Einrichtung erfolgt vollständig über die Konsole. Alle notwendigen Schritte und Befehle werden nachfolgen aufgelistet und sind auch für Benutzer ohne Linux-Kenntnisse problemlos durchführbar.

Schritt 1: hostapd installieren

Die Konsole auf dem Raspberry Pi öffnen und folgenden Befehl eintippen und warten, bis der Vorgang von alleine beendet wird.

sudo apt-get install bridge-utils hostapd

Andere WLAN USB Adapter werden mit der installieren Kopie von hostapd über apt keine Probleme haben. Für den im Edimax befindlichen Chip RTL8188CUS ist diese Version jedoch inkompatibel. Das wird mit Schritt zwei behoben.

Schritt 2: hostapd Ersatz-Binary

Schritt 2 wird nur benötigt, wenn der oben erwähnte Edimax WLAN-USB-Stick im Einsatz ist.

Dave Conroy hat vom Edimax-Team einen passenden Treiber für hostapb erhalten und stellt diesen freundlicherweise auf seinem Webspace zur Verfügung. Über die Konsole muss jeder Befehl Schritt für Schritt auf dem Raspberry Pi eingegeben werden. Wer zu faul zum Tippen ist, kann das auch per Copy & Paste machen:

wget http://www.daveconroy.com/wp3/wp-content/uploads/2013/07/hostapd.zip
unzip hostapd.zip
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.bak
sudo mv hostapd /usr/sbin/hostapd.edimax
sudo ln -sf /usr/sbin/hostapd.edimax /usr/sbin/hostapd
sudo chown root.root /usr/sbin/hostapd
sudo chmod 755 /usr/sbin/hostapd

Nur die ersten beiden Befehle werden mit einem Ergebnis quittiert. Alle anderen werden abgearbeitet, aber nicht vom System bestätigt. Wer der Quelle nicht traut, kann den Treiber hier herunter laden und selbst kompilieren.

Schritt 3: WLAN ausfindig machen

Jetzt wird der Name des WLAN-USB-Sticks oder des integrierten WLAN-Moduls benötigt. Mit dem nachfolgenden Kommando werden alle verfügbaren Netzwerkkarten angezeigt. In der Regel wird ein wlan-Gerät angezeigt, das der WLAN Stick ist. In meinem Fall heißt der Stick wlan0.

ifconfig

Schritt 4: Verbinden von Ethernet und WLAN

Damit der Raspberry Pi die Internetverbindung des heimischen Netzwerk weitergeben kann, muss eine Verbindung zwischen Ethernet und WLAN hergestellt werden. Das ist für den mobilen NAS-Server weniger wichtig, wird der Raspberry Pi als Access Point verwendet, muss das Internet durchgeleitet werden. Dazu werden die Netzwerk Interfaces bearbeitet.

sudo nano /etc/network/interfaces

Alle Zeilen die wlan0 enthalten, sollten gelöscht werden. Anschließend folgende Zeilen eintragen:

auto br0
iface br0 inet dhcp
bridge_ports eth0 wlan0

In meinem Fall sieht die interfaces jetzt so aus:

#loopback adapter
auto lo
iface lo inet loopback

#wired adapter
iface eth0 inet dhcp

#bridge
auto br0
iface br0 inet dhcp
bridge_ports eth0 wlan0

Mit Strg + X wird der Editor geschlossen, mit Y das Speichern bestätigen und mit Enter wird der Vorgang bestätigt.

Schritt 5: Hostapd konfigurieren

Abschließend muss hostapd noch konfiguriert werden. Das wird über folgenden Befehl erreicht:

sudo nano /etc/hostapd/hostapd.conf

Folgende Werte sind einzutragen mit einer Ausnahme. Die Zeile driver=rtl871xdrv ist nur für den Einsatz des Edimax USB-WLAN-Stick relevant.

interface=wlan0
driver=rtl871xdrv
bridge=br0
ssid=DEIN_WLAN_NAME
channel=1
wmm_enabled=0
wpa=1
wpa_passphrase=DEIN_WLAN_PASSWORT
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
auth_algs=1
macaddr_acl=0

Die Werte ssid für den WLAN Name und wpa_passphrase für das WLAN Passwort können beliebig angepasst werden. Mit Strg + X speichern, mit Y bestätigen und mit Enter schließen.

Schritt 6: Neustart des Raspberry Pi

Ab hier sollte der Raspberry Pi per Ethernet mit dem Netzwerk verbunden sein. Der Raspberry Pi kann über die Konsole neugestartet werden.

sudo reboot

Schritt 7: Test

Nach dem Neustart über die Konsole wird getestet, ob alles funktioniert. Der Raspberry Pi muss dafür weiterhin per Ethernet verbunden sein.

sudo hostapd -dd /etc/hostapd/hostapd.conf

Das Konsolenfenster sollte anschließend eine Menge an Informationen ausgeben. Das kann alles ignoriert werden. Schaut einfach, ob ein neues WLAN verfügbar ist. Wenn ja, Glückwunsch, es hat funktioniert.

RaspberryPi WLAN Access Point einrichten (Bild: Screenshot).
RaspberryPi WLAN Access Point einrichten (Bild: Screenshot).

Per strg + c kann die Aktion im Konsolenfenster abgebrochen werden.

Schritt 8: Hostapd in den Autostart setzen

Wenn alles funktioniert hat, wird hostapd im Autostart des Raspberry Pi verankert, ansonsten muss es jedes Mal manuell gestartet werden, was umständlich ist.

sudo nano /etc/default/hostapd

In der Datei folgende Zeile suchen:

RaspberryPi WLAN Access Point
RaspberryPi WLAN Access Point (Bild: Screenshot).

Diese sollte wie folgt angepasst werden. Die # muss entfernt und die Zeile anschließend wie folgt aussehen:

DAEMON_CONF=“/etc/hostapd/hostapd.conf“

Ein abschließender Neustart und zukünftig spannt der Raspberry Pi automatisch ein WLAN auf, sobald er gestartet wird.

sudo reboot

Fertig. Viel Spaß mit dem Raspberry Pi als Access Point!

Raspberry Pi 2 WLAN Access Point Geschwindigkeit

An dieser Stelle soll noch darauf hingewiesen werden, dass der Raspberry Pi 2 nicht der schnellste WLAN Access Point ist. Trotz aktualisierter Hardware und USB WLAN Adapter der 150 Mbit/s unterstützt, bietet der kleiner Computer nur unterdurchschnittliche Performance.

Getestet wurde bei einer 16.000 Leitung mit 1.000 kbit/s Upload. Der Laptop steht in Sichtweite auf vier Meter Entfernung zum WLAN Router.

Speedtest auf dem MacBook über das heimische WLAN (Bild: Screenshot Speedtest.net).
Speedtest auf dem MacBook über das heimische WLAN (Bild: Screenshot Speedtest.net).

Der Raspberry Pi 2 steht exakt neben dem Router. Beide Speedtests wurden sofort hintereinander durchgeführt. Dem Minicomputer fehlen hier ganze 10 Mbit/s beim Download. Das ist ein gewaltiger Abschlag.

Speedtest auf dem MacBook über das Raspberry Pi 2 WLAN (Bild: Screenshot Speedtest.net).
Speedtest auf dem MacBook über das Raspberry Pi 2 WLAN (Bild: Screenshot Speedtest.net).

Wlan Speed bekommt man erst wenn man in der hostapd-Konfiguration den Modus 80211n Aktiviert !

In dieser Anleitung wird leider nur der Wlan Standart g genutzt und der ist tot langsam.

Dazu im Terminal eingeben

sudo nano /etc/hostapd/hostapd.conf

und dort diese beiden Zeilen DAZU schreiben

hw_mode=g
ieee80211n=1

Pi as a wifi bridge providing safe subnet to wifi and Ethernet

The Raspberry Pi 3 has a built in WiFi radio. This makes using it easier than ever. This guide will start with a basic Raspbian build, connected to a wired network, and add WiFi access point capabilities.

Connect Pi to your Internet

Use an Ethernet cable to connect the pi to the network. DHCP will assign the pi an IP address. Find the address of your pi from your network’s DHCP server.

  • SSH to the pi at that IP address or yourpiname.local

Install dnsmasq and hostapd

More about dnsmasq and hostapd.

sudo apt-get  update
sudo apt-get upgrade
sudo apt-get install dnsmasq hostapd

Configure wlan0

  • Inform dhcpd to ignore wlan0 by editing
sudo nano /etc/dhcpcd.conf
  • To the end add denyinterfaces wlan0
  • This must be ABOVE any interface lines you may have added
  • Configure the wlan IP,
sudo nano /etc/network/interfaces
  • the wlan0 section should be changed to:
allow-hotplug wlan0 
iface wlan0 inet static 
    address 192.168.220.1
    netmask 255.255.255.0
    network 192.168.220.0
    broadcast 192.168.220.255
  • Restart dhcpcd with
sudo service dhcpcd restart
  • Reload wlan0 with
sudo ifdown wlan0; sudo ifup wlan0

Setup hostapd

  • sudo nano /etc/hostapd/hostapd.conf
    • add the following
interface=wlan0
driver=nl80211

hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
macaddr_acl=0
ignore_broadcast_ssid=0

# Use WPA2
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

# Change these to your choice
# This is the name of the network
ssid=Pi3-AP
# The network passphrase
wpa_passphrase=raspberry

TIP: If the passphrase is too short, hostapd won’t start.

  • Now edit the default configuration,
sudo nano /etc/default/hostapd
  • Replace #DAEMON_CONF=““ with DAEMON_CONF="/etc/hostapd/hostapd.conf"

Configure dnsmasq

  • Rename the current configuration,
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
  • Create and edit the new configuration,

sudo nano /etc/dnsmasq.conf

  • Add the following
interface=wlan0       # Use interface wlan0  
listen-address=192.168.220.1   # Specify the address to listen on  
bind-interfaces      # Bind to the interface
server=8.8.8.8       # Use Google DNS  
domain-needed        # Don't forward short names  
bogus-priv           # Drop the non-routed address spaces.  
dhcp-range=192.168.220.50,192.168.220.150,12h # IP range and lease time  

Iptables forwarding

IMPORTANT: This section is optional.

Forwarding is required if any devices connected to your this access point need to connect to the Internet. I do not forward for many IoT devices which I expect to act as an isolated network.

  • Enable IP Forwarding

 

sudo nano /etc/sysctl.conf

>> at bottom add net.ipv4.ip_forward=1

 

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

Load, Test and Reboot

Load the services and test availability, connection and forwarding.

sudo service hostapd start sudo service dnsmasq start
  • Use any WiFi client to connect to your new rpi3 access point
  • Verify connection of various services such as SSH
  • If you chose IP Forwarding, verify that your connected device is able to connect to the Internet
  • Once you have verified everything, sudo reboot now
  • Retest everything with the rebooted pi

Conclusion

You now have a working WiFi access point which may be used to extend your wired network or as a hub for local IoT devices.

 

 


 

 

 

Use the following to update your Raspbian installation:

sudo apt-get update
sudo apt-get upgrade

Install all the required software in one go with this command:

sudo apt-get install dnsmasq hostapd

Since the configuration files are not ready yet, turn the new software off as follows:

sudo systemctl stop dnsmasq
sudo systemctl stop hostapd

Configuring a static IP

We are configuring a standalone network to act as a server, so the Raspberry Pi needs to have a static IP address assigned to the wireless port. This documentation assumes that we are using the standard 192.168.x.x IP addresses for our wireless network, so we will assign the server the IP address 192.168.4.1. It is also assumed that the wireless device being used is wlan0.

To configure the static IP address, edit the dhcpcd configuration file with:

sudo nano /etc/dhcpcd.conf

Go to the end of the file and edit it so that it looks like the following:

interface wlan0
    static ip_address=192.168.4.1/24

Now restart the dhcpcd daemon and set up the new wlan0 configuration:

sudo service dhcpcd restart

Configuring the DHCP server (dnsmasq)

The DHCP service is provided by dnsmasq. By default, the configuration file contains a lot of information that is not needed, and it is easier to start from scratch. Rename this configuration file, and edit a new one:

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig  
sudo nano /etc/dnsmasq.conf

Type or copy the following information into the dnsmasq configuration file and save it:

interface=wlan0      # Use the require wireless interface - usually wlan0
  dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h

So for wlan0, we are going to provide IP addresses between 192.168.4.2 and 192.168.4.20, with a lease time of 24 hours. If you are providing DHCP services for other network devices (e.g. eth0), you could add more sections with the appropriate interface header, with the range of addresses you intend to provide to that interface.

There are many more options for dnsmasq; see the dnsmasq documentation for more details.

Configuring the access point host software (hostapd)

You need to edit the hostapd configuration file, located at /etc/hostapd/hostapd.conf, to add the various parameters for your wireless network. After initial install, this will be a new/empty file.

sudo nano /etc/hostapd/hostapd.conf

Add the information below to the configuration file. This configuration assumes we are using channel 7, with a network name of NameOfNetwork, and a password AardvarkBadgerHedgehog. Note that the name and password should not have quotes around them. The passphrase should be between 8 and 64 characters in length.

interface=wlan0
driver=nl80211
ssid=NameOfNetwork
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=AardvarkBadgerHedgehog
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

We now need to tell the system where to find this configuration file.

sudo nano /etc/default/hostapd

Find the line with #DAEMON_CONF, and replace it with this:

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

Start it up

Now start up the remaining services:

sudo systemctl start hostapd
sudo systemctl start dnsmasq

ADD ROUTING AND MASQUERADE

Edit /etc/sysctl.conf and uncomment this line:

net.ipv4.ip_forward=1

Add a masquerade for outbound traffic on eth0:

sudo iptables -t nat -A  POSTROUTING -o eth0 -j MASQUERADE

Save the iptables rule.

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

Edit /etc/rc.local and add this just above „exit 0“ to install these rules on boot.

iptables-restore < /etc/iptables.ipv4.nat

Reboot

Using a wireless device, search for networks. The network SSID you specified in the hostapd configuration should now be present, and it should be accessible with the specified password.

If SSH is enabled on the Raspberry Pi access point, it should be possible to connect to it from another Linux box (or a system with SSH connectivity present) as follows, assuming the pi account is present:

ssh pi@192.168.4.1

By this point, the Raspberry Pi is acting as an access point, and other devices can associate with it. Associated devices can access the Raspberry Pi access point via its IP address for operations such as rsyncscp, or ssh.

———————————————————————————-

Using the Raspberry Pi as an access point to share an internet connection (bridge)

One common use of the Raspberry Pi as an access point is to provide wireless connections to a wired Ethernet connection, so that anyone logged into the access point can access the internet, providing of course that the wired Ethernet on the Pi can connect to the internet via some sort of router.

To do this, a ‚bridge‘ needs to put in place between the wireless device and the Ethernet device on the access point Raspberry Pi. This bridge will pass all traffic between the two interfaces. Install the following packages to enable the access point setup and bridging.

sudo apt-get install hostapd bridge-utils

Since the configuration files are not ready yet, turn the new software off as follows:

sudo systemctl stop hostapd

Bridging creates a higher-level construct over the two ports being bridged. It is the bridge that is the network device, so we need to stop the eth0 and wlan0ports being allocated IP addresses by the DHCP client on the Raspberry Pi.

sudo nano /etc/dhcpcd.conf

Add denyinterfaces wlan0 and denyinterfaces eth0 to the end of the file (but above any other added interface lines) and save the file.

Add a new bridge, which in this case is called br0.

sudo brctl addbr br0

Connect the network ports. In this case, connect eth0 to the bridge br0.

sudo brctl addif br0 eth0

Now the interfaces file needs to be edited to adjust the various devices to work with bridging. sudo nano /etc/network/interfaces make the following edits.

Add the bridging information at the end of the file.

# Bridge setup
auto br0
iface br0 inet manual
bridge_ports eth0 wlan0

The access point setup is almost the same as that shown in the previous section. Follow the instructions above to set up the hostapd.conf file, but add bridge=br0 below the interface=wlan0 line, and remove or comment out the driver line. The passphrase must be between 8 and 64 characters long.

interface=wlan0
bridge=br0
#driver=nl80211
ssid=NameOfNetwork
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=AardvarkBadgerHedgehog
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Now reboot the Raspberry Pi.

There should now be a functioning bridge between the wireless LAN and the Ethernet connection on the Raspberry Pi, and any device associated with the Raspberry Pi access point will act as if it is connected to the access point’s wired Ethernet.

The ifconfig command will show the bridge, which will have been allocated an IP address via the wired Ethernet’s DHCP server. The wlan0 and eth0 no longer have IP addresses, as they are now controlled by the bridge. It is possible to use a static IP address for the bridge if required, but generally, if the Raspberry Pi access point is connected to a ADSL router, the DHCP address will be fine.

 


 

Raspberry Pi als WLAN-Router einrichten (WLAN-Access-Point)

Mit Raspbian Jessie geprüft.

Raspberry Pi als WLAN-Router einrichten (WLAN-Access-Point)

Ein WLAN-Router stellt mehreren WLAN-Clients über seinen integrierten Access-Point ein WLAN mit einer eigenen IP-Konfiguration zur Verfügung. Dazu verfügt der WLAN-Router über einen DHCP- und DNS-Server.

Eine Alternative für diesen WLAN-Access-Point ist eine WLAN-Bridge. Hier dient der Raspberry Pi nur als Netzwerk-Brücke für zwei Netzwerk-Segmente. Auf der einen Seite das WLAN und auf der anderen Seite das kabelgebundene Netzwerk.

Aufgabe

  1. Ermitteln Sie, welche Bestandteile und Voraussetzungen für den Betrieb eines WLAN-Routers notwendig sind.
  2. Ermitteln Sie die notwendige IP-Konfiguration.
  3. Richten Sie den WLAN-Access-Point ein.
  4. Richten Sie einen DHCP-Server ein.
  5. Richten Sie die Router-Funktionen ein.

Hinweis: Bezeichnung der Netzwerk-Schnittstellen

Seit Raspbian Stretch haben die Netzwerk-Schnittstellen für Ethernet und WLAN andere Bezeichnungen. Also nicht mehr „eth0“ und „wlan0“, sondern „enx…“ und „wlx…“. Das betrifft per USB angeschlossenen Netzwerk-Adapter, deren Bezeichnung von den hier genannten Bezeichnungen abweichen. Das bedeutet, dass man zuerst die individuelle Bezeichnung ermitteln oder die Namensgebung auf das alte Verfahren umstellen muss.

Voraussetzungen prüfen

Um Probleme beim Einrichten zu vermeiden empfiehlt es sich eine frische Raspbian-Image zu verwenden. Ein Raspbian Jessie Lite ist ausreichend. Außerdem sollte man sicherstellen, dass der verwendete WLAN-Adapter mit dem Raspberry Pi grundsätzlich funktioniert und den Access-Point-Modus beherrscht. Mit dem internen WLAN-Adapter im Raspberry Pi 3 funktioniert es.

Stellen wir also zuerst einmal fest, ob der vorgesehene WLAN-Adapter den AP-Modus beherrscht. Um das zu prüfen müssen die Wireless-Tools installiert sein.

sudo apt-get install iw
iw list | grep AP

Wenn dieses Kommando eine oder mehrere Zeilen mit „AP“ auswirft, dann ist alles im grünen Bereich und der WLAN-Adapter beherrscht den Access-Point-Modus. Dann ist der WLAN-Adapter für unsere Aufgabe geeignet. Wenn nicht, dann sollte man sich einen anderen WLAN-Adapter besorgen.

Netzwerk-Konfiguration

In Raspbian Jessie ist standardmäßig ein DHCP Client Daemon (DHCPCD) aktiviert. Die Netzwerk-Konfiguration wird in der Datei „/etc/dhcpcd.conf“ vorgenommen. Für einen Teil der Konfiguration der Netzwerk-Brücke verwenden wir hier die Datei „/etc/network/interfaces“.

sudo nano /etc/network/interfaces

Hier tragen wir folgende Zeilen ein:

# Localhost
auto lo
iface lo inet loopback

# Ethernet
auto eth0
iface eth0 inet manual

# WLAN-Interface
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.1.1
netmask 255.255.255.0

In dieser IPv4-Konfiguration hat das WLAN-Interface eine statische IPv4-Adresse. Das brauchen wir für den Betrieb des DHCP- und DNS-Servers.

Es wäre auch denkbar, der Ethernet-Schnittstelle eine statische IP-Konfiguration zu verpassen. Das muss aber nicht sein. In dieser Form hat der WLAN-Router den Vorteil, dass er in jedem lokalen Netzwerk funktioniert, wenn die IPv4-Konfiguration per DHCP an die Ethernet-Schnittstelle geliefert wird. Wenn IPv6 aktiviert ist, dann funktioniert es ebenso.

Speichern und schließen mit Strg + O, Return, Strg + X.

Jetzt ist zu prüfen, ob der „dhcpcd“ aktiv ist.

sudo systemctl status dhcpcd

Wenn ja, ergänzen wir dessen Konfiguration um folgende Zeile.

sudo nano /etc/dhcpcd.conf
denyinterfaces wlan0

Nachdem man die Änderungen vorgenommen hat kann man die Datei speichern und schließen: Strg + O, Return, Strg + X.

Die Änderungen wurden aber noch nicht in die aktuelle Netzwerk-Konfiguration übernommen. Grundsätzlich empfiehlt sich hier ein Reboot, wenn man per SSH die Konfiguration vorgenommen hat.

sudo reboot

Dann müssen wir sicherstellen, dass sowohl das Ethernet-Interface (eth0) als auch der WLAN-Adapter (wlan0) funktionieren und vorhanden sind.

ip a

Beide Netzwerk-Schnittstellen (eth0 und wlan0) müssen vorhanden sein und eine IPv4-Konfiguration aufweisen.

System aktualisieren

Wenn der Raspberry Pi und der WLAN-Adapter alle Voraussetzungen erfüllen, dann können wir loslegen. Wir beginnen mit der Installation der notwendigen Software. Davor führen wir noch eine Systemaktualisierung durch.

sudo apt-get update
sudo apt-get upgrade

DHCP-Server und DNS-Cache einrichten (dnsmasq)

Als nächstes richten wir den DHCP-Server und DNS-Cache ein. Der DHCP-Server sorgt dafür, dass die WLAN-Clients nach der Anmeldung alle nötigen Informationen für die IP-Konfiguration bekommen. Der DNS-Dienst übernimmt die Namensauflösung. Um beides kümmert sich „dnsmasq“.

sudo apt-get install dnsmasq

Danach müssen wir „dnsmasq“ konfigurieren. Dazu öffnen wir die Datei „/etc/dnsmasq.conf“.

sudo nano /etc/dnsmasq.conf

Dort tragen wir folgende Zeilen als Minimal-Konfiguration ein:

# DHCP-Server aktiv für WLAN-Interface
interface=wlan0
# DHCP-Server nicht aktiv für bestehendes Netzwerk
no-dhcp-interface=eth0

# IPv4-Adressbereich und Lease-Time
dhcp-range=192.168.1.100,192.168.1.150,24h

# DNS
dhcp-option=option:dns-server,192.168.1.1

Hier wird der DHCP-Server und das DNS-Forwarding für die Netzwerk-Schnittstelle „wlan0“ aktiviert und für die Schnittstelle „eth0“ nur DNS, aber kein DHCP serviert. Außerdem wird festgelegt, dass im WLAN die IPv4-Adressen von 192.168.1.100 bis 192.168.1.150 für die Clients vergeben werden und die Adresse des DNS-Servers festgelegt.

DHCP-Server und DNS-Cache prüfen und in Betrieb nehmen (dnsmasq)

Vor der Inbetriebnahme empfiehlt es sich, die Konfiguration zu testen.

dnsmasq --test -C /etc/dnsmasq.conf

Die Syntaxprüfung sollte mit „OK“ erfolgreich sein.

DNSMASQ neu starten:

sudo systemctl restart dnsmasq

DNSMASQ-Status anzeigen:

sudo systemctl status dnsmasq

DNSMASQ beim Systemstart starten:

sudo systemctl enable dnsmasq

Wenn man möchte, dann kann man sich mit einem WLAN-Client erneut am WLAN-AP anmelden und prüfen, ob man eine IPv4-Konfiguration bekommen hat.

WLAN-AP-Host einrichten (hostapd)

Dann installieren wir den Host Access Point Daemon, kurz „hostapd“. Das ist ein WLAN-Authenticator. Er kümmert sich darum, WLAN-Funktionen verschlüsselt anzubieten und die dazu notwendige Authentifizierung der WLAN-Clients vorzunehmen.

sudo apt-get install hostapd

Nach der Installation geht es ans Einrichten von „hostapd“, der den WLAN-Access-Point für den Router betreibt.

Die Konfiguration des WLAN-AP-Hosts:

sudo nano /etc/hostapd/hostapd.conf

Die Datei sollte noch nicht vorhanden und somit leer sein. Wenn die Datei doch vorhanden ist, dann sollte man sie vollständig überschreiben.
In die Datei tragen wir folgende Minimal-Konfiguration ein. Selbstverständlich gibt es noch mehr Parameter, die in diesem Fall keine Rolle spielen.

# WLAN-Router-Betrieb

# Schnittstelle und Treiber
interface=wlan0
#driver=nl80211

# WLAN-Konfiguration
ssid=WLANrouter
channel=1
hw_mode=g
ieee80211n=1
ieee80211d=1
country_code=DE
wmm_enabled=1

# WLAN-Verschlüsselung
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=testtest

Drei Einstellungen sind individuell zu tätigen. Das sind der WLAN-Name („ssid“), der Kanal („channel“), der von 1 bis 13 frei konfiguriert werden kann, wobei man hier nichts ändern muss. Eventuell muss man hier den Kanal wechseln, wenn eine WLAN-Analyse ergibt, dass bereits mehrere andere WLANs diesen Kanal belegen. Prinzipiell können mehrere WLANs den selben Kanal belegen. Das ist besser, als wenn sich die Kanäle überschneiden.

Der dritte Parameter ist das WLAN-Passwort („wpa_passphrase“). Hier sollte man ein Passwort von mindestens 8 Zeichen Länge im Klartext eintragen.

Hinweis zum WLAN-Treiber: Es gibt in dieser Konfigurationsdatei den Parameter „driver“, der auskommentiert (#) ist. Normalerweise wird von „hostapd“ automatisch der richtige Treiber geladen. Es kann natürlich sein, dass das nicht gelingt. Dann muss man hier den richtigen Treiber explizit angeben.

Anschließend speichern und schließen mit Strg + O, Return, Strg + X.

Weil diese Datei das WLAN-Passwort im Klartext enthält, sollte nur der Benutzer „root“ Leserechte auf diese Datei haben.

sudo chmod 600 /etc/hostapd/hostapd.conf

Keine Sorge, mit dem Benutzer „pi“ kann man die Datei jederzeit wieder ändern und speichern.

WLAN-AP-Host-Konfiguration prüfen und in Betrieb nehmen (hostpad)

Bevor wir uns an das weitere Einrichten des WLAN-Routers machen, nehmen wir zuerst den WLAN-Host in Betrieb. Nur wenn das funktioniert, lohnen sich die weiteren Schritte. Wenn der WLAN-Host nicht in Betrieb geht, braucht man die Router-Funktionen gar nicht erst einzurichten.

Zur Inbetriebnahme des WLAN-Hosts starten wir „hostapd“ im Debug-Modus. Dabei werden uns „alle“ Fehlermeldungen angezeigt.

sudo hostapd -dd /etc/hostapd/hostapd.conf

Hinweis: Mit „Strg + C“ kann man die laufende hostapd-Instanz bei Bedarf beenden.

„hostapd“ wird in jedem Fall Meldungen produzieren. Sofern die Konfiguration richtig ist und der WLAN-Adapter mitspielt, läuft die Konfiguration durch. Das Programm wird aber nicht beendet. Das heißt, „hostapd“ kehrt nicht zur Befehlseingabe zurück. Wenn folgende Meldungen erscheinen, dann ist alles im grünen Bereich:

wlan0: interface state COUNTRY_UPDATE->ENABLED
wlan0: AP-ENABLED

Das ist eine gute Gelegenheit den WLAN-AP zu testen. Dazu versucht man mit einem WLAN-Client das WLAN zu finden und sich dort anzumelden.
Dabei kann man in der Kommandozeile schön beobachten, wie sich der WLAN-Client anmeldet (AP-STA-CONNECTED) und auch wieder abmeldet (AP-STA-DISCONNECTED), wenn er die Verbindung zum WLAN beendet.

Hinweis: Wenn man die Konfiguration per SSH vornimmt, dann sollte man das Prüfen des WLAN-AP mit einem anderen Client vornehmen, weil man sich sonst durch das Wechseln des WLANs die SSH-Verbindung abschießt.

Wenn „hostapd“ mit Fehlermeldungen abbricht und zur Kommandoeingabe zurückkehrt, dann stimmt irgendetwas noch nicht. Die Fehler sind allerdings äußerst vielfältig und die dazugehörigen Fehlermeldungen nicht immer eindeutig. Ein beliebter Fehler ist das fehlende „sudo“ beim Aufrufen von „hostapd“.
Weitere Fehlerquellen kann man ausschließen, wenn man sicherstellt, dass der WLAN-Adapter grundsätzlich funktioniert und den AP-Modus beherrscht.
Eine weitere Fehlerquelle ist die verwendete Distribution. Funktionieren wird es auf alle Fälle mit dem Original-Raspbian.

Damit der „hostapd“ als Daemon im Hintergrund startet, muss man dem Daemon noch sagen, wo er seine Konfiguration findet.
Wenn „hostapd“ noch läuft, dann beenden wir es mit „Strg + C“. Dann öffnen wir eine Konfigurationsdatei:

sudo nano /etc/default/hostapd

Darin ergänzen wir folgende Parameter:

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

Anschließend speichern und schließen mit Strg + O, Return, Strg + X.

Den „hostapd“ nimmt man dann mit folgende Kommando in Betrieb.

sudo systemctl start hostapd
sudo systemctl enable hostapd

Den Status des Daemons kann man mit folgendem Kommando prüfen.

sudo systemctl status hostapd

Router- und Firewall-Konfiguration für die Internet-Verbindung

Bis hierhin hat man im Optimalfall eine Verbindung zum WLAN und eine IPv4-Konfiguration erhalten. Was noch nicht funktioniert, ist eine Verbindung ins Internet. Darum kümmern wir uns jetzt.

Hierzu ergänzen wir die Netzwerk-Einstellungen.

sudo nano /etc/network/interfaces

Hier ergänzt man die bereits bestehende Konfiguration um die folgenden Zeilen:

...

# Vorhandene Firewall-Regel löschen
up /sbin/iptables -F
up /sbin/iptables -X
up /sbin/iptables -t nat -F

# Loopback zulassen
up /sbin/iptables -A INPUT -i lo -j ACCEPT
up /sbin/iptables -A OUTPUT -o lo -j ACCEPT

# NAT und Masquerading aktivieren
up /sbin/iptables -A FORWARD -o eth0 -i wlan0 -m conntrack --ctstate NEW -j ACCEPT
up /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
up /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# IP-Forwarding aktivieren
up sysctl -w net.ipv4.ip_forward=1
up sysctl -w net.ipv6.conf.all.forwarding=1

# hostapd und dnsmasq neu starten
up service hostapd restart
up service dnsmasq restart

Hier wird NAT, Masquerading und IP-Forwarding aktiviert. Beides sind wichtige Router-Funktionen.
Dann werden die Dienste „hostapd“ und „dnsmasq“ neu gestartet.

Anschließend muss man die Datei speichern und schließen: Strg + O, Return, Strg + X.

Ein Neustart des Raspberry Pi ist abschließend erforderlich.

sudo reboot

WLAN-, Router- und DHCP/DNS-Funktion prüfen

Wenn der Raspberry Pi neu gestartet ist, sollte man kontrollieren, ob die Dienste „hostapd“ und „dnsmasq“ laufen, bevor man sich am neu eingerichteten WLAN-Router anmeldet.

sudo systemctl status hostapd
ps ax | grep hostapd
sudo systemctl status dnsmasq
ps ax | grep dnsmasq

Wenn die Dienste laufen und die Prozesse für die beiden Dienste angezeigt werden, dann kann man versuchen sich mit einem WLAN-Client am WLAN-Router anzumelden und eine Internet-Verbindung aufzubauen.

Hinweis zum Raspberry Pi als WLAN-Router

Egal welche Lösung, als WLAN-Access-Point ist der Raspberry Pi von seiner Schnittstellenleistung her nicht geeignet. Die Einrichtung ist fehleranfällig, umständlich und unter Umständen nicht sicher. Davon abgesehen ist der Raspberry Pi mit der notwendigen Ausstattung teurer als ein WLAN-Router. Wer ernsthaft und dauerhaft einen WLAN-Access-Point betreiben möchte, der sollte einen Blick auf OpenWRT legen und sich einen günstigen kompatiblen Router dazu besorgen. Preislich, aber auch vom Komfort ist das viel interessanter.