systemd/networkd

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Root-Rechte

  2. Arbeiten mit dem Terminal

  3. Netzwerke einrichten

  4. WLAN, optional

  5. Rechte von Dateien ändern

Inhaltsverzeichnis
  1. Installation
  2. Vorbereitung
    1. Deinstallation der Netzwerkverwaltung
      1. Deinstallation des NetworkManagers
      2. Deinstallation von Wicd
      3. Deinstallation von connman
    2. Bereinigen der alten Konfigurationen
      1. Bereinigung der interfaces
      2. Sichern der resolv.conf
    3. Aktivieren der nötigen systemd-Dienste
      1. systemd-resolved
    4. Konfigurationsdateien
      1. Optionen
  3. Beispielkonfigurationen
    1. Konfiguration:Kabel
      1. DHCP für alle Schnittstellen
      2. DHCP für eine Schnittstelle
      3. DHCP für ipv6, Statische ipv4-Adresse
    2. Konfiguration:WLAN
      1. Statische WLAN-IP
    3. Umbenennen einer Schnittstelle
  4. Vorlagen
    1. Standardkonfiguration:Kabel
  5. Problembehebung
    1. Namensauflösung funktioniert nicht
  6. Links
    1. intern

systemd-networkd ist der Netzwerkdaemon von systemd. systemd-networkd konfiguriert vorhandene und neu entdeckte Netzwerkschnittstellen, einschließlich virtueller Schnittstellen. Ebenso werden Konfigurationen für Container über systemd-nspawn oder virtuelle Maschinen ermöglicht.

Sowohl systemd-networkd, als auch der zugehörige Dienst systemd-resolved, starten bei Ubuntu nicht standardmäßig mit und müssen manuell aktiviert werden!

Achtung!

Da systemd-networkd derzeit noch nicht vollständig implementiert ist, ist dessen Nutzung als experimentell anzusehen!

Installation

systemd-networkd ist auf allen aktuellen (>=15.04) Ubuntu-Installationen bereits vorinstalliert und ein fester Bestandteil von systemd.

Vorbereitung

Zunächst müssen alle bestehenden Konfigurationen entfernt werden.

Deinstallation der Netzwerkverwaltung

Deinstallation des NetworkManagers

sudo apt-get --purge autoremove network-manager network-manager-gnome 

Hinweis:

Bei KDE kommt plasma-nm statt network-manager-gnome zum Einsatz, welches aber durch die Deinstallation automatisch entfernt wird.

Deinstallation von Wicd

sudo systemctl disable wicd.service
sudo apt-get --purge autoremove wicd 

Deinstallation von connman

Bei der Deinstallation von connman muss der Dienst zunächst manuell beendet, der Service entfernt und dann erst die Pakete deinstalliert werden.

1
2
3
4
5
6
#deaktivieren von connman
sudo killall connmand

#beenden und löschen des services
sudo systemctl stop connman.service
sudo systemctl disable connmann.service #Fehler aus den Runleveln können ignoriert werden

Bereinigen der alten Konfigurationen

Bereinigung der interfaces

Die Datei /etc/network/interfaces sollte nur folgende Zeilen enthalten:

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

Sichern der resolv.conf

Falls man die /etc/resolv.conf verändert hat, so ist diese zu sichern und anschliessend mittels

sudo rm /etc/resolv.conf 

zu löschen. Diese wird durch einen Symlink von systemd-resolved ersetzt.

Aktivieren der nötigen systemd-Dienste

Um systemd-networkd nutzen zu können, müssen zwei Dienste gestartet und aktiviert werden.

systemctl start systemd-networkd.service
systemctl start systemd-resolved.service 

um die Dienste zu starten,

systemctl enable systemd-networkd.service
systemctl enable systemd-resolved.service 

um sie beim Start des Systems automatisch zu laden.

systemd-resolved

systemd-resolved ist dabei für die Namensauflösung zuständig. Wie oben bereits erwähnt muss ein Symlink zur /etc/resolv.conf gesetzt werden, um Abwärtskompatibilität zu gewährleisten.

sudo ln -s /var/run/systemd/resolve/resolv.conf /etc/resolv.conf 

Konfigurationsdateien

