[[Vorlage(fortgeschritten)]] [[Vorlage(Getestet, focal, bionic, )]] {{{#!vorlage Wissen [:Programme_starten: Starten von Programmen] [:Terminal: Ein Terminal öffnen] [:mit Root-Rechten arbeiten:] }}} [[Inhaltsverzeichnis()]] Bevor eine WLAN-Schnittstelle als Netzwerkschnittstelle benutzt oder auch nur konfiguriert werden kann, muss sie mit einem Funknetz gekoppelt werden. Diese Kopplung übernehmen bei Ubuntu die Programme [:WLAN/wpa_supplicant:wpa_supplicant] und [:WLAN_Router/#hostapd: hostapd], je nachdem man einem bestehenden Funknetz als Arbeitsstation beitreten oder selbst für andere ein solches Funknetz anbieten möchte. Im Gegensatz zu [:NetworkManager:] arbeitet [:systemd/networkd:systemd-networkd] selber nicht mit diesen Programmen zusammen. Dieser Artikel beschreibt, wie man die bei systemd-networkd fehlende Funktionalität ersetzen kann. {{{#!vorlage Hinweis In diesem Artikel wird beispielhaft verwendet: * „`Romeo`“ für den Funknetznamen (SSID) * „`Ich liebe Julia!`“ als Passwort * „`radio`“ als Name für die WLAN-Schnittstelle * „`ROMEO`“ für den Namen der Konfigurationsdatei für das Funknetz `Romeo` }}} = Arbeitsstation = Für wpa_supplicant benötigt man eine Konfigurationsdatei, welche mindestens die Funknetzkennung SSID und das Passwort enthalten muss. Es wird jedoch empfohlen, die weiteren im Artikel [:WLAN/wpa_supplicant:wpa_supplicant] erläuterten Optionen zu benutzen. Eine minimale Konfigurationsdatei kann man so anlegen: {{{#!vorlage Befehl wpa_passphrase Romeo "Ich liebe Julia!" | sudo tee /etc/wpa_supplicant/ROMEO sudo chmod 640 /etc/wpa_supplicant/ROMEO }}} Die so angelegte Datei mit dem geheimen Passwort sollte nur für `root` lesbar sein. Nach diesen Vorbereitungen kann man mit folgenden Befehlen bereits dem Funknetz beitreten: {{{#!vorlage Befehl sudo ip link set radio up sudo wpa_supplicant -B -i radio -c /etc/wpa_supplicant/ROMEO }}} Die WLAN-Schnittstelle `radio` ist nun auch auf Ebene 3 eine Netzwerkschnittstelle, welcher zur Konfiguration der IP-Adressen, Routen usw. von systemd-networkd eine Konfigurationsdatei mit Endung '''.network''' zugeordnet werden kann. Alternativ kann man anstelle des Programms [:WLAN/wpa_supplicant:wpa_supplicant] auch den [#Links Intel Wireless Daemon (iwd)] benutzen, der allerdings erst aus der [:Paketquellen: Paketquelle universe] als Paket '''iwd''' installiert oder aus dem Quellcode von der Projektseite selbst kompiliert werden muss. = Access Point = Im Grunde geht man genauso wie unter [#Arbeitsstation Arbeitsstation] beschrieben vor, benutzt jedoch [:WLAN_Router/#hostapd: hostapd]. Man erstellt eine Konfigurationsdatei für hostapd: {{{ # /etc/hostapd/ROMEO – Konfigurationsdatei für hostapd hw_mode=g channel=1 ssid=Romeo driver=nl80211 #interface=radio #bridge=HUB ### Identifizierung/Authentifizierung der Nutzer # … }}} Die minimale Konfigurationsdatei enthält nur die grundlegenden Eigenschaften des Funknetzes wie Band (hier `g` für 2,4 GHz), Kanal und Funknetznamen und Angaben zu Schnittstellen. Man sollte unbedingt noch Angaben zur Zugangskontrolle und zur Verschlüsselung des Verkehrs ergänzen. Man startet den Zugangspunkt mit diesem Befehl: {{{#!vorlage Befehl sudo hostapd -B -i radio /etc/wpa_supplicant/ROMEO }}} Danach kann man weiter auf Netzwerkebene 3 mit systemd-networkd konfigurieren. (IP-Adresse, DHCP-Server, NAT/PT usw.) Alternativ kann man den Zugangspunkt auch im Bridge-Modus starten und kann dann Pakete ohne Routing bereits auf Netzwerk-Ebene 2 mit einer Ethernet-Schnittstelle austauschen. Dazu man muss den Namen (hier beispielhaft: HUB) einer weiteren existierenden Schnittstelle vom Typ `bridge` in der Konfigurationsdatei als Zeile "`bridge=HUB`" angeben; die bei `interface` angegebene Schnittstelle wird Port dieser [:Netzwerkbrücke:]. Eine solche Schnittstelle bedarf keinerlei weiteren Konfiguration auf Netzwerkebene 3. In der folgend beschriebenen [:systemd/Units:Systemd-Unit] muss man nur bei `Description` die Beschreibung und bei `ExecStart` den Startbefehl anpassen. = Automatisierung = Wenn der manuelle Start einwandfrei funktioniert, kann man das beispielsweise über eine (parametrierte) Systemd-Unit in der Datei '''/etc/systemd/system/ROMEO@.service''' in sein System einbauen: {{{ # /etc/systemd/system/ROMEO@.service [Unit] Description = Arbeitsstation im Funknetz «%p» über %i #Description = Zugangspunkt für Funknetz «%p» über %i Wants=network.target Before=network.target BindsTo=sys-subsystem-net-devices-%i.device After=sys-subsystem-net-devices-%i.device [Service] Type=oneshot RemainAfterExit=yes ExecStart = /sbin/ip link set %i up ExecStart = /sbin/wpa_supplicant -B -i %i -c /etc/wpa_supplicant/%p #ExecStart = /usr/sbin/hostapd -B -i radio /etc/hostapd/%p ExecStop = /sbin/ip link set %i down [Install] WantedBy=multi-user.target }}} Diese Systemd-Unit benutzt die Ersetzungsmarken `%i` und `%p`, welche Zeichenketten aus dem beim Aufruf verwendeten Namen lesen: * `%i` liest alles zwischen dem letzten Zeichen `@` und der mit Punkt beginnenden Endung. Dies wird hier zur Übergabe des Namens der Schnittstelle benutzt. * `%p` liest liest den Dateinamen bis vor das Zeichen `@`. Dies wird hier zur Angabe der bis auf die Endung gleichnameigen Konfigurationsdatei für hostap bzw wpa_supplicant verwendet. Diesen Dienst kann man mit den Standardbefehlen von systemd nun starten/stoppen bzw. beim Hochlauf automatisch starten lassen usw., z.B.: {{{#!vorlage befehl systemctl start ROMEO@radio.service }}} = Links = * [https://de.wikipedia.org/wiki/OSI-Modell ISO/OSI-Referenzmodell Netzwerk (Netzwerk-Schichten)] {de} * [https://w1.fi/cgit/hostap/ Projektseite von hostapd und wpa_supplicant] {en} * [https://wireless.wiki.kernel.org/en/users/documentation/hostapd Dokumentation (Wiki) für hostapd] {en} * [https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf Konfigurationsdatei für hostapd von dessen Projektseite] {en} * [https://git.kernel.org/pub/scm/network/wireless/iwd.git/about/ Projektseite iwd] {en} #tag: System, systemd, Netzwerk, WLAN