WLAN mit systemd-networkd
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
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 wpa_supplicant und 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 selber nicht mit diesen Programmen zusammen.
Dieser Artikel beschreibt, wie man die bei systemd-networkd fehlende Funktionalität ersetzen kann.
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 FunknetzRomeo
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 wpa_supplicant erläuterten Optionen zu benutzen.
Eine minimale Konfigurationsdatei kann man so anlegen:
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:
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 wpa_supplicant auch den Intel Wireless Daemon (iwd) benutzen, der allerdings erst aus der 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 beschrieben vor, benutzt jedoch 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:
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-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.:
systemctl start ROMEO@radio.service
Links¶