Linux WLAN access point mit hostapd und dnsmasq auf SuSE Leap 15

Marco Burmeister

  private Homepage



Linux WLAN access point mit hostapd und dnsmasq auf SuSE Leap 15

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.




top Kernel-Parameter einstellen

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 muß dann noch der folgende Befehl ausgeführt werden:

 sysctl -p
 		

top 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 muß dann noch der folgende Befehl ausgeführt werden:

 grub2-mkconfig -o /boot/grub2/grub.cfg
    
Im Anschluß ist ein Reboot des Raspi notwendig.

top Netzwerk IP Adressen

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 muß 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-Adresse192.168.5.200
IP-Range für das wlan-Netz192.168.5.1 - 192.168.5.150
Netmask255.255.255.0

top Lokales Netzwerk einrichten

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üEinstellungWert
Global OptionsNetwork Setup MethodeWicked Service
Global OptionsIP6 Protocol SettingsCheckbox deaktivieren
Global OptionsChange default Route via DHCPCheckbox aktivieren
Global OptionsChange default Route via DHCPCheckbox aktivieren
Hostname / DNSHostnameeinnen Hostnamen vergeben
Hostname / DNSName Servers und DNS Search ListIP eines DNS Server im Internet angegeben (Beispiel 9.9.9.9)
RoutingEnable IPv4 ForwardingPrüfen Checkbox aktiviert
Danach im Menü Overview für die Schnittstelle eth0 folgendes prüfen.
MenüEinstellungWert
Network Card Setup - GeneralActivate DeviceAt Boot Time
Network Card Setup - GeneralFirewall ZoneHome Zone
Network Card Setup - AddressDynamic AddressDHCP

top WLAN einrichten

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ü die Schnittstelle wlan1 gemacht.
MenüEinstellungWert
Network Card Setup - GeneralActivate DeviceAt Boot Time
Network Card Setup - GeneralFirewall ZoneExternal Zone
Network Card Setup - AddressStatically Assigned IP AddressCheckbox markieren
Network Card Setup - AddressIP AddressIP Addresse vergeben (192.168.5.200)
Network Card Setup - AddressSubnet Mask255.255.255.0 bzw. /24
Network Card Setup - AddressHostnamemeinap
Network Card Setup - Wireless Device SettingsOperating ModeManaged
Network Card Setup - Wireless Device SettingsNetwork Name ESSIDName vergeben (Beispiel: myap)
Network Card Setup - Wireless Device SettingsAuthentication ModeWPA-PSK
Network Card Setup - Wireless Device SettingsPassphrasePasswort vergeben

top Access Point einrichten

Die folgenden Konfigurationsschritte sind als User root auszuführen!
An dieser Stelle muß sichergestellt sein, daß die Software auch vorhanden ist. Hierfür die beiden Programme hostadp und dnsmasq installieren.


 zypper install hostapd
 zypper install dnsmasq

Danach geht es mit der Konfiguration weiter.

Einrichtung vom DHCP / DNS Server:
In der Datei /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
		

Einrichten des Access Point:
In der Datei /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


Wie teste ich nun die Einstellungen ?

Komponente DNS und DHCP (dnsmasq):
Syntaxprüfung:

 dnsmasq --test -C /etc/dnsmasq.conf
		
Die Syntaxprüfung sollte mit "OK" enden.

DNSMASQ neu starten:

 systemctl restart dnsmasq
		
DNSMASQ-Status anzeigen:

 systemctl status dnsmasq
		
DNSMASQ beim Systemstart starten:

 systemctl enable dnsmasq
		


Komponente Access Point (hostapd):
Access Point im Debug-Modus starten (am Bildschirm erscheinen die Ausgaben und der Prompt kommt nicht zurück):

 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.

HOSTAPD starten:

 systemctl start hostapd
		
HOSTAPD-Status anzeigen:

 systemctl status hostapd
		
HOSTAPD beim Systemstart starten:

 systemctl enable hostapd
		


Ergebnis:
Jetzt kann man sich mittels Mobiltelefon,Tablet,etc bereits am Access Point anmelden.

Es fehlt noch die Firewall und die Weiterleitungsregel für den Datenverkehr zur eth0 Schnittstelle (siehe Punkt Firewall).

top Firewall einrichten

Ich verwende firewalld. Diese Firewall läßt 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 Zonen 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 muß im Firewall-GUI Tool oder mit Kommandozeilenbefehl die Runtime-Konfiguration fest runtergeschrieben werden.
Variante 1 :


(Anmerkung: \ = Zeilenumbruch)

 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
		

Variante 2 :

(Anmerkung: \ = Zeilenumbruch)
Es muß hier noch der String [Netzwerk des Routers] mit dem Netz des Routers ersetzt werden (Beispiel: 192.168.0.0). Die folgenden Zeilen sollten Teil eines Start-Scripts werden, damit sie immer beim Booten des Rechners gesetzt werden.

 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 
		



top Links zum Thema

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!