Systemd-networkd als flexibler Netzwerk-Manager

Aus LinuxUser 07/2019

Systemd-networkd als flexibler Netzwerk-Manager

© Wklzzz, 123RF

Sicher verbunden

Das Init-System Systemd bringt einen eigenen Netzwerk-Daemon mit, der einen PC per Ethernet oder WLAN ans Netz anbindet.

Zum Aufsetzen von Netzwerken gibt es unter Linux viele verschiedene Wege, vom manuellen Editieren der Konfigurationsdatei /etc/network/interfaces über das spartanische Tool Ceni bei Siduction bis hin zum bei vielen Distributionen mittlerweile als Standard eingesetzten NetworkManager.

Bereits seit über fünf Jahren – genauer seit Systemd 210 – versteckt sich im umstrittenen Init-System Systemd mit Systemd-networkd [1] ein Daemon zum Aufsetzen und Verwalten von Netzwerkverbindungen. Die Entwickler bekräftigten so den Anspruch, die zentralen Abläufe eines Linux-Systems umfassend zu bedienen.

Ursprünglich war Systemd-networkd für Container-Dienste wie Systemd-nspawn konzipiert, konfiguriert aber darüber hinaus auch lokale Schnittstellen zum Netzwerk – ganz gleich, ob drahtlos, verkabelt, virtuell, statisch oder per DHCP gesteuert. Das Auflösen der Namen übernimmt dabei Systemd-resolved [2]. Während sich per Kabel angebundene Schnittstellen alleine mit Systemd-networkd einrichten und verwalten lassen, benötigen Sie zur Konfiguration drahtloser Schnittstellen zusätzlich die Software WPA-Supplicant [3], die auf den meisten Notebooks jedoch bereits eingerichtet ist.

Eine einfache Konfiguration mit Ethernet und WLAN aufzusetzen, stellt also kein Problem dar. Systemd unterstützt aber außerdem Netzwerkbrücken, VLANs und diverse Tunneling-Protokolle. Die letzte Neuerung stammt aus dem aktuellen Systemd 242 und bietet Unterstützung für L2TP [4]. Mit der VPN-Software Wireguard arbeitet die Software ebenfalls zusammen [5].

Bevor Sie eine Schnittstelle mit Systemd verwalten, sollten Sie sich darüber im Klaren sein, dass Sie fortan in der Regel Dateien mit dem Editor bearbeiten, um diese einzurichten oder deren Konfiguration im Notfall zu reparieren. All das passiert künftig hauptsächlich unterhalb von /etc/systemd/network/ in den entsprechenden Dateien. Allerdings benötigt der Dienst in der Regel sehr wenig Aufwand.

Konfiguration sichern

In unserem Beispiel läuft Systemd-networkd unter Ubuntu, und der Einfachheit halber heißen die Bezeichner für die Schnittstellen generell eth0 und wlan0. Auf Ihrem System lauten die Namen vermutlich anders. Bevor Sie beginnen, sollten Sie sich deshalb die derzeitige Konfiguration ansehen und die Namen der Schnittstellen sowie deren MAC-Adressen notieren oder in einem Screenshot festhalten. Die entsprechenden Informationen erhalten Sie durch Eingabe von ifconfig oder ip addr in einem Terminal.

Dann geht es ans Deaktivieren der Netzwerkdienste, das Sichern der alten Konfiguration und das Entfernen der früher genutzten Software. Das Deaktivieren der Netzwerkdienste ist schnell erledigt (Listing 1). Dann schauen Sie in die Datei /etc/network/interfaces. Haben Sie diese mit dem NetworkManager verwendet, darf sie unverändert bleiben. Stehen mehr als die zwei Zeilen für Localhost darin, entfernen Sie den Rest oder kommentieren ihn aus (Abbildung 1).

Listing 1

