WLAN Access Point
Linux Hotspot mit hostapd + dnsmasq einrichten
← Projekte
Inhalt
  1. Architektur & Komponenten
  2. Voraussetzungen
  3. Pakete installieren
  4. Statische IP für wlan0
  5. dnsmasq (DHCP + DNS)
  6. hostapd konfigurieren
  7. IP-Forwarding & NAT
  8. Dienste aktivieren
  9. Verbindung testen
  10. Optional: Pi-hole Adblocker
  11. Troubleshooting
⬡
Architektur & Komponenten

Der Access Point leitet WLAN-Clients über eine kabelgebundene Verbindung (eth0) ins Internet weiter. Drei Dienste arbeiten zusammen:

KomponenteAufgabe
hostapdStellt den WLAN-Hotspot bereit – verwaltet Authentifizierung (WPA2/3) und Beacon-Frames
dnsmasqDHCP-Server (vergibt IP-Adressen an Clients) + DNS-Resolver (leitet Anfragen weiter oder blockt Ads)
iptables / nftablesNAT-Masquerading: verbirgt das private 192.168.42.x-Netz hinter der öffentlichen eth0-IP
Netzwerk-Topologie
Internet
    │
    │  (WAN / eth0)
┌────────────────────────────────────────┐
│          Linux / Raspberry Pi          │
│                                        │
│  eth0 ──── iptables NAT ──── wlan0     │
│                          192.168.42.1  │
│           hostapd + dnsmasq            │
└────────────────────────────────────────┘
                          │  (AP / Hotspot)
          ┌───────────────┼───────────────┐
       Client 1        Client 2        Client 3
    192.168.42.10   192.168.42.11   192.168.42.12
0
Voraussetzungen
ℹ AP-Modus prüfen: iw list | grep -A 10 "Supported interface modes" – es muss AP in der Liste stehen.
bash
# Schnittstellen anzeigen
ip link show

# AP-Modus-Unterstützung prüfen
iw list | grep -A 10 "Supported interface modes"

# NetworkManager ggf. für wlan0 deaktivieren (damit hostapd übernehmen kann)
sudo nmcli device set wlan0 managed no
Installation & Konfiguration
1
Pakete installieren

Statt des schwergewichtigen isc-dhcp-server verwenden wir dnsmasq – es vereint DHCP und DNS in einem einzigen, leichtgewichtigen Dienst.

bash
sudo apt update
sudo apt install -y hostapd dnsmasq iptables iptables-persistent
✓ Dienste direkt nach der Installation stoppen, damit wir erst konfigurieren und dann starten:
bash
sudo systemctl stop hostapd dnsmasq
sudo systemctl unmask hostapd
2
Statische IP für wlan0 vergeben

Das Gerät selbst bekommt die IP 192.168.42.1 – das wird der Gateway für alle WLAN-Clients.

/etc/network/interfaces.d/wlan0
allow-hotplug wlan0
iface wlan0 inet static
    address 192.168.42.1
    netmask 255.255.255.0

Schnittstelle sofort aktivieren (ohne Neustart):

bash
sudo ip addr flush dev wlan0
sudo ip addr add 192.168.42.1/24 dev wlan0
sudo ip link set wlan0 up
ℹ Raspberry Pi OS und Debian-Systeme mit dhcpcd: IP stattdessen in /etc/dhcpcd.conf eintragen:
interface wlan0  static ip_address=192.168.42.1/24
3
dnsmasq – DHCP & DNS konfigurieren

Die Standardkonfiguration sichern und neu erstellen:

bash
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
/etc/dnsmasq.conf
# Nur auf wlan0 hören
interface=wlan0
bind-interfaces

# DHCP-Pool: 40 Adressen, 24h Lease
dhcp-range=192.168.42.10,192.168.42.50,255.255.255.0,24h

# Gateway und DNS für Clients
dhcp-option=option:router,192.168.42.1
dhcp-option=option:dns-server,192.168.42.1

# Lokale Domain
domain=local
local=/local/

# Upstream-DNS (Cloudflare + Fallback)
server=1.1.1.1
server=9.9.9.9

# Keine /etc/hosts-Einträge ins DNS leaken
no-hosts
expand-hosts
4
hostapd – Access Point konfigurieren
⚠ SSID und Passwort unbedingt ändern – die Standardwerte sind nicht sicher.
/etc/hostapd/hostapd.conf
# Netzwerkkarte (ggf. anpassen: wlan1, wlp2s0, …)
interface=wlan0
driver=nl80211

# SSID und Land
ssid=MeinHotspot                # ← ÄNDERN
country_code=DE               # ← Länderkürzel anpassen

