Wireless Access-Point mit Hostapd aus dem Git-Repository

Changelog

  • 15. Juli 2014 – Einige Fixes

Vorwort und Umgebung

In diesem Artikel möchte ich die Installation und Konfiguration eines Wireless Access-Points mit Hostapd aus dem Git-Repository unter Verwendung von Debian, Ubuntu und weiteren Derivaten beschreiben.
Als optional erwähne ich die automatische Auswahl des Kanals, welche sich allerdings noch in einem experimentellen Stadium befindet und zudem nur mit bestimmten Chipsets funktionieren kann, jedoch nicht muss.
In dem beschriebenen Fall richte ich einen n-Standard Access-Point via „ath9k_htc“-Gerät ein. Für ac-Netze habe ich entsprechende Kommentare eingefügt.

Hinweis: Die Installation und Konfiguration von NAT, DHCP- und DNS-Forwarder erwähne ich hier nicht. Ich persönlich verwende eine Kombination aus „ISC-DHCP-Server“, „DNSMasq“, „Resolvconf“ und IP Masquerading.

Mein Netzwerk besteht aus 3 physischen Netzwerkadaptern:

auto lo eth0 eth1 wlan0 br0

iface lo inet loopback
iface eth0 inet dhcp
iface eth1 inet manual
iface wlan0 inet manual
iface br0 inet static
    address 192.168.1.254
    netmask 255.255.255.0
    broadcast 192.168.1.255
    bridge_ports eth1 wlan0
    network 192.168.1.0

Kurze Erläuterung:

  • eth0: Öffentlicher Zugang via DHCP vom Cable-Modem
  • eth1: via br0
  • wlan0: via br0
  • br0: Brücke aus eth0 und wlan0, um jeweils verkabelte- und kabellose Clients anzubinden.
Die Verwendung einer Brücke setzt das Paket „bridge-utils“ voraus!

Installation und Konfiguration von Hostapd

Zuerst die Abhängigkeiten installieren:

apt-get build-dep hostapd
apt-get install git iw crda libnl-genl-3-200 libnl-3-200 libssl1.0.0 libssl-dev

Zur Erklärung der Abhängigkeiten, habe ich eine schöne Darstellung zur Arbeitsweise des Hostapd gefunden:
Hostapd Arbeitsweise

Aus dem Git-Repository die Quellen klonen und das Beispiel der Build-Konfiguration kopieren:

mkdir ~/build && cd ~/build
git clone git://w1.fi/srv/git/hostap.git
cd ~/build/hostap/hostapd
cp defconfig .config

Die kopierte Build-Konfiguration anpassen:

nano .config

Folgende Zeilen suchen und ändern. Die erste Option für WLAN n-Standard aktivieren, ac-Standard bei Bedarf.
Hinweis 1: „CONFIG_ACS“ wählt automatisch den günstigsten Channel für das Netz. Allerdings funktioniert dies zur Zeit nur mit ath9k-, ath5k- und ath10k-Chipsets, und selbst mit diesen nur experimentell!
Hinweis 2: Den Schalter „CONFIG_LIBNL32“ nur verwenden, wenn ein System mit einer neueren nl-Lib verwendet wird. Das trifft etwa auf Debian Jessie zu. Ansonsten droht folgender Fehler:

../src/drivers/driver_nl80211.c:19:31: fatal error: netlink/genl/genl.h: No such file or directory
CONFIG_IEEE80211N=y
CONFIG_IEEE80211AC=y
CONFIG_ACS=y # ath9k, ath5k or ath10k may work only! 
CONFIG_LIBNL32=y # only if libnl is >=3.2!

Bauen und nach „/usr/local“ installieren…

make && sudo make install

Es folgt die Konfigurationsdatei für den Hostapd:

sudo nano /etc/hostapd.conf

Untenstehendes einfügen und anpassen. Ich habe einige Optionen kommentiert:

### Bitfield -1, um alle Module zu loggen
logger_syslog=-1
### Log-Level
###  0 = verbose debugging
###  1 = debugging
###  2 = informational messages
###  3 = notification
###  4 = warning
logger_syslog_level=3
### Socket für Interaktion mit Hostapd via CLI etc.
ctrl_interface=/var/run/hostapd
### Der Name des Wifi-Netzes
ssid=MeinWifi
### Channel für das Netz
### ACHTUNG: "0" oder "acs_survey" für automatische Konfiguration. Hinweis oben beachten!
channel=1
### IEEE 802.11n kann nur mit "g" benutzt werden. "n" ist kein eigener Modus!
hw_mode=g
### Der Beacon-Frame teilt u.A. mit, dass "wir" ein AP sind. "100" ist ein guter Standard-Wert. 
### Höhere Werte bringen praktisch kaum/keine Verbesserung der Leistung, können aber zu Fehlern führen.
beacon_int=100
dtim_period=2
### Anzahl der maximalen Clients/Stationen
max_num_sta=20
### "rts_threshold" und "fragm_threshold" sind durch diese Werte deaktiviert.
rts_threshold=2347
fragm_threshold=2346
### Falls macaddr_acl=1, werden nur MAC-Adressen der "accept_mac_file" akzeptiert.  
macaddr_acl=0
### Untereinander aufgelistete MAC-Adressen im Format 00:11:22:33:44:55, falls macaddr_acl=1
#accept_mac_file=/etc/hostapd/accept
auth_algs=1
### WPA2 Konfiguration
wpa=2
wpa_passphrase=meingeheimespasswort
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_pairwise=TKIP CCMP
wpa_group_rekey=600
wpa_ptk_rekey=600
wpa_gmk_rekey=86400
### Physisches Wifi-Gerät und Netzwerkbrücke
interface=wlan0
bridge=br0
### Der Treiber für mac80211 Wifi-Geräte unter Linux
driver=nl80211
ieee80211n=1
### Falls unterstützt, ac-Standard aktivieren:
#ieee80211ac=1
wmm_enabled=1
# Netzwerknamen NICHT verstekcen
ignore_broadcast_ssid=0
# Regionale Einstellungen
country_code=DE
ieee80211d=1

Das Init-Script für Hostapd erstellen:

sudo nano /etc/init.d/hostapd:

Der Inhalt muss nicht weiter angepasst werden. Ich habe das Debian-eigene Init-Script etwas vereinfacht:

#!/bin/bash

### BEGIN INIT INFO
# Provides:             hostapd
# Required-Start:       $remote_fs
# Required-Stop:        $remote_fs
# Should-Start:         $network
# Should-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Advanced IEEE 802.11 management daemon
# Description:          Userspace IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP
#                       Authenticator
### END INIT INFO

DAEMON_SBIN=/usr/local/bin/hostapd
DAEMON_CONF=/etc/hostapd.conf
NAME=hostapd
DESC="advanced IEEE 802.11 management"
PIDFILE=/var/run/hostapd.pid

[ -x "$DAEMON_SBIN" ] || exit 0
[ -n "$DAEMON_CONF" ] || exit 0

DAEMON_OPTS="-B -P $PIDFILE $DAEMON_OPTS $DAEMON_CONF"

. /lib/lsb/init-functions

case "$1" in
  start)
        log_daemon_msg "Starting $DESC" "$NAME"
        start-stop-daemon --start --oknodo --quiet --exec "$DAEMON_SBIN" \
                --pidfile "$PIDFILE" -- $DAEMON_OPTS >/dev/null
        log_end_msg "$?"
        ;;
  stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        start-stop-daemon --stop --oknodo --quiet --exec "$DAEMON_SBIN" \
                --pidfile "$PIDFILE"
        log_end_msg "$?"
        ;;
  reload)
        log_daemon_msg "Reloading $DESC" "$NAME"
        start-stop-daemon --stop --signal HUP --exec "$DAEMON_SBIN" \
                --pidfile "$PIDFILE"
        log_end_msg "$?"
        ;;
  restart|force-reload)
        $0 stop
        sleep 8
        $0 start
        ;;
  status)
        status_of_proc "$DAEMON_SBIN" "$NAME"
        exit $?
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload|reload|status}" >&2
        exit 1
        ;;
esac

exit 0

Der Dienst kann sofort installiert-, jedoch noch nicht gestartet werden:

sudo update-rc.d hostapd defaults

CRDA passe ich zum Schluss noch meinen regionalen Vorgaben an:
/etc/default/crda:

...
REGDOMAIN=DE
...

Hostapd testen und starten

Ich empfehle den Hostapd vorab einmal im Debug-Modus zu starten:

sudo hostapd -dd /etc/hostapd.conf

Treten keine Fehler auf, kann das Programm mit STRG+C abgebrochen- und der Dienst anschließend gestartet werden:

sudo service hostapd start

Als kleiner Hinweis noch folgender Artikel, falls für euch relevant: Multicast über Netzwerkbrücke

3 Antworten auf “Wireless Access-Point mit Hostapd aus dem Git-Repository

Schreibe einen Kommentar

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