$ sudo systemctl stop NetworkManager.service
$ sudo systemctl disable NetworkManager.service
### bei Verwendung von Ifupdown:
$ sudo systemctl stop networking.service
$ sudo systemctl disable networking.service

Abbildung 1: F&uuml;r den Einsatz von Systemd-networkd darf die Datei <code>interfaces</code> nur die Zeilen f&uuml;r Localhost enthalten.

Abbildung 1: Für den Einsatz von Systemd-networkd darf die Datei interfaces nur die Zeilen für Localhost enthalten.

Als Nächstes entfernen Sie die verwendete Netzwerksoftware, etwa mit dem Kommando aus Listing 2. Im Fall des Plasma-Desktops genügt das Deinstallieren von network-manager. Beim Deaktivieren, Sichern und Entfernen anderer Tools zum Verwalten des Netzwerks, wie Conman, Wicd oder Wifi-Radar, verfahren Sie analog (Abbildung 2).

Abbildung 2: NetworkManager dient oft als grafische Oberfl&auml;che zum Verwalten von Schnittstellen. Erst k&uuml;rzlich hat die Software ein Modul f&uuml;r den VPN-Dienst Wireguard erhalten.

Abbildung 2: NetworkManager dient oft als grafische Oberfläche zum Verwalten von Schnittstellen. Erst kürzlich hat die Software ein Modul für den VPN-Dienst Wireguard erhalten.

Listing 2

apt purge network-manager network-manager-gnome

Ethernet

Nach diesen Vorarbeiten geht es bei angestecktem Ethernet-Kabel ans Konfigurieren. Dazu legen Sie in /etc/systemd/network/ die Datei 50-dhcp-eth0.network an (Listing 3).

Listing 3

# 50-dhcp-eth0.network
[Match]
Name=eth0
[Network]
DHCP=yes

Ubuntu verwendet Bezeichner wie etwa enp57s0f1 für die Schnittstellen ins kabelgebundene Netzwerk. Sie umgehen diese fehleranfälligen Bezeichner durch eine Link-Datei (Listing 4).

Listing 4

# 10-eth0.link
[Match]
MACAddress=MAC
[Link]
Description=Ethernet
Name=eth0

Falls Sie eine statische IP-Adresse vergeben möchten, könnten Sie die Datei entsprechend 40-static-eth0.network nennen (Listing 5). Alle Dateien, die Sie für Systemd-networkd anlegen, tragen die Erweiterung .network; ansonsten müssen Sie bei der Vergabe des Namens keine weiteren Konventionen beachten.

Listing 5

# 40-static-eth0.network
[Match]
Name=enp2s0
[Network]
DNS=8.8.8.8
[Address]
Address=192.168.178.45/24
[Route]
Gateway=192.168.178.1

Verfügt der Rechner über mehrere Ethernet-Schnittstellen, und wollen Sie alle über DHCP mit Adressen versorgen, ändern Sie eth0 in eth* ab. Sie dürfen darüber hinaus eine Schnittstelle etwa mit statischer IP für IPv4, aber mit DHCP für IPv6 einrichten. Dazu fügen Sie unter der Sektion [Network] zusätzlich zum gewünschten DNS noch DHCP=ipv6 ein.

Nun schalten Sie die neuen Dienste ein (Listing 6). Dann löschen Sie noch die Datei /etc/resolv.conf und legen einen symbolischen Link zur Version von Systemd an (Listing 7, erste beiden Zeilen). Dann überprüfen Sie mit dem Kommando aus der letzten Zeile von Listing 7 den Status: Sehen Sie, dass die Schnittstelle eine IP-Adresse erhalten hat, konnte Systemd-networkd den Rechner mit dem Netzwerk verbinden. Andernfalls prüfen Sie mit journalctl -f die Konfiguration auf mögliche Fehler.

Listing 6

$ sudo systemctl start systemd-networkd.service
$ sudo systemctl start systemd-resolved.service
$ sudo systemctl enable systemd-networkd.service
$ sudo systemctl enable systemd-resolved.service