# 2,4 GHz 802.11n (kompatibel mit allen Geräten)
hw_mode=g
channel=6                     # Kanal 1, 6 oder 11 empfohlen
ieee80211n=1
ieee80211d=1
wmm_enabled=1

# WPA2 – sicher und kompatibel
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=SicheresPasswort123!  # ← ÄNDERN (mind. 12 Zeichen)
wpa_group_rekey=86400

# SSID sichtbar lassen (0 = sichtbar)
ignore_broadcast_ssid=0
macaddr_acl=0

hostapd auf diese Konfigurationsdatei verweisen:

/etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"
✓ 5-GHz-Hotspot (802.11ac): hw_mode=a, Kanal z. B. 36 oder 48, zusätzlich ieee80211ac=1 eintragen. Karte muss 5 GHz im AP-Modus unterstützen.
5
IP-Forwarding & NAT aktivieren

Der Linux-Kernel muss Pakete zwischen wlan0 und eth0 weiterleiten:

/etc/sysctl.conf – Zeile einfügen oder entkommentieren
net.ipv4.ip_forward=1
bash
# Sofort aktivieren (ohne Neustart)
sudo sysctl -w net.ipv4.ip_forward=1

# NAT-Masquerading: Clients nach außen über eth0 verstecken
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Forwarding-Regeln
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Regeln dauerhaft speichern (iptables-persistent)
sudo netfilter-persistent save
ℹ Heißt das Kabel-Interface nicht eth0? Mit ip route | grep default das richtige Interface ermitteln und in den iptables-Befehlen ersetzen.
6
Dienste aktivieren & starten
bash
# hostapd testen (zeigt Fehler direkt im Terminal; Strg+C zum Beenden)
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

# Wenn kein Fehler: Dienste dauerhaft einrichten
sudo systemctl enable --now hostapd
sudo systemctl enable --now dnsmasq
✓ Status prüfen: sudo systemctl status hostapd dnsmasq – beide sollten active (running) zeigen.
Verifizierung
7
Verbindung testen
bash
# Verbundene Clients anzeigen (auf dem AP-System)
iw dev wlan0 station dump

# Vergebene DHCP-Leases anzeigen
cat /var/lib/misc/dnsmasq.leases

# Aktive iptables-NAT-Regeln prüfen
sudo iptables -t nat -L -n -v
Optional
◆
Pi-hole – Netzwerkweiter Adblocker

Pi-hole ersetzt dnsmasq als DNS-Resolver und blockiert Werbung & Tracking für alle WLAN-Clients gleichzeitig.

⚠ Pi-hole bringt einen eigenen DHCP-Server mit. Entweder den Pi-hole-DHCP aktivieren oder dnsmasq für DHCP behalten und Pi-hole nur als DNS nutzen – nicht beides parallel.
bash
# dnsmasq stoppen, damit Pi-hole Port 53 übernehmen kann
sudo systemctl stop dnsmasq
sudo systemctl disable dnsmasq

# Pi-hole installieren
curl -sSL https://install.pi-hole.net | bash

Beim Installer:

Nach der Installation im Pi-hole-Webinterface (http://pi.hole/admin) konfigurieren:

bash
# Pi-hole-Status prüfen
pihole status

# Blocklisten manuell aktualisieren
pihole -g
Fehlersuche
!
Troubleshooting
ProblemLösung
SSID erscheint nicht sudo journalctl -u hostapd -n 50 – häufige Ursachen: falsches Interface, fehlender Treiber, AP-Modus nicht unterstützt, RF-Kill aktiv (rfkill unblock wifi)
hostapd startet nicht Testlauf im Vordergrund: sudo /usr/sbin/hostapd -dd /etc/hostapd/hostapd.conf – Fehler werden direkt ausgegeben
Client bekommt keine IP sudo journalctl -u dnsmasq -n 30 – Port 53/67 belegt? sudo ss -ulnp | grep ':67\|:53'
Kein Internet auf Clients IP-Forwarding prüfen: sysctl net.ipv4.ip_forward muss 1 sein. NAT-Regel prüfen: sudo iptables -t nat -L -n. Interface-Name in POSTROUTING korrekt?
WLAN-Karte beschäftigt (Device busy) NetworkManager gibt wlan0 nicht frei: sudo nmcli device set wlan0 managed no oder Eintrag in /etc/NetworkManager/conf.d/10-ap.conf: [keyfile] unmanaged-devices=interface-name:wlan0
Schlechte Reichweite / Interferenz Kanal wechseln (1, 6 oder 11 für 2,4 GHz) oder auf 5 GHz wechseln wenn unterstützt. Belegung prüfen: sudo iwlist wlan0 scan | grep -E 'ESSID|Channel'
bash – Logs auf einen Blick
sudo journalctl -u hostapd -u dnsmasq --since "5 min ago" -f