Die Konfigurationsdateien liegen unter /usr/lib/systemd/network, während der Laufzeit unter /run/systemd/network und die mit der höchsten Priorität unter /etc/systemd/network. Daher sollten Änderungen immer in letztgenanntem Verzeichnis getätigt werden. Nur diese Konfigurationen bleiben auch bei einem möglichen Upgrade erhalten. Falls eine der Konfigurationsdateien fehlt, so kann man diese aus dem usr-Pfad nach etc kopieren und dort anpassen. Für diese Kopiervorgänge sind root-Rechte[1] nötig.

In den genannten Verzeichnissen finden sich drei Arten von Konfigurationsdateien, die man anhand ihrer Endung unterscheiden kann.

Alle Dateien obliegen den selben Regeln wie andere systemd-Konfigurationen und folgen dem Ini-Format.

Ein Auszug der Optionen finden sich in der nachfolgenden Tabelle.

Optionen

Optionen für systemd-networkd
Eintrag Beschreibung
[MATCH]
MacAddress Die Hardware-Adresse der Schnittstelle.
Path Eine mit Leerzeichen getrennte Liste der udev-Eigenschaft "ID_PATH".
Driver Eine mit Leerzeichen getrennte Liste der udev-Eigenschaft "DRIVER".
Type Eine mit Leerzeichen getrennte Liste der udev-Eigenschaft "DEVTYPE".
Name Eine mit Leerzeichen getrennte Liste der udev-Eigenschaft "INTERFACE".
Host Hostname (return-Wert von gethostname) oder MachineID (/etc/machine-id) des hosts.
Virtualization Dient zur Prüfung ob das System virtualisiert ist. Verfügbare Liste:qemu, kvm, zvm, vmware, microsoft, oracle, xen, bochs, uml, openvz, lxc, lxc-libvirt, systemd-nspawn, docker, rkt
KernelCommandLine Überprüft, ob eine spezifische KernelCommandLine gesetzt wurde.
Architecture Prüfe auf bestimmte Architektur. Derzeit unterstützt: x86, x86-64, ppc, ppc-le, ppc64, ppc64-le, ia64, parisc, parisc64, s390, s390x, sparc, sparc64, mips, mips-le, mips64, mips64-le, alpha, arm, arm-be, arm64, arm64-be, sh, sh64, m86k, tilegx, cris
[LINK]
MACAddress Die Hardware-Adresse der Schnittstelle.
MTUBytes Die maximale Übertragungsrate in Bytes. Die üblichen Suffixe wie K, M, G sind unterstützt und nutzen die Basis 1024.
[NETWORK]
Description Beschreibung der Schnittstelle. Dies dient nur der Darstellung.
DHCP DHCP kann hier eingestellt werden. Mögliche Werte: yes, no, ipv4, ipv6
Address Dient zum setzen einer statischen ipv4 oder ipv6-Adresse und ihrer Prefix-Länge. Beispiel für Netmask 255.255.255.0 wäre Address=192.168.1.2/24.
Gateway Eine Mehrfachangabe dieser Option ist möglich. Hier kann eine Gateway-Adresse angegeben werden. Mehr Optionen bietet die Sektion [Route].
DNS Der DNS-Server für die Namensauflösung wird hier eingetragen. Eine Mehrfachangabe dieser Option ist möglich. Der systemd-resolved.service nutzt diesen Wert.
NTP Hier kann eine NTP-Serveradresse angegeben werden. Eine Mehrfachangabe dieser Option ist möglich. Der systemd-timesyncd.service nutzt diesen Wert.
DHCPServer Standardwert no. Falls ein DHCPServer konfiguriert werden soll, findet man weitere Informationen in der [DHCPServer]-Sektion der Manpage von systemd-networkd.
[ADDRESS]
Address Dient zum setzen einer statischen ipv4 oder ipv6-Adresse und ihrer Prefix-Länge. Beispiel für Netmask 255.255.255.0 wäre Address=192.168.1.2/24.
Peer Die Adresse einer point-to-point Verbindung. Diese Adresse hat den selben Aufbau wie Address.
Broadcast Dieser Wert ist ausschließlich für ipv4-Verbindungen und legt die Broadcast-Adresse fest. Falls nicht angegeben, wird die Adresse automatisch von Address abgeleitet.
Label Ein Bezeichner für die Adresse.

Weiterführende Informationen zu Sektionen, möglichen Werten und Aufteilungen finden sich in der Manpage, welche über

man systemd.network(5) 

angezeigt werden kann.

Beispielkonfigurationen

Alle Konfigurationen werden unter /etc/systemd/network/[Nummer]-[Bezeichnung].network angelegt. Die Bezeichner sind dabei zwar frei wählbar, sollten aber erkennen lassen, wozu sie da sind. Die Priorität wird durch die Nummernfolge festgelegt.