Listing 7

$ sudo rm /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
$ sudo networkctl status eth0

WLAN

Nach dem Konfigurieren der Ethernet-Schnittstelle richten Sie bei Bedarf zusätzlich das WLAN mit Systemd-networkd ein. So dürfen Sie jederzeit das Kabel ziehen; die WLAN-Verbindung übernimmt dann ohne Abbruch (Abbildung 3). Dazu installieren Sie das Paket wpasupplicant und konfigurieren es. War auf dem Gerät bereits vorher WLAN eingerichtet, ist das schon der Fall.

Abbildung 3: Die beiden Dateien <code>wired.network</code> und <code>wireless.network</code> erlauben den &uuml;bergangslosen Einsatz von Ethernet und WLAN. Die Werte hinter <span class="ui-element">RouteMetric</span> bestimmen, dass der Rechner Ethernet bevorzugt und erst nach Abbruch der LAN-Verbindung ins WLAN wechselt.

Abbildung 3: Die beiden Dateien wired.network und wireless.network erlauben den übergangslosen Einsatz von Ethernet und WLAN. Die Werte hinter RouteMetric bestimmen, dass der Rechner Ethernet bevorzugt und erst nach Abbruch der LAN-Verbindung ins WLAN wechselt.

Das WLAN richten Sie ein, indem Sie in der Konfigurationsdatei 50-dhcp-eth0.network die Sektion [DHCP] einfügen und dort den Wert RouteMetric=10 eintragen. Dann erstellen Sie an gleicher Stelle eine weitere Konfigurationsdatei, die Sie etwa 45-wlan0.network nennen (Listing 8). Dort verwenden Sie die Metrik 20, sodass das System die Ethernet-Schnittstelle (Metrik 10) bevorzugt.

Listing 8

# 45-wlan0.network
[Match]
Name=wlan0
[Network]
DHCP=yes
[DHCP]
RouteMetric=20

Nun gilt es noch, die Schnittstelle mit einem drahtlosen Netzwerk zu verbinden. Dazu erstellen Sie einen neuen Dienst unter /etc/systemd/system/wpa_supplicant@wlan0.service mit dem Inhalt aus Listing 9. Abschließend legen Sie eine Konfiguration unter /etc/wpa_supplicant/wpa_supplicant.conf an, in der Sie die gewünschten Drahtlos-Netzwerke eintragen (Listing 10). Dann starten Sie die nötigen Dienste für das WLAN (Listing 11, Zeile 1 bis 4).

Listing 9

[Unit]
Description=WPA supplicant for %i
[Service]
ExecStart=/sbin/wpa_supplicant -i%i -c/etc/wpa_supplicant/wpa_supplicant.conf
[Install]
WantedBy=multi-user.target

Listing 10

ctrl_interface=DIR=/run/wpa_supplicant GROUP=netdev
eapol_version=1
fast_reauth=1
ap_scan=1
update_config=1
network={
  ssid="Netzwerk"
  psk="Passwort"
  key_mgmt=WPA-PSK # evtl. anpassen
  pairwise=CCMP
  auth_alg=OPEN
}

Listing 11

$ systemctl stop wpa_supplicant
$ systemctl disable wpa_supplicant
$ systemctl enable wpa_supplicant@
$ systemctl start wpa_supplicant@wlan0
[...]
$ sudo chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf

Zusätzlich bedarf es eines neuen Diensts für WPA. (Abbildung 4). Da die dort ebenfalls erstellte Konfigurationsdatei für WPA-Supplicant das WLAN-Passwort enthält, ist es wichtig, sie zu sichern (Listing 11, letzte Zeile). Anschließend prüfen Sie, ob die Konfiguration die passenden Rechte hat (Abbildung 5).

Abbildung 4: &Uuml;ber den Dienst <code>wpa.service</code> bindet Systemd den WPA-Supplicant ein.

