Der Access Point leitet WLAN-Clients über eine kabelgebundene Verbindung (eth0) ins Internet weiter. Drei Dienste arbeiten zusammen:
| Komponente | Aufgabe |
|---|---|
| hostapd | Stellt den WLAN-Hotspot bereit – verwaltet Authentifizierung (WPA2/3) und Beacon-Frames |
| dnsmasq | DHCP-Server (vergibt IP-Adressen an Clients) + DNS-Resolver (leitet Anfragen weiter oder blockt Ads) |
| iptables / nftables | NAT-Masquerading: verbirgt das private 192.168.42.x-Netz hinter der öffentlichen eth0-IP |
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
eth0) für den Internetzugang und eine WLAN-Karte (wlan0) für den Hotspotsudo)iw list | grep -A 10 "Supported interface modes" – es muss AP in der Liste stehen.
# 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
Statt des schwergewichtigen isc-dhcp-server verwenden wir dnsmasq – es vereint DHCP und DNS in einem einzigen, leichtgewichtigen Dienst.
sudo apt update sudo apt install -y hostapd dnsmasq iptables iptables-persistent
sudo systemctl stop hostapd dnsmasq sudo systemctl unmask hostapd
Das Gerät selbst bekommt die IP 192.168.42.1 – das wird der Gateway für alle WLAN-Clients.
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.42.1
netmask 255.255.255.0
Schnittstelle sofort aktivieren (ohne Neustart):
sudo ip addr flush dev wlan0 sudo ip addr add 192.168.42.1/24 dev wlan0 sudo ip link set wlan0 up
dhcpcd: IP stattdessen in /etc/dhcpcd.conf eintragen:interface wlan0 static ip_address=192.168.42.1/24
Die Standardkonfiguration sichern und neu erstellen:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
# 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
# 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:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
hw_mode=a, Kanal z. B. 36 oder 48, zusätzlich ieee80211ac=1 eintragen. Karte muss 5 GHz im AP-Modus unterstützen.
Der Linux-Kernel muss Pakete zwischen wlan0 und eth0 weiterleiten:
net.ipv4.ip_forward=1
# 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
eth0? Mit ip route | grep default das richtige Interface ermitteln und in den iptables-Befehlen ersetzen.
# 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
sudo systemctl status hostapd dnsmasq – beide sollten active (running) zeigen.
ping 192.168.42.1ping 1.1.1.1 und ping google.com# 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
Pi-hole ersetzt dnsmasq als DNS-Resolver und blockiert Werbung & Tracking für alle WLAN-Clients gleichzeitig.
# 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:
wlan0 wählenNach der Installation im Pi-hole-Webinterface (http://pi.hole/admin) konfigurieren:
# Pi-hole-Status prüfen pihole status # Blocklisten manuell aktualisieren pihole -g
| Problem | Lö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' |
sudo journalctl -u hostapd -u dnsmasq --since "5 min ago" -f