Marco Burmeister
private Homepage
Ich habe für mich den Bedarf nach einem Gäste-Zugang zu meinem Netz festgestellt. Da mein Router das nicht beherrscht, habe ich mich für eine Lösung
mittels Raspi Pi3b entschieden. Ich bevorzuge die Linux Version von SuSE, welche auch für Raspi-Computer verfügbar ist (siehe Download Link unten).
Die Installation des Linux erfolgte gemäß Anleitung. Die Dokumentation setzt an dem Punkt ein, an dem alles installiert ist und die Einrichtung des WLANs und des access points
erfolgen soll.
Da ich mit dem eigenen WLAN-Adapter vom Raspi kein WPA2 zu Android oder IPhone Geräten herstellen konnte, habe ich mir den WLAN Adapter Edimax EW-7612UAnv2
(Wi-Fi USB Adapter) gekauft und diesen an einen USB-Port angeschlossen. Er tauchte bei mir als WLAN1 Device im System auf.
Mit diesem Adapter, der auch vom OS automatische erkannt worden war, klappte die Verbindung mit WPA2 sofort.
Es gäbe nun die Möglichkeit, mit dem bereits eingebauten WLAN-Device eine drahtlose Verbindung zum Router aufzubauen. Das habe ich in meinem Ansatz nicht umgesetzt.
In der Anleitung gehe ich von den zwei Netzwerkschnittstellen eth0 (kabelgebunden) und wlan1 (kabellos - Wi-Fi) aus.
Um zu prüfen, ob der WLAN-Adapter fähig ist auch als Access Point zu diesen, gibt es ein Linux Kommando namens iw
.
Als User root
den Befehl iw list
ausführen.
Beispiel-Ausgabe:
Wiphy phy0
[...]
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* monitor
* P2P-client
* P2P-GO
* P2P-device
[...]
Hier sollte nun eine Zeile mit dem Eintrag AP
erscheinen.
Damit das Forwarding von Netzwerk-Paketen funktioniert habe ich in der sysctl.conf
einen entsprechenden Eintrag für IPv4 angelegt.
Als User root
in der sysctl.conf
eintragen:
net.ipv4.ip_forward=1
Danach muss dann noch der folgende Befehl ausgeführt werden:
sysctl -p
grub2 für alte Device-Namen konfigurieren
Mir gefielen die neuen Device-Namen der Art enp0s25... oder enx*MACADDRESS* nicht. Ich wollte wieder eth0 und wlan0 bzw. wlan1 haben.
Die dafür notwendigen Änderungen bedeuten eine Einstellung im Boot-Loader und einen Reboot des Raspi.
Als User root
in der Datei /etc/default/grub in der Zeile mit dem Parameter
GRUB_CMDLINE_LINUX
die folgenden
beiden Einträge ergänzen:
biosdevname=0 net.ifnames=0
Danach muss dann noch der folgende Befehl ausgeführt werden:
grub2-mkconfig -o /boot/grub2/grub.cfg
Im Anschluss ist ein Reboot des Raspi notwendig.
Vor den nächsten Schritten sollte man sich Gedanken über die IP-Range und den Domain Namen machen, die im WLAN genutzt werden soll.
Der Domain Name sollte im Internet keine Verwendung finden. Also zum Beispiel "wlan.beimir" .
Aus der IP Range muss eine Adresse für die WLAN-Schnittstelle verwendet werden.
Zum Beispiel wären 192.168.0.0 bis 192.168.255.255 nutzbar.
Sie dürfen noch nicht vom vorhandenen Router verwendet werden.
Konfigurationsbeispiel:
wlan1-Schnittstelle IP-Adresse | 192.168.5.200 |
IP-Range für das wlan-Netz | 192.168.5.1 - 192.168.5.150 |
Netmask | 255.255.255.0 |
Damit mein Rechner Zugang zum Router erhält benötigt er eine Netzwerkanbindung zu diesem. Ich habe hier einfach das Device eth0 mit DHCP im Netzwerk des Routers
bekannt gemacht.
Als User root
:
Folgende Einstellungen habe ich via Yast im Bereich Netzwerkeinstellungen gemacht:
Menü | Einstellung | Wert |
---|---|---|
Global Options | Network Setup Methode | Wicked Service |
Global Options | IP6 Protocol Settings | Checkbox deaktivieren |
Global Options | Change default Route via DHCP | Checkbox aktivieren |
Global Options | Change default Route via DHCP | Checkbox aktivieren |
Hostname / DNS | Hostname | einnen Hostnamen vergeben |
Hostname / DNS | Name Servers und DNS Search List | IP eines DNS Server im Internet angegeben (Beispiel 9.9.9.9) |
Routing | Enable IPv4 Forwarding | Prüfen Checkbox aktiviert |
Menü | Einstellung | Wert |
---|---|---|
Network Card Setup - General | Activate Device | At Boot Time |
Network Card Setup - General | Firewall Zone | Home Zone |
Network Card Setup - Address | Dynamic Address | DHCP |
Nun folgt die Einrichtung der WLAN-Schnittstelle. Das habe ich ebenfalls via Yast durchgeführt.
Als User root
:
Folgende Einstellungen habe ich via Yast im Bereich Netzwerkeinstellungen im Menü Overview für die Schnittstelle wlan1 gemacht.
Menü | Einstellung | Wert |
---|---|---|
Network Card Setup - General | Activate Device | At Boot Time |
Network Card Setup - General | Firewall Zone | External Zone |
Network Card Setup - Address | Statically Assigned IP Address | Checkbox markieren |
Network Card Setup - Address | IP Address | IP Addresse vergeben (192.168.5.200) |
Network Card Setup - Address | Subnet Mask | 255.255.255.0 bzw. /24 |
Network Card Setup - Address | Hostname | meinap |
Network Card Setup - Wireless Device Settings | Operating Mode | Managed |
Network Card Setup - Wireless Device Settings | Network Name ESSID | Name vergeben (Beispiel: myap) |
Network Card Setup - Wireless Device Settings | Authentication Mode | WPA-PSK |
Network Card Setup - Wireless Device Settings | Passphrase | Passwort vergeben |
Die folgenden Konfigurationsschritte sind als User root
auszuführen!
An dieser Stelle muss sichergestellt sein, dass die Software auch vorhanden ist. Hierfür die beiden Programme hostadp und dnsmasq installieren.
zypper install hostapd
zypper install dnsmasq
/etc/dnsmasq.conf
die folgenden Einträge einpflegen:
domain-needed
bogus-priv
filterwin2k
interface=wlan1
no-dhcp-interface=eth0
bind-interfaces
domain=wlan.beimir
dhcp-range=192.168.5.1,192.168.5.150,12h
dhcp-option=option:dns-server,192.168.5.200
conf-dir=/etc/dnsmasq.d/,*.conf
Update vom 29.03.2020 - Ich musste die Einstellung zum Thema Netzwerk Modus von bind-interfaces
auf bind-dynamic
umstellen.
bind-dynamic
/etc/hostapd.conf
die folgenden Einträge einpflegen:
(Vorher die SSID (Wert: [ssid]) auf zum Beispiel myap setzen und eine Passphrase (Wert: [passphrase]) zur Anmeldung der Clients vergeben.)
interface=wlan1
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=[ssid]
country_code=DE
ieee80211d=1
hw_mode=g
channel=1
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
accept_mac_file=/etc/hostapd.accept
deny_mac_file=/etc/hostapd.deny
auth_algs=1
ignore_broadcast_ssid=0
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
ap_max_inactivity=300
ieee80211n=1
ieee80211ac=1
eapol_key_index_workaround=0
eap_server=0
own_ip_addr=127.0.0.1
wpa=2
wpa_passphrase=[passphrase]
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP
wpa_group_rekey=600
wpa_gmk_rekey=86400
wpa_ptk_rekey=600
rsn_preauth=1
rsn_preauth_interfaces=eth0
dnsmasq --test -C /etc/dnsmasq.conf
Die Syntaxprüfung sollte mit "OK" enden.
systemctl restart dnsmasq
DNSMASQ-Status anzeigen:
systemctl status dnsmasq
DNSMASQ beim Systemstart starten:
systemctl enable dnsmasq
hostapd -dd /etc/hostapd.conf
Wenn die folgenden zwei Zeilen erscheinen, sollte die Konfiguration korrekt sein:
wlan1: interface state COUNTRY_UPDATE->ENABLED
wlan1: AP-ENABLED
Wenn alles korrekt ist, sollte der Daemon normal gestartet werden. Hierfür den vorherigen Aufruf mit STRG-C beenden.
systemctl start hostapd
HOSTAPD-Status anzeigen:
systemctl status hostapd
HOSTAPD beim Systemstart starten:
systemctl enable hostapd
Ich verwende firewalld. Diese Firewall lässt sich auch gut via Yast verwalten.
Für die Netzwerkschnittstelle eth0 hatte ich als Firewall Zone die "Home Zone" definiert (s.o.). Hier habe ich keine Änderungen in der Firewall vorgenommen.
Da diese Schnittstelle dem eigenen Netz zugewandt ist, vertraue ich dieser.
Bei der Schnittstelle wlan1, die in der externen Zone zugewiesen ist, sind nur die Dienste DNS und DHCP freigegeben.
Ich brauche dann noch eine Weiterleitung der Datenpakete von wlan1 zu eth0 und zurück.
Hierfür gibt es zwei Varianten. Die Variante 1 ist für den Einsatz mit firewalld gedacht, während die Variante 2 im Zusammenhang mit SuSEFirewall2 bzw.
allgemein iptables genutzt werden kann.
Ich habe die für firewalld genommen (Variante 1).
Nach dem Absetzen der Variante als User root
muss im Firewall-GUI Tool oder mit Kommandozeilenbefehl die Runtime-Konfiguration fest runtergeschrieben werden.
Variante 1 :
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 10 -o eth0 -j MASQUERADE
firewall-cmd --direct --add-rule ipv4 filter FORWARD 10 -i wlan1 -o eth0 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 10 -i wlan1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
firewall-cmd --direct --add-rule ipv4 \
nat POSTROUTING 10 -o eth0 -j MASQUERADE
firewall-cmd --direct --add-rule ipv4 \
filter FORWARD 10 -i wlan1 -o eth0 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 \
filter FORWARD 10 -i wlan1 -o eth0 -m state \
--state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o eth0 -i wlan1 -s [Netzwerk des Routers]/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -o eth0 -i wlan1 -s \
[Netzwerk des Routers]/24 -m conntrack \
--ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate \
ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 \
-j MASQUERADE
cd /usr/lib/systemd/system
vi dnsmasq.service
Hier muss der Eintrag "After=" angepasst werden (vorher network.target)
After=hostapd.service
wpa_supplicant
Dienst läuft
systemctl status wpa_supplicant
WPA Supplicant stoppen:
systemctl stop wpa_supplicant
WPA Supplicant auch beim System-Start deaktivieren:
systemctl disable wpa_supplicant
ht_capab
zu tollen Effekten führen.
Bei mir war dadurch der access point sichtbar, ich konnte mich aber nicht verbinden.systemctl status hostapd
bringt in dem Fall u.a. die folgende Ausgabe "Driver does not support configured HT capability"
.
Der dort gemeldeten Modus sollte dann aus der Konfiguration entfernt oder angepasst werden.
/etc/hostapd.conf
auskommentiert und danach hostapd mit
systemctl restart hostapd
neu gestartet werden.
/sys/module/usbcore/parameters/autosuspend
steht normalerweise der Wert "2
". Das zeigt an, dass USB-Geräte
automatisch nach einer gewissen Zeit suspended werden.
echo -1 > /sys/module/usbcore/parameters/autosuspend
root
anmelden/etc/modprobe.d
99-usbcore.conf
anlegen99-usbcore.conf
erhält den folgenden Inhalt
options usbcore autosuspend=-1
mkinitrd
ausführen, um ein initiales Image für den Linux Kernel für den Systemstart zu erstelleniwconfig <device> power off
iwconfig wlan0 power off
crontab
-Eintrag erzeugt werden.
Ich hatte mich mit einer Alternative der WLAN-Verbindung als Access-Point beschäftigt, die dann einen WLAN-Stick nutzt.
Bei der Recherche tat ich mich schwer einen WLAN-Stick zu finden, der nicht so teuer ist, der aber auch Soft AP beherrscht.
Ferner sollte er unter Linux unterstützt werden. Linux in Kombination mit Soft AP ist eine schwierige Kombination.
Schließlich bin ich beim BrosTrend AC650
gelandet.
Der Treiber ist nicht im Linux-Kernel enthalten. Aber vom Hersteller wird ein Installationsscript bereitgestellt, welches sich das OS
auf dem Rechner ansieht und dann entsprechend die Installation des Treibers vornimmt.
Der WLAN-Stick Panda Wireless AC600 Dual Band
ist auch eine gute Lösung.
Bei diesem Stick entfällt das Generieren der Treiber.
Hinweis:
Für die Richtigkeit der Daten übernehme ich keine Gewähr!
Für den Inhalt von Internet-Seiten, auf die von dieser Seite verwiesen wird, übernehme ich keine Verantwortung!
Marco Burmeister, Copyright © 2018 - 2023
zuletzt geändert: 2023-08-20
URL: https://www.marco-burmeister.de/helferlein/de_linux_wlan_access_point_hostapd_dnsmasq.html
Impressum