Systemd/systemd-networkd

Aus wiki.archlinux.de

systemd bietet die Möglichkeit, sowohl DHCP-basierende Netzwerke, als auch Netzwerke mit einer festen IP zu verwalten. Hierzu wird der Service systemd-networkd nebst entsprechender Konfigurationsdateien verwendet.

Nach der Konfiguration muss der Service aktiviert und gestartet werden.

systemctl enable systemd-networkd
systemctl start systemd-networkd

Konfiguration

Die Konfiguration der Netzwerke wird in Dateien mit der Endung .network im Verzeichnis /etc/systemd/network vorgenommen. Es können dort beliebig viele Dateien angelegt werden, um beliebig viele Netzwerkgeräte zu konfigurieren. Drahtlosnetzwerkgeräte können derzeit noch nicht nur mit systemd konfiguriert werden.

Eine Konfigurationsdatei umfasst mindestens die Abschnitte [Match] und [Network]. Der erste Abschnitt beinhaltet Erkennungsmerkmale des zu konfigurierenden Netzwerkgerätes, wie zum Beispiel den Namen. Im zweiten Abschnitt werden die Eigenschaften wie IP-Adresse, das Gateway, etc. bestimmt.

Sollen mehrere IP-Adressen, Routen, oder Netzwerke für ein einzelnes Gerät konfiguriert werden, ist dies ebenfalls möglich.

Beispiele

Einfache Konfiguration mit der IP 10.10.0.10/24, dem Gateway 10.10.0.1 und dem DNS-Server 10.10.0.3 für das Netzwerkgerät enp0s25. Diese Werte werden in allen Beispielen genutzt, und müssen entsprechend an das eigene Umfeld angepasst werden.

/etc/systemd/network/lan-verbindung.network
[Match]
Name=enp0s25

[Network]
DNS=10.10.0.3
Address=10.10.0.10/24
Gateway=10.10.0.1

Wenn das Gerät nicht über den Namen ermittelt werden soll, können im Abschnitt [Match] statt Name zum Beispiel auch MACAdress, Path, oder Driver genutzt werden. Es können Wildcards genutzt werden, so erkennt Name=en* alle Ethernet-Netzwerkgeräte, und richtet sie anhand der Konfiguration ein.

Soll dasselbe Gerät stattdessen mittels DHCP konfiguriert werden, muss die Konfiguration wie folgt aussehen.

/etc/systemd/network/lan-verbindung.network
[Match]
Name=enp0s25

[Network]
DHCP=v6

Soll statt IPv6 IPv4 benutzt werden, muss DHCP=v4 eingetragen werden. Wenn beide Standards genutzt werden sollen, muss DHCP=both verwendet werden.

Bei der Verwendung von mehreren Netzwerken auf einem Netzwerkgerät können mehrere [Address]-Abschnitte benutzt werden.

/etc/systemd/network/lan-verbindung.network
[Match]
Name=enp0s25

[Address]
Address=10.10.0.10/24

[Address]
Address=192.168.2.50/24

[Route]
Gateway=10.10.0.1
Destination=10.10.0.0/24

[Route]
Gateway=192.168.2.255
Destination=192.168.2.0/24

Damit werden 10.10.0.10 und 192.168.2.50 als IP-Adressen für enp0s25 verwendet. Durch die [Route]-Abschnitte werden die entsprechenden Routen eingestellt. Die Gateways werden anhand der IP-Adresse nebst CIDR-Angabe (hier: /24) automatisch ermittelt, und die entsprechende Route gewählt.

Überprüfung

Mittels ip kann das Netzwerk an sich überprüft werden. Über systemctl kann der Zustand des Services geprüft werden.

systemctl status systemd-networkd
● systemd-networkd.service - Network Service
   Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; enabled)
   Active: active (running) since Tue 2014-12-09 00:19:54 CET; 38min ago
     Docs: man:systemd-networkd.service(8)
 Main PID: 205 (systemd-network)
   Status: "Processing requests..."
   CGroup: /system.slice/systemd-networkd.service
           └─205 /usr/lib/systemd/systemd-networkd

Dies zeigt den gestarteten Service nebst entsprechender Informationen zum Service. Details hierzu siehe im systemd-Hauptartikel. Ein weiteres Programm zum Überprüfen des Netzwerkstatus ist networkctl.

networkctl
IDX LINK             TYPE               OPERATIONAL SETUP     
  1 lo               loopback           carrier     unmanaged 
  2 enp0s25          ether              routable    configured
  3 enp0s26f7u4u3    ether              off         unmanaged

3 links listed.

Dies listet die vorhandenen Verbindungen auf, und zeigt unter SETUP, ob das Gerät mittels systemd-networkd verwaltet wird, oder nicht. Im Beispiel lo, das bekannte enp0s25, sowie ein als enp0s26f7u4u3 erkanntes, unkonfiguriertes USB-Netzwerkgerät.

Über networkctl status LINK bekommt man detaillierte Informationen zur Verbindung.

networkctl status enp0s25
● 2: enp0s25
   Link File: /usr/lib/systemd/network/99-default.link
Network File: /etc/systemd/network/lan.network
        Type: ether
       State: routable (configured)
        Path: pci-0000:00:19.0
      Driver: e1000e
      Vendor: Intel Corporation
       Model: 82562V-2 10/100 Network Connection (Inspiron 530)
  HW Address: 00:00:00:00:00:00
         MTU: 1500
     Address: 10.10.0.10
              fe80::221:9bff:fe13:c413
         DNS: 10.10.0.3

Es werden die Link-Datei, und die Netzwerkdatei des Gerätes aufgelistet. Die Link-Datei bestimmt unter anderem den Namen des Gerätes, die Netzwerkdatei definiert die Konfiguration. Daneben werden auch noch der Status, der Hersteller, die MAC-Adresse (für das Wiki im Beispiel generalisiert), sowie alle verfügbaren IP-Adressen und DNS-Server aufgelistet.

Fehlerbehebung

Sollte aus irgendwelchen Gründen das Loopback-Interface (lo bei der Auflistung durch ip a) eine weitere IP-Adresse zugewiesen zeigen, und infolge dessen keine Netzwerkverbindung mehr zustande kommen, kann dies mittels Eingabe des folgenden Befehls korrigiert werden.

ip addr flush dev lo

Danach sollten „sicherheitshalber“ entweder systemd-networkd, oder das gesamte System neu gestartet werden.