Abbildung 4: Über den Dienst wpa.service bindet Systemd den WPA-Supplicant ein.


Abbildung 5: Die Rechte f&uuml;r die Datei <code>wpa_supplicant.conf</code> m&uuml;ssen auf <code>0600</code> stehen, damit nur Root als Besitzer lesend und schreibend Zugriff darauf hat.

Abbildung 5: Die Rechte für die Datei wpa_supplicant.conf müssen auf 0600 stehen, damit nur Root als Besitzer lesend und schreibend Zugriff darauf hat.

Stecker raus

Nun ist das System bereit für den Wechsel zwischen den Netzen: Ziehen Sie den Stecker des Ethernet-Kabels, sollte der Rechner die Verbindung zum Netz nicht verlieren. Falls wider Erwarten das WLAN nicht übernimmt, kontrollieren Sie mit sudo journalctl -f, wo der Fehler liegt. Die Abfrage systemctl status wpa_supplicant sollte ein Ergebnis wie in Abbildung 6 liefern. Findet sich keine logische Erklärung für den Fehler, kann erfahrungsgemäß unter Umständen ein Neustart helfen.

Abbildung 6: Die Statusabfrage f&uuml;r den WPA-Supplicant zeigt, ob der Dienst erfolgreich gestartet ist.

Abbildung 6: Die Statusabfrage für den WPA-Supplicant zeigt, ob der Dienst erfolgreich gestartet ist.

Möchten Sie ein weiteres drahtloses Netzwerk eintragen, dann editieren Sie wpa_supplicant.conf oder geben auf der Kommandozeile den Befehl aus Listing 12 ein. Die Länge des Passworts muss dabei zwischen 8 und 64 Zeichen liegen. Alternativ steht die grafische Anwendung Wpa_gui zum Einrichten und Verwalten von Zugängen bereit (Abbildung 7). Deren Einrichtung ist allerdings mit zusätzlichem Aufwand verbunden und funktioniert erfahrungsgemäß nicht sehr zuverlässig.

Listing 12

$ sudo wpa_passphrase ESSID Passwort  >> /etc/wpa_supplicant/wpa_supplicant.conf

Abbildung 7: Wpa_gui bietet die M&ouml;glichkeit, das WLAN unter Systemd-networkd per grafischer Oberfl&auml;che einzurichten und zu verwalten. Allerdings rechtfertigt das Ergebnis den Aufwand oft nicht.

Abbildung 7: Wpa_gui bietet die Möglichkeit, das WLAN unter Systemd-networkd per grafischer Oberfläche einzurichten und zu verwalten. Allerdings rechtfertigt das Ergebnis den Aufwand oft nicht.

Fazit

Der Systemd-Netzwerk-Daemon verrichtet sowohl bei drahtlosen als auch kabelgebundenen Zugängen nicht nur auf Servern und in Containern seinen Dienst. Selbst unter grafischen Umgebungen macht er eine gute Figur. Der Autor hat auf einem Notebook seit rund zwei Jahren keinerlei Probleme damit. Trotz Umstellen auf Wireguard als VPN lief alles wie gewohnt weiter. Seine Stärken spielt Systemd-Networkd insbesondere dann aus, wenn Sie viel ohne grafische Oberfläche arbeiten. Obwohl sich auch der NetworkManager per Konsole bedienen lässt [6], hat der Systemd-Daemon hier klar die Nase vorn.

Brauchbare Dokumentation zum Thema ist allerdings Mangelware. Die Systemd-Dokumentation führt zumindest alle Sektionen der Konfigurationsdatei mit den zugehörigen Optionen auf und liefert am Ende einige Beispiele unter anderem für Brücken, Tunnel und VLANs [7]. Ansonsten greifen Sie am besten auf das Wiki von Arch Linux zurück [8]. Hier liefert die englische Version mehr Futter, die deutsche fällt weniger ausführlich aus. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 07/2019 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben