ubuntuusers.de

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:


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 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 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 

Diese Revision wurde am 3. April 2021 15:59 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: WLAN, Netzwerk, systemd, System