Konfiguration:Kabel

DHCP für alle Schnittstellen

Möglicher Dateiname: /etc/systemd/network/60-dhcp.network

[Match]
Name=en*
[Network]
DHCP=yes

DHCP für eine Schnittstelle

Möglicher Dateiname: /etc/systemd/network/50-dhcp-enp2s0.network

[Match]
Name=enp2s0
[Network]
DHCP=yes

DHCP für ipv6, Statische ipv4-Adresse

Möglicher Dateiname: /etc/systemd/network/40-dhcpv6-staticV4.network

[Match]
Name=enp2s0
[Network]
DHCP=ipv6
Address=192.168.1.20/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4

Konfiguration:WLAN

WLAN-Schnittstellen werden nicht direkt von systemd-networkd verwaltet, so dass eine Grundkonfiguration mit einem anderen Dienst wie wpa_supplicant benötigt wird. Im folgenden Beispiel wird dieser Dienst verwendet.

Die Konfigurationsdatei wird abweichend folgendermaßen benannt: wpa_supplicant-[Schnittstellenname].conf. Damit kann systemd-networkd die unterschiedlichen Konfigurationen separat steuern.

Eine Service-Unit für eine solche WLAN-Schnittstelle wird mittels wpa_supplicant@[Schnittstellename].service verwaltet.

Die Standarddatei /etc/systemd/system/wpa_supplicant@.service ist derzeit (Stand 08/2016) noch manuell mit folgendem Inhalt anzulegen:

[Unit]
Description=Mein WPA-Service
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 l set %i up
ExecStart=/sbin/wpa_supplicant -B -i %i -c /etc/wpa_supplicant/wpa_supplicant-%i.conf
ExecStart=/sbin/dhclient %i

ExecStop=/sbin/ip l set %i down

[Install]
WantedBy=multi-user.target

Durch das %i wird dies zur allgemeinen Service-Unit und ersetzt beim Aufruf wpa_supplicant@[Schnittstellename].service das %i durch die tatsächlich verwendete Schnittstelle.

Diese Dienste müssen wie der Standarddienst ebenfalls erst aktiviert werden. Als Beispiel dient hier die Schnittstelle wlp2s0.

systemctl start wpa_supplicant.service
systemctl start wpa_supplicant@wlp2s0.service 

um die Dienste zu starten,

systemctl enable wpa_supplicant.service
systemctl enable wpa_supplicant@wlp2s0.service 

um sie beim Start des Systems automatisch zu laden. Ob der Service sauber startet, kann wie gewohnt mittels systemctl status wpa_supplicant@wlp2s0.service erfragt werden.

Statische WLAN-IP

Die statische IP wird ebenso wie die Kabel-IP als network-Datei angelegt.
Möglicher Dateiname: /etc/systemd/network/40-static-wireless.network

[Match]
Name=wlp2s0
[Network]
DHCP=no
Address=192.168.1.20/24
Gateway=192.168.1.1

Umbenennen einer Schnittstelle

Möglicher Dateiname: /etc/systemd/network/10-enp2s0-eth0.network

[Match]
MACAddress=12:34:56:78:90:ab

[Link]
Description=Benutze alten Namen für die Standardschnittstelle.
Name=eth0

Vorlagen

Standardkonfiguration:Kabel

Alle Netzwerkschnittstellen beginnend mit en werden automatisch per DHCP konfiguriert.

1
2
3
4
5
#!/bin/bash
for service in networkd resolved; do systemctl enable systemd-$service; systemctl start systemd-$service; done
rm /etc/resolv.conf; ln -s /var/run/systemd/resolve/resolv.conf /etc/resolv.conf
printf "[Match]\nName=en*\n\n[Network]\nDHCP=both" > /etc/systemd/network/default.network
systemctl restart systemd-networkd

Dieses Script muss ausführbar gemacht[5] und mit root-Rechten[1] gestartet werden.

Problembehebung

Namensauflösung funktioniert nicht

Falls DNS unter systemd-resolved nicht funktioniert, muss in der Datei /etc/nsswitch.conf noch der Eintrag dns unter hosts: durch resolve ersetzt werden.

Beispiel:

#ALT
hosts:          files mdns4_minimal [NOTFOUND=return] dns
#NEU
hosts:          files mdns4_minimal [NOTFOUND=return] resolve

intern