Systemd/Networkd
Systemd-networkd
Beschreibung
Der Netzwerk-DAEMON systemd-networkd gehört zur systemd-Familie und konfiguriert Netzwerkschnittstellen auf den Ebenen 2 und 3 des ISO/OSI-Referenzmodells. Mit diesem Programm kann man auch auf realen Schnittstellen aufbauende virtuelle Schnittstellen wie beispielsweise Brücken, Tunnel, VPN erstellen und diese konfigurieren. Das Programm kümmert sich aber nicht um Ebene 2 bei WLAN-Schnittstellen.
Bei Ubuntu-Server-Installationen wird systemd-networkd als systemd-Unit gestartet und als einziges Programm für die Konfiguration des Netzwerks verwendet. (Siehe jedoch Netplan.)
Bei Ubuntu-Desktop-Installationen wird systemd-networkd lediglich installiert, aber nicht gestartet. Beim Start kann es wechselweise zu Störungen mit NetworkManager kommen, welcher bei Desktops normalerweise zur ausschließlichen Konfiguration des Netzwerks verwendet wird.
Zu systemd-networkd gehört das Dienstprogramm networkctl zur Kontrolle und Steuerung des DAEMONs.
Bei systemd-networkd erfolgt die Konfiguration ausschließlich über Deklarationen. Man kann aber mit dem Zusatzprogramm systemd/networkd-dispatcher auch Progamme starten.
Installation
systemd-networkd ist auf allen aktuellen Ubuntu-Installationen als fester Bestandteil von systemd bereits vorinstalliert.
Anwendungen
Problembehebung
Aufruf
Optionen
Argumente
Umgebung
Rückgabewert
Konfiguration
Grundkonfiguration
HINWEIS: Wenn Sie dies aus der Ferne tun, stellen Sie bitte sicher, dass Sie Zugang zum physischen Rechner haben, um Probleme beheben zu können, falls etwas schiefgeht. Sie können nicht aus der Ferne an einem Rechner arbeiten, dessen Netzwerk nicht funktioniert.
Wenn Sie derzeit ein Netzwerk mit /etc/network/ betreiben, verschieben Sie die Schnittstellendatei dorthin unter einem anderen Namen, damit sie nach der Einrichtung von systemd-networkd nicht mehr verwendet wird:
mv /etc/network/interfaces /etc/network/interfaces.save
Aktivieren Sie als Nächstes systemd-networkd. Sie müssen den Dienst noch nicht starten, da Ihr altes Netzwerk noch läuft und derzeit kein systemd-networkd definiert ist.
systemctl enable systemd-networkd
Alle Konfigurationsdateien werden in der Regel unter „/etc/systemd/network” gespeichert. Beachten Sie, dass in den Konfigurationsdateien die Groß- und Kleinschreibung beachtet werden muss. Match ist nicht dasselbe wie match.
Als Nächstes müssen Sie ein Netzwerk definieren. Im einfachsten Fall handelt es sich dabei nur um eine einzige Datei in /etc/systemd/network. Verwenden wir lan0.network und fügen wir die folgenden Informationen ein:
[Match]
Name=eth0
[Network]
DHCP=ipv4
Dadurch wird systemd-networkd angewiesen, eth0 (das von udev eingerichtet wurde) zu verwenden und ihm mithilfe von DHCP eine Adresse zuzuweisen.
Für eine statische IP könnte lan0.network wie folgt aussehen:
[Match]
Name=enp8s0
[Network]
Address=192.168.1.20/24
Gateway=192.168.1.1
DNS=192.168.1.1
Ich empfehle an dieser Stelle einen Neustart, um das derzeit ausgeführte Netzwerk zu entfernen und sicherzustellen, dass Ihr Netzwerk ordnungsgemäß funktioniert.
Das ist alles, was für einen einfachen Fall erforderlich ist.
Weitere Möglichkeiten
Einrichten einer Verbindung zwischen zwei Netzwerkschnittstellen
Dies wird unter https://wiki.debian.org/Bonding#Using_systemd-networkd behandelt.
Einrichten einer Netzwerkbrücke
Wenn Sie virtuelle Maschinen betreiben, haben Sie wahrscheinlich eine Brücke in Ihrer Schnittstellendatei eingerichtet. Da diese nicht mehr verwendet wird, müssen Sie eine Brücke mit systemd-networkd einrichten. Glücklicherweise ist dies sehr einfach.
Zuerst müssen Sie das virtuelle Netzwerkgerät mit einer .netdev-Datei definieren (natürlich in /etc/systemd/network). Nennen wir diese Datei br0.netdev. Sie sollte wie folgt aussehen:
[NetDev]
Name=br0
Kind=bridge
- Hinweis
- In Debian Buster (wahrscheinlich auch in früheren Versionen) weist systemd-networkd der Bridge möglicherweise eine andere MAC-Adresse zu als Ihrer physischen Schnittstelle. Dies kann zu Verbindungsproblemen führen, wenn Ihr Dienstanbieter beim Routing Ihres Datenverkehrs eine Art MAC-Filterung verwendet. Um solche Probleme zu umgehen, können Sie Ihrer Bridge eine MAC-Adresse zuweisen (wahrscheinlich die gleiche wie Ihrem physischen Gerät, ersetzen Sie „xx” durch eine gültige MAC-Adresse):
[NetDev]
Name=br0
Kind=bridge
MACAddress=xx:xx:xx:xx:xx:xx
Dann verknüpfen Sie es mit dem realen Netzwerkgerät unter Verwendung von br0.network:
[Match]
Name=eth0
[Network]
Bridge=br0
Ändern Sie schließlich lan0.network so, dass es auf br0 statt auf eth0 verweist:
[Match]
Name=br0
[Netzwerk]
DHCP=ipv4
Starten Sie systemd-networkd neu, und Ihre Bridge sollte nun aktiv sein.
systemctl restart systemd-networkd
Bridging über eine Bond-Verbindung
Bridging über eine Bond-Verbindung ist ganz einfach: Sie müssen in Ihrer Datei br0.network statt auf ein physisches Gerät auf das Bond-Gerät verweisen. Ändern Sie das obige Bridge-Beispiel so, dass br0.network nun wie folgt lautet:
[Match]
Name=bond0
[Netzwerk]
Bridge=br0
vorausgesetzt, Ihr virtuelles Bond-Gerät heißt bond0.
Konfigurieren der physikalischen Schicht
Im Allgemeinen benötigen Sie keine .link-Datei, da udev das Gerät bereits identifiziert. Sie können hier jedoch mehrere Optionen konfigurieren, die an anderer Stelle nicht eingestellt werden können. Die grundlegendste davon ist der Name.
uDev leistet heutzutage gute Arbeit bei der konsistenten Handhabung der Benennung von Netzwerkgeräten. Sofern Sie keine veralteten Namen wie eth0 haben (die jetzt unter Verwendung der uDev-Benennungsregeln eingerichtet werden, um die normale Vorgehensweise von uDev zu überschreiben), lauten die Namen von kabelgebundenen Schnittstellen in der Regel etwa „enp5s0”. Diese Ableitung erfolgt aus der PCI-Adresse.
Mit dem Befehl lspci werden Ihnen die Adressen aller PCI-Geräte in Ihrem System angezeigt. Sie sollten eine Zeile sehen, die Ihre Netzwerkschnittstelle beschreibt, wie z. B.
05:00.0 Ethernet-Controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)
wobei der Teil 05 zu 5 in enp5s0 und der Teil 00.0 zu 0 wird.
enp5s0 ist nicht sehr aussagekräftig, wenn Sie mehrere Netzwerkkarten in Ihrem System haben, z. B. wenn Sie die Netzwerkkarten für eine größere Bandbreite auf einem Server miteinander verbinden. Um der Schnittstelle einen aussagekräftigeren Namen zu geben, erstellen Sie einfach eine .network-Datei (z. B. onboardnic.network) wie folgt
[Match]
Path=pci-0000:05:00.0
[Network]
Bond=bond0
und verweisen Sie in Ihrer Datei bond0.network auf onboardnic statt auf enp5s0.
Sie können auch eine .link-Datei erstellen, um ihr einen aussagekräftigeren Namen zu geben.
manpage: https://manpages.debian.org/stretch/udev/systemd.link.5.en.html
Konfigurationsdateien auf Verbindungsebene müssen auf .link enden
Um onboardnic zu konfigurieren, können Sie also die Datei /etc/systemd/network/onboardnic.link erstellen, beispielsweise:
[Match]
OriginalName=enp5s0
oder direkter
[Match]
Path=pci-0000:05:00.0
Leider verwenden Tools außerhalb Ihrer systemd-networkd-Konfiguration den von udev vergebenen Namen.
Dateien
Sicherheit
Dokumentation
RFC
Man-Page
Info-Pages
Siehe auch
Links
Projekt
Weblinks
- systemd-networkd - overview
- systemd.network - basic network configuration (e.g. DHCP, static, IPv6, MAC, MTU), config also read by systemd-resolved.service
- systemd.netdev - network device configuration (e.g. bridges, VLAN, tunnels, VPNs, etc)
- CategoryNetwork
- systemd/networkd-dispatcher - auf Zustandsänderungen bei den Netzwerkschnittstellen reagieren, um beispielsweise Programm zu starten
- systemd/networkd/Anwendungsbeispiele
- Projekseite systemd-networkd
- Syntax in Konfigurationsdateien von systemd
- ISO/OSI-Referenzmodell Netzwerk (Netzwerk-Schichten)
- Erklärung EUI-48