WLAN-Access-Point mit hostapd und USB-Stick

Aus Alexander's Wiki

Vorarbeit

  apt-get install iw hostapd dnsmasq wireless-tools

Vorhanden sein muss eine Kabelnetzwerkkarte (eth0), sowie ein WLAN-Adapter (wlan0) der den AP-Modus unterstützt. Ob der AP-Modus unterstützt wird, kann mit folgendem Befehl abgefragt werden:

  iw list | grep AP$

Wenn die Ausgabe folgendermaßen aussieht, ist alle ok:

  * AP

Der WLAN-Adapter wird vom Modul rt2800usb angesteuert und benötigt die Firmware rt2870.bin aus dem Paket firmware-ralink. Ist die Firmware installiert, funktioniert der USB-Stick out-of-the-box und beherrscht auch den AP-Modus. Hier die genauen Informationen vom USB-System über den Stick:

 > lsusb
 Bus 004 Device 002: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter

Der Accesspoint wird mit der Software hostapd betrieben; für die Verteilung der IP-Adressen an die WLAN-Clients ist dnsmasq zuständig.

DHCP-Server

Erstellen einer neuen Konfigurationsdatei. Ein Backup der Alten kann nicht schaden (mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig).

/etc/dnsmasq.conf

  interface=wlan0
  no-dhcp-interface=eth0
  dhcp-range=interface:wlan0,192.168.99.33,192.168.99.99,infinite

Der erste Eintrag legt wlan0 als DHCP-Interface fest, der zweite schliesst das Kabelnetzwerk eth0 vom DHCP aus. Der dritte Eintrag legt die für DHCP verfügbaren IP-Adressen fest.

hostapd

Editieren der Datei /etc/init.d/hostapd. Dort muss ein Verweis auf die Konfigurationsdatei hinterlegt/angepasst werden:

  DAEMON_CONF=/etc/hostapd.conf

/etc/hostapd.conf

  ## Log-Einstellungen
  # "-1" = alle Module loggen, "3" z.B. loggt nur WPA
  logger_syslog=-1
  # "2" = informative Meldungen, "1" = Debuggen, "0" = echt alles loggen
  logger_syslog_level=2
  # wie oben, nur Ausgabe auf Konsole, wenn Programm nicht im Hintergrund läuft
  logger_stdout=-1
  # wie oben
  logger_stdout_level=2

  ## Statusinformationen
  # temporäre Datei für Statusinformationen
  dump_file=/tmp/hostapd
  # Verzeichnis für Socket für hostapd_cli und andere externe Kontrollprogramme
  ctrl_interface=/var/run/hostapd

  ## SSID und Kanal
  # Name des Accesspoints
  ssid=Hagleitner_Demo
  # Kanal
  channel=7

  ## Wireless Modus
  # g = IEEE 802.11g, Default: IEEE 802.11b
  hw_mode=g

  ## Intervall für Rundspruch
  # Rundspruch (Beacon) "Ich bin ein AP!" in Millisekunden (1 - 65535)
  beacon_int=100

  ## DTIM-Ankündigung
  # Ein DTIM ist eine Art Weckruf an die Stationen: "Gleich wird es interessant!".
  # Es reicht jedes zweite Beacon mit dem DTIM zu bestücken.
  dtim_period=2				

  ## Maximale Anzahl an Clients
  # Limit: 2007, man sollte aber realistisch bleiben...
  max_num_sta=20

  ## RTS/FRAGM abschalten
  # Das übernimmt das WLAN-Modul, ja, 2347=off
  rts_threshold=2347
  # und 2346=off
  fragm_threshold=2346

  ## MAC-basierte Authentifizierung
  # 0 = akzeptieren, wenn nicht explicit abgelehnt (deny_mac_file)
  # 1 = ablehnen, wenn nicht explicit erlaubt (accept_mac_file)
  # 2 = RADIUS-Server verwenden, nach Durchsicht der obigen Listen
  # Zum Sperren/Erlauben diese Dateien anlegen und bestücken:
  # accept_mac_file=/etc/hostapd.accept
  # deny_mac_file=/etc/hostapd.deny
  macaddr_acl=0

  ## Authentifizierung
  # 1 = Open System, 2= Shared Key --> WEP
  # 3 = beides
  auth_algs=1

  ## WPA/WPA2
  # 1 = WPA, 2 = WPA2, 3 = beides
  wpa=3
  # WLAN-Key (Pre-shared Key)
  wpa_passphrase=mysecretpassphrase
  # Pre-shared-Key Management
  wpa_key_mgmt=WPA-PSK
  # WPA2 Verschlüsselung anbieten
  rsn_pairwise=CCMP
  # WPA Verschlüsselung anbieten
  wpa_pairwise=TKIP CCMP

  ## Schlüsselerneuerung
  # Schlüsselteile nach 10 Min. erneuern
  wpa_group_rekey=600
  # s.o.
  wpa_ptk_rekey=600
  # erneuern nach 24 Std.
  wpa_gmk_rekey=86400

  ## Gerät und Treiber
  # USB-Stick einbinden
  interface=wlan0
  # An Netlink-Interface übergeben
  driver=nl80211
  # SSID nicht "verheimlichen"
  # 1 = Sende leere SSID und ignoriere Anfragen die die SSID nicht enthalten
  # 2 = Sende leere SSID, aber setze die Länge nicht auf 0, sondern genau auf die Länge der SSID,
  # einige Clients brauchen das.
  ignore_broadcast_ssid=0	

  ## Ländercode
  # Ländercode setzen
  country_code=DE
  # Ländercode aktivieren, "0" = aus (default)
  ieee80211d=1

Schnittstellen

  • driver=hostap für Geräte mit Prism2/2.5/3 Chipsatz.
  • driver=madwifi für Geräte mit Atheros (ar521x) Chipsatz.
  • driver=nl80211 für Geräte die mit einem mac80211-basierten Treiber funktionieren und den AP-Modus unterstützen.

Netzwerk-Konfiguration

/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
  address 10.200.118.7 
  netmask 255.255.0.0
  gateway 10.200.0.1

# WLAN mit fester Adresse für hostapd
auto wlan0
       iface wlan0 inet static
	address 192.168.99.1
	netmask 255.255.255.0
	broadcast 192.168.99.255

# Firewall zurücksetzen, Tabellen leeren
	up /sbin/iptables -F
	up /sbin/iptables -X
	up /sbin/iptables -t nat -F

# Kabelnetzwerk maskieren, Port-Forwarding sowie Nat aktivieren
	up iptables -A FORWARD -o eth0 -i wlan0 -s 10.200.0.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 (neu) starten
	up service hostapd restart
	up service dnsmasq restart

auto wlan0:1
iface wlan0:1 inet dhcp
  wpa-ssid Hagleitner-ZyXEL
  wpa-psk mysecretpassword

Startup & Debugging

  service networking restart

hostapd debuggen

  hostapd -dd /etc/hostapd.conf