|
|
(31 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| '''Systemd-networkd''' | | '''Systemd/Networkd''' - Beschreibung |
|
| |
|
| == Beschreibung == | | == Beschreibung == |
| Der Netzwerk-DAEMON [https://wiki.ubuntuusers.de/systemd/networkd/#Links systemd-networkd] gehört zur systemd-Familie und konfiguriert Netzwerkschnittstellen auf den Ebenen 2 und 3 des [https://wiki.ubuntuusers.de/systemd/networkd/#Links 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. | | Der Netzwerk-DAEMON [https://wiki.ubuntuusers.de/systemd/networkd/#Links systemd-networkd] gehört zur systemd-Familie und konfiguriert Netzwerkschnittstellen auf den Ebenen 2 und 3 des [https://wiki.ubuntuusers.de/systemd/networkd/#Links 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 [https://wiki.ubuntuusers.de/systemd/Units/ systemd-Unit] gestartet und als einziges Programm für die Konfiguration des Netzwerks verwendet. (Siehe jedoch [https://wiki.ubuntuusers.de/Netplan/ Netplan].) | | Bei Ubuntu-Server-Installationen wird systemd-networkd als [https://wiki.ubuntuusers.de/systemd/Units/ systemd-Unit] gestartet und als einziges Programm für die Konfiguration des Netzwerks verwendet. (Siehe jedoch [https://wiki.ubuntuusers.de/Netplan/ Netplan].) |
|
| |
|
| Bei Ubuntu-Desktop-Installationen wird systemd-networkd lediglich installiert, aber nicht gestartet. Beim Start kann es wechselweise zu Störungen mit [https://wiki.ubuntuusers.de/NetworkManager/ NetworkManager] kommen, welcher bei Desktops normalerweise zur ausschließlichen Konfiguration des Netzwerks verwendet wird. | | Bei Ubuntu-Desktop-Installationen wird systemd-networkd lediglich installiert, aber nicht gestartet |
| | * Beim Start kann es wechselweise zu Störungen mit [https://wiki.ubuntuusers.de/NetworkManager/ 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. | | 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 [https://wiki.ubuntuusers.de/systemd/networkd-dispatcher/ systemd/networkd-dispatcher] auch Progamme starten. | | Bei systemd-networkd erfolgt die Konfiguration ausschließlich über Deklarationen |
| | * Man kann aber mit dem Zusatzprogramm [https://wiki.ubuntuusers.de/systemd/networkd-dispatcher/ systemd/networkd-dispatcher] auch Progamme starten |
|
| |
|
| == Installation == | | == Installation == |
| systemd-networkd ist auf allen aktuellen Ubuntu-Installationen als fester Bestandteil von systemd bereits vorinstalliert. | | systemd-networkd ist auf allen aktuellen Ubuntu-Installationen als fester Bestandteil von systemd bereits vorinstalliert |
| | |
| | == Start und Stopp == |
| | systemd-networkd kann nötigenfalls über diese Befehle verwaltet werden |
| | |
| | systemctl restart systemd-networkd.service |
| | systemctl enable systemd-networkd.service |
| | systemctl status systemd-networkd.service |
| | systemctl stop systemd-networkd.service |
| | systemctl disable systemd-networkd.service |
| | |
| | systemd-networkd macht nichts, wenn … * … es schon läuft und per <tt>start</tt> gestartet wird |
| | * Wenn Änderungen übernommen werden sollen, muss man es stoppen und neu starten, der Befehl <tt>restart</tt> von '''systemctl''' macht genau dieses |
| | * … es läuft und man die Konfiguration ändert |
| | * … es gestoppt wird |
| | * … es beim erneuten Start bereits konfigurierte Schnittstellen findet |
| | * Lediglich neue Schnittstellen werden bearbeitet |
|
| |
|
| == Anwendungen ==
| |
| === Problembehebung ===
| |
| == Aufruf ==
| |
| === Optionen ===
| |
| === Argumente ===
| |
| === Umgebung ===
| |
| === Rückgabewert ===
| |
| == Konfiguration == | | == Konfiguration == |
| === Grundkonfiguration ===
| | ; HINWEIS |
| 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 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: | | 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: |
| <syntaxhighlight lang="bash" highlight="1" line copy> | | <syntaxhighlight lang="bash" highlight="" line copy> |
| | |
| mv /etc/network/interfaces /etc/network/interfaces.save | | mv /etc/network/interfaces /etc/network/interfaces.save |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| 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. | | 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 |
| | <syntaxhighlight lang="bash" highlight="" line copy> |
| systemctl enable systemd-networkd | | systemctl enable systemd-networkd |
| | </syntaxhighlight> |
| | 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 |
|
| |
|
| 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: |
|
| |
|
| 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:
| | <syntaxhighlight lang="bash" highlight="" line copy> |
| | |
| <syntaxhighlight lang="bash" highlight="1" line copy> | |
| [Match] | | [Match] |
| Name=eth0 | | Name=eth0 |
Zeile 48: |
Zeile 66: |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| Dadurch wird systemd-networkd angewiesen, eth0 (das von udev eingerichtet wurde) zu verwenden und ihm mithilfe von DHCP eine Adresse zuzuweisen. | | 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: | | Für eine statische IP könnte lan0.network wie folgt aussehen: |
| <syntaxhighlight lang="bash" highlight="1" line copy> | | <syntaxhighlight lang="bash" highlight="" line copy> |
| [Match] | | [Match] |
| Name=enp8s0 | | Name=enp8s0 |
Zeile 61: |
Zeile 79: |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| Ich empfehle an dieser Stelle einen Neustart, um das derzeit ausgeführte Netzwerk zu entfernen und sicherzustellen, dass Ihr Netzwerk ordnungsgemäß funktioniert. | | 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. | | Das ist alles, was für einen einfachen Fall erforderlich ist |
|
| |
|
| === Über die Grundlagen hinaus ===
| |
| === Einrichten einer Verbindung zwischen zwei Netzwerkschnittstellen ===
| |
| Dies wird unter [https://wiki.debian.org/Bonding#Using_systemd-networkd https://wiki.debian.org/Bonding#Using_systemd-networkd] behandelt.
| |
|
| |
|
| === Einrichten einer Netzwerkbrücke ===
| | <noinclude> |
| 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:
| | == Anhang == |
| <syntaxhighlight lang="bash" highlight="1" line copy> | | === Siehe auch === |
| [NetDev]
| | <div style="column-count:2"> |
| Name=br0
| | <categorytree hideroot=on mode="pages">{{BASEPAGENAME}}</categorytree> |
| Kind=bridge
| | </div> |
| </syntaxhighlight>
| | ---- |
| | {{Special:PrefixIndex/{{BASEPAGENAME}}/}} |
|
| |
|
| ; Hinweis
| | === Links === |
| : 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): | | ==== Weblinks ==== |
| <syntaxhighlight lang="bash" highlight="1" line copy>
| | # https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html |
| [NetDev] | | # https://manpages.debian.org/man/systemd-networkd systemd-networkd |
| Name=br0
| | # https://manpages.debian.org/man/systemd systemd].network - basic network configuration (e.g. DHCP, static, IPv6, MAC, MTU), config also read by [https://manpages.debian.org/man/systemd-resolved systemd-resolved].service |
| Kind=bridge
| | # [https://manpages.debian.org/man/systemd systemd].netdev - network device configuration (e.g. bridges, VLAN, tunnels, VPNs, etc) |
| MACAddress=xx:xx:xx:xx:xx:xx
| | # [https://wiki.debian.org/CategoryNetwork CategoryNetwork] |
| </syntaxhighlight>
| | # [https://wiki.ubuntuusers.de/systemd/networkd-dispatcher/ systemd/networkd-dispatcher] - auf Zustandsänderungen bei den Netzwerkschnittstellen reagieren, um beispielsweise Programm zu starten |
| | # [https://wiki.ubuntuusers.de/systemd/networkd/Anwendungsbeispiele/ systemd/networkd/Anwendungsbeispiele] |
| | # [https://www.freedesktop.org/software/systemd/man/systemd-networkd.html Projekseite systemd-networkd] |
| | # [https://www.freedesktop.org/software/systemd/man/systemd.syntax.html Syntax in Konfigurationsdateien von systemd] |
| | # [https://de.wikipedia.org/wiki/OSI-Modell ISO/OSI-Referenzmodell Netzwerk (Netzwerk-Schichten)] |
| | # [https://standards.ieee.org/faqs/regauth.html#1 Erklärung EUI-48] |
|
| |
|
|
| |
|
| Dann verknüpfen Sie es mit dem realen Netzwerkgerät unter Verwendung von br0.network:
| | [[Kategorie:Linux/Netzwerk/networkd]] |
| <syntaxhighlight lang="bash" highlight="1" line copy>
| |
|
| |
|
| [Match]
| | {{DEFAULTSORT:systemd-networkd}} |
| Name=eth0
| | {{DISPLAYTITLE:systemd-networkd}} |
|
| |
|
| [Network]
| | </noinclude> |
| Bridge=br0
| |
| </syntaxhighlight> | |
| | |
| | |
| Ändern Sie schließlich lan0.network so, dass es auf br0 statt auf eth0 verweist:
| |
| <syntaxhighlight lang="bash" highlight="1" line copy>
| |
| [Match]
| |
| Name=br0
| |
| | |
| [Netzwerk]
| |
| DHCP=ipv4
| |
| </syntaxhighlight>
| |
| | |
| | |
| Starten Sie systemd-networkd neu, und Ihre Bridge sollte nun aktiv sein.
| |
| <syntaxhighlight lang="bash" highlight="1" line copy>
| |
| systemctl restart systemd-networkd
| |
| </syntaxhighlight>
| |
| | |
| === 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:
| |
| <syntaxhighlight lang="bash" highlight="1" line copy>
| |
| [Match]
| |
| Name=bond0
| |
| | |
| [Netzwerk]
| |
| Bridge=br0
| |
| </syntaxhighlight>
| |
| | |
| 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.
| |
| <syntaxhighlight lang="bash" highlight="1" line copy>
| |
| 05:00.0 Ethernet-Controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)
| |
| </syntaxhighlight>
| |
| | |
| 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
| |
| <syntaxhighlight lang="bash" highlight="1" line copy>
| |
| [Match]
| |
| Path=pci-0000:05:00.0
| |
| [Network]
| |
| Bond=bond0
| |
| </syntaxhighlight>
| |
| | |
| 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 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:
| |
| <syntaxhighlight lang="bash" highlight="1" line copy>
| |
| [Match]
| |
| OriginalName=enp5s0
| |
| </syntaxhighlight>
| |
| | |
| | |
| oder direkter
| |
| <syntaxhighlight lang="bash" highlight="1" line copy>
| |
| | |
| [Match]
| |
| Path=pci-0000:05:00.0
| |
| </syntaxhighlight>
| |
| | |
| 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 ===
| |
| * [https://manpages.debian.org/man/systemd-networkd systemd-networkd] - overview
| |
| * [https://manpages.debian.org/man/systemd systemd].network - basic network configuration (e.g. DHCP, static, IPv6, MAC, MTU), config also read by [https://manpages.debian.org/man/systemd-resolved systemd-resolved].service
| |
| * [https://manpages.debian.org/man/systemd systemd].netdev - network device configuration (e.g. bridges, VLAN, tunnels, VPNs, etc)
| |
| * [https://wiki.debian.org/CategoryNetwork CategoryNetwork]
| |
| * [https://wiki.ubuntuusers.de/systemd/networkd-dispatcher/ systemd/networkd-dispatcher] - auf Zustandsänderungen bei den Netzwerkschnittstellen reagieren, um beispielsweise Programm zu starten
| |
| * [https://wiki.ubuntuusers.de/systemd/networkd/Anwendungsbeispiele/ systemd/networkd/Anwendungsbeispiele]
| |
| * [https://www.freedesktop.org/software/systemd/man/systemd-networkd.html Projekseite systemd-networkd]
| |
| * [https://www.freedesktop.org/software/systemd/man/systemd.syntax.html Syntax in Konfigurationsdateien von systemd]
| |
| * [https://de.wikipedia.org/wiki/OSI-Modell ISO/OSI-Referenzmodell Netzwerk (Netzwerk-Schichten)]
| |
| * [https://standards.ieee.org/faqs/regauth.html#1 Erklärung EUI-48]
| |
| | |
| | |
| = ubuntuusers =
| |
| == Konfiguration ==
| |
| === Programm-Einstellungen ===
| |
| Die Hauptkonfigurationsdatei '''/etc/systemd/networkd.conf''' dokumentiert primär die bei der Übersetzung des Programms definierte Voreinstellung. Man darf diese Datei abändern; dabei sollte man die Kommentare füt die Voreinstellungen erhalten, weil man sonst keine Dokumentation über die Voreinstellung mehr hat. Alternativ kann man die hier folgend beschriebenen weiteren Konfigurationsdateien verwenden.
| |
| | |
| Nach der Hauptkonfigurationsdatei werden noch alle auf '''.conf''' endenden Dateien in diesen Verzeichnissen (sofern existierend) berücksichtigt:
| |
| * '''/usr/lib/systemd/networkd.conf.d/'''
| |
| * '''/usr/local/lib/systemd/networkd.conf.d/'''
| |
| * '''/etc/systemd/networkd.conf.d/'''
| |
| | |
| Dateien in später genannten Verzeichnissen maskieren gleichnamige Dateien in früher genannten Verzeichnissen und die Dateien werden in lexikographischer Reihenfolge bearbeitet.
| |
| | |
| Eine gute Praxis besteht im Kopieren der Datei '''/etc/systemd/networkd.conf''' in das Verzeichnis '''/etc/systemd/networkd.conf.d/''' (welches man möglicherweise erst anlegen muss) und Bearbeitung der Kopie. Die Einstellmöglichkeiten sind in der Datei aufgelistet und werden ausführlich in der Manpage erklärt:
| |
| man networkd.conf
| |
| | |
| === Schnittstellen-Einstellungen ===
| |
| Für die Konfiguration von Netzwerkschnittstellen werden Dateien in folgenden Verzeichnissen berücksichtigt:* '''/usr/lib/systemd/network/'''
| |
| * '''/usr/local/lib/systemd/network/'''
| |
| * '''/run/systemd/network/'''
| |
| * '''/etc/systemd/network/'''
| |
| | |
| Dateien in später genannten Verzeichnissen maskieren gleichnamige Dateien in früher genannten Verzeichnissen und die Dateien werden in lexikographischer Reihenfolge bearbeitet.
| |
| | |
| In den genannten Verzeichnissen finden sich drei anhand ihrer Endung zu unterscheidenden Arten von Konfigurationsdateien:* '''.netdev''' zum erstellen virtueller Netzwerk-Schnittstellen
| |
| * '''.link''' konfigurieren Schnittstellen auf Layer 2. Dies wird tatsächlich von [https://wiki.ubuntuusers.de/udev/ udev] erledigt.
| |
| * '''.network''' konfigurieren Schnittstellen auf Layer 3.
| |
| | |
| Alle Dateien obliegen der [https://wiki.ubuntuusers.de/systemd/networkd/#Links Syntax in Konfigurationsdateien von systemd]. Diese ähnelt dem [https://de.wikipedia.org/wiki/Initialisierungsdatei Ini-Format].
| |
| | |
| man systemd.syntax
| |
| | |
| Bei den Schlüsselworten für die Abschnittsnamen und die Einstellungsoptionen sind große und kleine Buchstaben bedeutsam. Die möglichen Optionen und deren richtige Schreibweise können den Manpages entnommen werden:
| |
| | |
| man systemd.netdev
| |
| man systemd.link
| |
| man systemd.network
| |
| | |
| Beachte: In den Manpages werden Abschnittsnamen in Versalien geschrieben, wenn sie als Überschrift verwendet werden. In den Konfigurationsdateien ist aber durchweg der Abschnittsname in vorgeschriebener Verwendung von Groß-/Kleinbuchstaben zu schreiben.
| |
| | |
| Die nachfolgenden Tabellen listen auszugsweise die Schlüsselworte, soweit sie für das Verständnis der Beispiele in diesem Artikel erforderlich sind. ''Kursiv'' dargestellte Schlüsselworte sind ''Pflichtangaben''.
| |
| | |
| {| style="border-spacing:0;width:17cm;"
| |
| |- style="border:none;padding:0.049cm;"
| |
| | colspan="2" | Optionen für .netdev-Dateien
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Schlüsselwort
| |
| || Beschreibung
| |
| |- style="border:none;padding:0.049cm;"
| |
| || [Match]
| |
| || Abschnitt optional
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Host
| |
| || Hostname oder Maschinen-Kennung (engl: ''machine-id'') des Rechners. Effektiv wird die Zeichenfolge mit '''/etc/hostname''' und '''/etc/machine-id''' verglichen. Die machine-id kann aber auch beim Hochlauf temporär als Kernel Parameter gesetzt werden.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Virtualization
| |
| || Prüft ob und ggf. wie das System virtualisiert ist. Mögliche Werte: no, yes, vm, container, qemu, kvm, zvm, vmware, microsoft, oracle, xen, bochs, uml, openvz, lxc, lxc-libvirt, systemd-nspawn, docker, rkt und ggf. weitere. Effektiv wird gegen die Ausgabe von '''systemd-detect-virt''' verglichen.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || KernelCommandLine
| |
| || Option auf der Kernel-Kommandozeile. Vergleicht effektiv, ob '''/proc/cmdline''' die Angabe enthält.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || KernelVersion
| |
| || Kernel Version. Vergleicht effektiv mit '''uname -r''', dabei sind auch Vergleiche auf größer-/kleiner-als und weitere möglich.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Architecture
| |
| || Prüfe auf bestimmte Architektur. Beispiele: 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. Vergleicht effektiv mit '''uname -m'''.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || ''[NetDev]''
| |
| || Abschnitt obligatorisch
| |
| |- style="border:none;padding:0.049cm;"
| |
| || ''Name''
| |
| || Name der Schnittstelle. Pflichtangabe. Maximal 15 dieser zulässigen Zeichen: a-z, A-Z, 0-9 und Sonderzeichen: <tt>_ = + . -</tt>
| |
| |- style="border:none;padding:0.049cm;"
| |
| || ''Kind''
| |
| || Typ der Schnittstelle. Pflichtangabe. Beispiele: dummy, bridge, tun, wireguard und viele weitere, siehe Manpage.
| |
| | |
| |-
| |
| |}
| |
| | |
| {| style="border-spacing:0;width:17cm;"
| |
| |- style="border:none;padding:0.049cm;"
| |
| | colspan="2" | Optionen für .link-Dateien
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Schlüsselwort
| |
| || Beschreibung
| |
| |- style="border:none;padding:0.049cm;"
| |
| || [Match]
| |
| || Abschnitt optional, aber Verwendung dringend empfohlen.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Beachte:
| |
| || Die unter .netdev angegebenen Prüfungen sind auch hier möglich.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Path
| |
| || Eine mit Leerzeichen getrennte Liste mit Werten für die udev-Eigenschaft <tt>ID_PATH</tt>. Es wird geprüft, ob der tatsächliche Wert einem dar angegebenen Werten entspricht.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Driver
| |
| || Eine mit Leerzeichen getrennte Liste mit Werten für die udev-Eigenschaft <tt>ID_NET_DRIVER</tt>. Es wird geprüft, ob der tatsächliche Wert einem dar angegebenen Werten entspricht.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Type
| |
| || Eine mit Leerzeichen getrennte Liste mit Werten für den von '''networkctl''' angezeigten Schnittstellentyp. (Achtung: Bei Version 237 sind nur die Werte der udev-Eigenschaft <tt>DEVTYPE</tt> zulässig!) Es wird geprüft, ob der tatsächliche Wert einem dar angegebenen Werten entspricht.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Property
| |
| || Eine mit Leerzeichen getrennte Liste mit udev-Eigenschaft=Wert Angaben. Es wird geprüft, ob für jede angegebene Eigenschaft tatsächlich der Wert dem hier angegebenen entspricht.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || MacAddress
| |
| || Eine mit Leerzeichen getrennte Liste mit MAC-Adressen. Diese Option darf mehrfach angegeben werden; die Listen werden vereinigt. Es wird geprüft, ob die momentan eingestellte Unicast-MAC-Adresse in der Gesamtliste vorkommt.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || PermanentMACAddress
| |
| || Eine mit Leerzeichen getrennte Liste mit permanenten [https://wiki.ubuntuusers.de/systemd/networkd/#Links EUI-48]. Diese Option darf mehrfach angegeben werden; die Listen werden vereinigt. Es wird geprüft, ob der Identifizierer der Hardware in der Gesamtliste vorkommt.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || ''[Link]''
| |
| || Abschnitt obligatorisch
| |
| |- style="border:none;padding:0.049cm;"
| |
| || NamePolicy
| |
| || Eine Liste mit Bezeichnern für die zur Benennung dieser Schnittstelle auszuprobierenden Methoden. Bekannte Methoden: kernel, database, onboard, slot, path, mac, keep
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Name
| |
| || Ein Name für die Schnittstelle. Dieser wird verwendet, wenn keine der angegebenen Methoden zu Benennung erfolgreich war. Maximal 15 dieser zulässigen Zeichen: a-z, A-Z, 0-9, und Sonderzeichen: <tt>_ = + . -</tt>
| |
| |- style="border:none;padding:0.049cm;"
| |
| || MACAddress
| |
| || Eine Unicast-MAC-Adresse, welche der Hardware zugewiesen wird.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || MTUBytes
| |
| || Die maximale Paketlänge in Bytes wird für Netzwerkebene 2 auf den hier abgegebenen Wert gesetzt Die üblichen Suffixe wie K, M, G dürfen verwendet werden und; sie werden zur Basis 1024 interpretiert.
| |
| | |
| |-
| |
| |}
| |
| | |
| {| style="border-spacing:0;width:17cm;"
| |
| |- style="border:none;padding:0.049cm;"
| |
| | colspan="2" | Optionen für .network-Dateien
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Eintrag
| |
| || Beschreibung
| |
| |- style="border:none;padding:0.049cm;"
| |
| || [Match]
| |
| || Abschnitt optional, aber Verwendung dringend empfohlen.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Beachte:
| |
| || Alle unter .link angegebenen Prüfungen sind auch hier möglich.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Name
| |
| || Eine mit Leerzeichen getrennte Liste mit Mustern (Shell-Globs) für die Werte der udev-Eigenschaft <tt>INTERFACE</tt>. Es wird geprüft, ob der tatsächliche Wert einem der Muster entspricht.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || WLANInterfaceType
| |
| || Eine mit Leerzeichen getrennte Liste von Betriebsarten der WLAN-Schnittstelle. Beispiele: <tt>ad-hoc</tt>, <tt>station</tt>, <tt>ap</tt>. Weitere siehe Manpage. Es wird geprüft, ob die Betriebsart der Schnittstelle mit einem Listeneintrag übereinstimmt.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || [Link]
| |
| || Abschnitt optional
| |
| |- style="border:none;padding:0.049cm;"
| |
| || MACAddress
| |
| || Eine Unicast-MAC-Adresse, welche der Hardware zugewiesen wird.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || MTUBytes
| |
| || Die maximale Paketlänge in Bytes wird auf den hier angegebenen Wert gesetzt Die üblichen Suffixe wie K, M, G dürfen verwendet werden; sie werden zur Basis 1024 interpretiert.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Unmanaged
| |
| || Vorgabe ist <tt>no</tt>. Kann auf den Wert <tt>yes</tt> gesetzt werden, dann wird der Schnittstelle keine '''.network'''-Datei zugewiesen, weil die Suche nach passenden Dateien an dieser Stelle beendet wird.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || ''[Network]''
| |
| || Abschnitt obligatorisch
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Description
| |
| || Beschreibung der Schnittstelle. Dies dient nur der Darstellung.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || DHCP
| |
| || Mögliche Werte: <tt>yes</tt>, <tt>no</tt>, <tt>ipv4</tt>, <tt>ipv6</tt>. Vorgabe ist <tt>no</tt>, d.h. kein Start des DHCP-Client. Anderer Wert startet den DHCP-Client das angegebene IP-Protokoll bzw. bei <tt>yes</tt> für beide Protokolle. Der DHCPv6-Client kann aber auch unbeeinflusst von dieser Einstellung über empfangene Ankündigungen des Routers gestartet werden. Wenn man den DHCP-Client einschaltet, kann man in den Abschnitten <tt>[DHCPv4]</tt> bzw. <tt>[DHCPv6]</tt> dessen Verhalten konfigurieren.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || DHCPServer
| |
| || Standardwert <tt>no</tt>. Kann auf <tt>yes</tt> gesetzt werden und startet dann einen DHCPv4-Server. Dieser wird im Abschnitt [DHCPServer] konfiguriert.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Address
| |
| || Kurzform für einen Abschnitt <tt>[Address]</tt> zur Definition einer IP-Adresse und deren Prefix-Länge für ein Broadcast.Netzwerk. Kann verwendet werden, wenn man in einem Abschnitt <tt>[Address]</tt> nur den Schlüssel <tt>Address</tt> benötigt. Mehrfache Verwendung dieser Option ist möglich.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Gateway
| |
| || Kurzform für einen Abschnitt <tt>[Route]</tt>. Kann verwendet werden, wenn man in einem solchen Abschnitt nur den Schlüssel <tt>Gateway</tt> benötigt. Erzeugt eine default-Route zur angegebenen IP-Adresse. Mehrfache Verwendung dieser Option ist möglich, aber sinnlos.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || DNS
| |
| || Einstellung für systemd-resolved; systemd-networkd ignoriert diesen Schlüssel. IP-Adresse eines DNS-Servers, der für die über diese Schnittstelle erreichbaren Rechner einer DNS-Domain die Namensauflösung erbringt. Mehrfache Verwendung dieser Option ist möglich.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Domains
| |
| || Einstellung für systemd-resolved; systemd-networkd ignoriert diesen Schlüssel. Eine mit Leerzeichen getrennte Liste von DNS-Domänen, für welche der/die DNS-Server an dieser Schnittstellen zuständig sind.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || [Address]
| |
| || Dieser Abschnitt ist mehrfach zulässig.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || ''Address''
| |
| || Angabe einer IP-Adresse, optional mit deren Prefix-Länge. Zulässig sind für IPv4 beispielsweise <tt>192.0.2.42/28</tt> und <tt>10.0.34.56/255.255.128.0</tt> in diesen Schreibweisen. Es müssen stets alle 4 Bytes angegeben werden, auch wenn diese den Wert <tt>0</tt> haben. Für IPv6 sind nur die vollständige Angabe oder die Schreibweise wie im Beispiel <tt>fd00::1/64</tt> zulässig. Pflichtangabe in diesem Abschnitt und nur genau einmal möglich. Es wird die Adresse zugewiesen und für die Schnittstelle (automatisch, aber abschaltbar) eine Route zum Netzwerk eingerichtet.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Broadcast
| |
| || Nur sinnvoll, wenn unter <tt>Address</tt> in diesem Abschnitt eine IPv4-Adresse angegeben wurde und man nicht die sich aus dieser Angabe ergebene Broadcast-Adresse, sondern diese IP-Adresse verwenden will.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Peer
| |
| || IP-Adresse der Gegenstelle bei einer Punkt-zu-Punkt-Verbindung. Zur Definition einer Punkt-zu-Punkt-Verbindung sollte man hier und auch unter <tt>Address</tt> die Prefix-Länge <tt>32</tt> bei IPv4 bzw. <tt>128</tt> bei IPv6 verwenden. Bei mehrfacher Verwendung wird nur die letzte Angabe verwendet.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || [Route]
| |
| || Dieser Abschnitt ist mehrfach zulässig.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Type
| |
| || Der Typ der Route. Vorgabe ist <tt>unicast</tt>, mögliche Werte sind die üblichen Typen von Routen wie beispielsweise <tt>blackhole</tt>.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Destination
| |
| || Der Zielbereich als Netzwerk-Prefix: Es muss eine IP-Adresse und optional deren Prefix-Länge angegeben werden, dabei können nur solche IP-Adressen verwendet werden, bei denen beim Host-Teil alle Bit 0 sind. Wenn keine Prefix-Länge angegeben wird, impliziert dies 32 bei IPv4 bzw. 128 bei IPv6 (Host-Route). Wenn diese Option fehlt, dann wird als Zielbereich <tt>0.0.0.0/0</tt> bzw. <tt>::/0</tt> verwendet.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Gateway
| |
| || Eine IP-Adresse. IP-Pakete mit Zieladressen im Zielbereich dieser Route werden an diese Adresse geschickt.
| |
| |- style="border:none;padding:0.049cm;"
| |
| || Metric
| |
| || Ganze Zahl ohne Vorzeichen. Praktisch nur bedeutsam, wenn es zu einem Zeitpunkt mehrere Routen mit gleichem Ziel hinsichtlich Adresse und Prefix-Länge gibt. Diese müssen sich dann in dieser Angabe unterscheiden. Der Konflikt wird gelöst durch Auswahl der Route mit der kleinsten Metric.
| |
| |-
| |
| |}
| |
| | |
| === .netdev-Dateien: Schnittstelle anlegen ===
| |
| Dateien mit der Endung auf '''.netdev''' werden bei jedem [https://wiki.ubuntuusers.de/systemd/networkd/#Start-und-Stopp Start von systemd-networkd] ausgewertet. Wenn es eine Datei mit Endung auf '''.netdev''' ohne eine dazu passende Schnittstelle gibt, wird die beschriebene Schnittstelle angelegt und konfiguriert.
| |
| | |
| ==== Beispiel: Netzwerkbrücke ====
| |
| Eine [https://wiki.ubuntuusers.de/Netzwerkbrücke/ Netzwerkbrücke] ist eine Realisierung eines Hub/Switch in Software und verbindet mehrere Netzwerkschnittstellen auf Ebene 2. Dies kann als einfache Methode für eine [https://wiki.ubuntuusers.de/Internetverbindungsfreigabe/ Internetverbindungsfreigabe] verwendet werden.
| |
| | |
| # /etc/systemd/network/20-bridge.netdev
| |
| [NetDev]
| |
| Kind = bridge
| |
| Name = HUB
| |
|
| |
| [Bridge]
| |
| STP = yes
| |
| HelloTimeSec = 1
| |
| MaxAgeSec = 4
| |
| ForwardDelaySec = 4
| |
| | |
| Der gesamte Abschnitt <tt>[Bridge]</tt> ist hier optional. Abhängig vom Typ (<tt>Kind=</tt>) der Schnittstelle sind weitere Abschnitte zur Ausgestaltung der Schnittstelle zulässig. Dies wird hier benutzt, um das Spanning Tree Protokoll einzuschalten und zu parametrieren. Details siehe Artikel [https://wiki.ubuntuusers.de/Netzwerkbrücke/ Netzwerkbrücke].
| |
| | |
| Die Schnittstellen, welche diesem HUB als Ports zugeordnet werden sollen, müssen in ihrer '''.network'''-Datei eine entsprechende Zuweisung erhalten:
| |
| | |
| # /etc/systemd/network/80-HUB-port.network
| |
| [Match]
| |
| Type =! wlan
| |
| Name =! HUB
| |
|
| |
| [Network]
| |
| Description = Interface als Bridge-Port von HUB verwenden.
| |
| Bridge = HUB
| |
| LinkLocalAddressing = no
| |
| | |
| Wie im Beispiel gezeigt, kann man mit =! auch auf Ungleichheit testen. Dies wird hier benutzt, damit die Brücke nicht sich selbst als Port hinzugefügt wird.
| |
| | |
| Die Angabe "<tt>LinkLocalAddressing=no</tt>" ist hier optional. Sie verhindert, dass per Voreinstellung für jeden Port eine eigene IPv6-Link-Adresse vergeben wird. Bei Ubuntu 18.04 mit systemd-Version 237 hat dies den schönen Nebeneffekt, dass die voll funktionsfähige Schnittstelle nicht von networkctl als "<tt>degraded</tt>" angezeigt wird, weil nur Link-Local-Adressen vorhanden sind.
| |
| | |
| systemd-networkd löscht niemals eine Schnittstelle. Selbst wenn man die .netdev-Datei löscht, welche zu ihrer Erzeugung gedient hat, interessiert dies systemd-networkd nicht. Eine Schnittstelle, welche nicht zu realer Hardware gehört, kann man aber mit dem [https://wiki.ubuntuusers.de/systemd/networkd/#Dienstprogramm-networkctl Dienstprogramm networkctl] vernichten.
| |
| | |
| === .link-Dateien ===
| |
| Die Dateien mit Endung auf '''.link''' dienen zu Konfiguration vorhandener (Hardware- und Software-) Schnittstelle auf Netzwerkebene 2, soweit es sich um statische Konfigurationselemente handelt. (Variable Einstellungen auf Ebene 2 können dagegen in '''.network'''-Dateien erfolgen.) Diese Dateien werden von dem in udev fest eingebauten Modul '''net_setup_link''' bearbeitet. Damit sind '''.link'''-Dateien verkappte udev-Regeln, die grundsätzlich auch in der herkömmlichen udev-Syntax formuliert werden könnten und früher war das auch der Fall. (Hierfür wurde z.B '''/etc/udev/rules.d/70-persistent-net.rules''' verwendet.)
| |
| | |
| Für jede vorhandene Schnittstelle werden nacheinander die '''.link'''-Dateien geprüft, ob alle genannten Selektionskriterien gemeinsam zutreffen. Die erste passende Datei wird der Schnittstelle zugewiesen, und die in der Datei aufgeführten Konfigurationsaufgaben werden durchgeführt. Selbst wenn dabei ein Fehler auftritt, wird keine weitere Datei beachtet.
| |
| | |
| ==== Beispiel: Schnittstelle umbenennen ====
| |
| # /etc/systemd/network/10-rename-to-radio.link</
| |
| [Match]
| |
| Type = wlan wifi
| |
| Path =! pci*usb*
| |
|
| |
| [Link]
| |
| Description = Radio-LAN
| |
| NamePolicy =
| |
| Name = radio
| |
| | |
| Wenn man das ausprobiert, wird es wahrscheinlich zunächst nicht funktionieren. Zu den Gründen und zur Abhilfe siehe [https://wiki.ubuntuusers.de/systemd/networkd/#Umbenennung-einer-Schnittstelle-funktioniert-nicht Problembehebung].
| |
| | |
| Die hier gezeigte Arbeitsweise ist potentiell unsicher, weil eine Klasse von Objekten auf ein einziges Element (den Namen) abgebildet wird. Solange es nur eine passende Schnittstelle gibt, ist das harmlos. Aber bei zwei und mehr passenden Objekten wird die Datei auch auf alle angewandt. Ab dem zweiten Umbenennungsversuch gibt es natürlich Fehlermeldungen und Fehlfunktionen. Sicherer ist in solchen Fällen eine Selektion beispielsweise über <tt>PermanentMACAddress</tt>.
| |
| | |
| Hier wird auf Ungleichheit getestet, um USB/WLAN-Sticks, die leicht als zusätzliche zu den eingebauten Schnittstellen im System auftauchen könnten, von dieser Regel auszuschließen.
| |
| | |
| ==== Beispiel: WLAN ====
| |
| WLAN-Schnittstellen werden auf Ebene 2 nicht von systemd-networkd verwaltet. Man muss die Betriebsbereitstellung der Schnittstelle mit anderen Mitteln erledigen, siehe: [https://wiki.ubuntuusers.de/systemd/WLAN_mit_systemd-networkd/ WLAN mit systemd-networkd].
| |
| | |
| Eine WLAN-Schnittstelle, welche über das externe WLAN-Einrichtungsprogramm bereits auf Ebene 2 als Bridge-Port einer Netzwerkbrücke zugeordnet wurde, bedarf gar keiner weiteren Konfiguration per systemd-networkd.
| |
| | |
| Die Konfiguration einer betriebsbereiten WLAN-Schnittstelle auf Ebene 3 erfolgt dagegen genauso wie bei jeder anderen Schnittstelle.
| |
| | |
| === .network-Dateien ===
| |
| ==== Beispiel: Schnittstelle ignorieren ====
| |
| Die System-Schnittstelle <tt>lo</tt> kann genau wie jede andere Schnittstelle durch Zuweisung einer '''.network'''-Datei konfiguriert werden. Dies ist normalerweise gar nicht erforderlich. Zur Vermeidung von Fehlfunktionen durch irrtümliche Zuweisung einer unpassenden '''.network'''-Datei kann man beispielsweise diese Datei verwenden:
| |
| | |
| # /etc/systemd/network/00-lo-unmanaged.network</
| |
| [Match]
| |
| Name = lo
| |
|
| |
| [Link]
| |
| Unmanaged = yes
| |
| | |
| Diese Technik ist auch sinnvoll für andere Schnittstellen, wenn diese nicht durch systemd-networkd konfiguriert werden sollen bzw. wenn ein Konfigurationsversuch ggf. nach langer Wartezeit ohnehin scheitern würde.
| |
| | |
| ==== Beispiel: DHCP oder statische Konfiguration ====
| |
| Mit diesem Satz von '''.network'''-Dateien kann man beim Hochlauf des Systems über eine Option auf der Kommandozeile des Kernels den DHCP-Client steuern:
| |
| | |
| # /etc/systemd/network/60-dhcp-all-hardware.network</
| |
| # Alle Hardware-Schnittstellen per DHCP konfigurieren.</
| |
| # Voreinstellung. Wird benutzt, wenn "noDHCP" nicht angegeben wird.</
| |
| | |
| [Match]
| |
| KernelCommandLine =! noDHCP
| |
| Path = pci*
| |
|
| |
| [Network]
| |
| DHCP = ipv4
| |
| | |
| Zur Selektion der Hardware-Schnittstellen wird <tt>Path</tt> benutzt. Auch USB-Geräte schließt "<tt>pci*</tt>" mit ein, weil sie in der Regel über eine PCI/USB-Bridge in das System integriert sind. Bei exotischer Hardware kann es ggf. anders sein.
| |
| | |
| # /etc/systemd/network/60-dhcp-wlan-only.network</
| |
| # Alle WLAN-Schnittstellen (aber nur solche) per DHCP konfigurieren.</
| |
| | |
| [Match]
| |
| KernelCommandLine =! noDHCP=*wlan*
| |
| Path = pci*
| |
| Type = wlan
| |
|
| |
| [Network]
| |
| DHCP = ipv4
| |
| | |
| Wenn man auf der Kernel-Kommandozeile "<tt>noDHCP=wlan</tt>" angibt, passt diese Datei nicht. Aber vielleicht die nächste:
| |
| | |
| # /etc/systemd/network/60-dhcp-ethernet-only.network</
| |
| # Alle Ethernet-Hardware-Schnittstellen (aber nur solche) per DHCP konfigurieren.</
| |
| [Match]
| |
| KernelCommandLine =! noDHCP=*ether*
| |
| Path = pci*
| |
| Type = ether
| |
| #Type =! wlan
| |
|
| |
| [Network]
| |
| DHCP = ipv4
| |
| | |
| Diese Datei setzt voraus, dass <tt>Type=ether</tt> funktioniert, was bei Ubuntu 18.04 mit systemd-Version 237 nicht der Fall ist. Alternativ kann man voraussetzen, dass es nur die beiden Typen Ethernet und WLAN gibt, und dann <tt>Type=!wlan</tt> verwenden.
| |
| | |
| Wenn man auf der Kernel-Kommandozeile "<tt>noDHCP=ether</tt>" angibt, passt diese Datei nicht. Aber vielleicht die nächste:
| |
| | |
| # /etc/systemd/network/60-uplink-static.network</
| |
| # Nur die Hardware-Schnittstelle mit dem Namen "uplink" statisch konfigurieren.</
| |
| [Match]
| |
| KernelCommandLine = noDHCP=*
| |
| Path = pci*
| |
| Name = uplink
| |
|
| |
| [Network]
| |
| DHCP = no
| |
| Address = 192.168.1.20/24
| |
| Gateway = 192.168.1.1
| |
| DNS = 8.8.8.8
| |
| DNS = 8.8.4.4
| |
| | |
| Beachte: systemd-networkd ignoriert die Angaben bei <tt>DNS=</tt>! Zur Konfiguration der DNS-Namensauflösung kann man beispielsweise [https://wiki.ubuntuusers.de/systemd/systemd-resolved/ systemd-resolved] starten, welches dann die hier gemachten Angaben für seine Konfiguration benutzt.
| |
| | |
| == Start und Stopp ==
| |
| systemd-networkd kann nötigenfalls über diese Befehle verwaltet werden:
| |
| | |
| systemctl restart systemd-networkd.service
| |
| systemctl enable systemd-networkd.service
| |
| systemctl status systemd-networkd.service
| |
| systemctl stop systemd-networkd.service
| |
| systemctl disable systemd-networkd.service
| |
| | |
| systemd-networkd macht nichts, wenn … * … es schon läuft und per <tt>start</tt> gestartet wird. Wenn Änderungen übernommen werden sollen, muss man es stoppen und neu starten, der Befehl <tt>restart</tt> von '''systemctl''' macht genau dieses.
| |
| * … es läuft und man die Konfiguration ändert.
| |
| * … es gestoppt wird.
| |
| * … es beim erneuten Start bereits konfigurierte Schnittstellen findet. Lediglich neue Schnittstellen werden bearbeitet.
| |
| | |
| == Dienstprogramm networkctl ==
| |
| Dieses Programm funktioniert eingeschränkt auch dann, wenn systemd-networkd nicht läuft bzw. die systemd-Unit '''systemd-networkd.service''' inaktiv ist und mit sehr eingeschränkter Funktionalität sogar dann, wenn systemd nicht installiert ist.
| |
| | |
| === Zustand ermitteln ===
| |
| ==== Liste der im System vorhandenen Schnittstellen ====
| |
| Der Befehlsteil <tt>list</tt> ist optional:
| |
| | |
| # networkctl list
| |
| IDX LINK TYPE OPERATIONAL SETUP
| |
| 1 lo loopback carrier unmanaged
| |
| 2 cable ether no-carrier unmanaged
| |
| 3 radio wlan routable unmanaged
| |
| 6 HUB bridge no-carrier configuring
| |
| | |
| '''networkctl''' zeigt hier auch Schnittstellen an, welche gar nicht von systemd-networkd betreut werden. Die Angabe <tt>unmanaged</tt> ist zu lesen als: "Nicht von systemd-networkd verwaltet, aber möglicherweise von einem anderen Programm".
| |
| | |
| ==== Kurze Übersicht der aktiven IP-Konfiguration des Systems: ====
| |
| networkctl status
| |
| | |
| Zusätzlich wird auch ein Auszug der relevanten Meldungen aus dem Systemlog angezeigt.
| |
| | |
| ==== Ausführliche Übersicht der IP-Konfiguration einer Schnittstelle ====
| |
| Schnittstelle hier beispielhaft: lo
| |
| networkctl status lo
| |
| | |
| Hier wird auch angezeigt, welche '''.link'''- und '''.network'''-Datei tatsächlich zur Konfiguration der Schnittstelle verwendet wurde.
| |
| | |
| ==== Ausführiche Übersicht der aktiven IP-Konfiguration des Systems ====
| |
| networkctl status --all
| |
| | |
| === Schnittstelle löschen ===
| |
| Es können natürlich nur Software-Schnittstellen (hier als schlechtes Beispiel: lo) entfernt werden:
| |
| # networkctl delete lo # <- Ersetze "lo" durch anderen Namen! </
| |
| | |
| Dies funktioniert bei systemd in der Version 237 gar nicht.
| |
| | |
| Der vorstehende Befehl macht das, was man über diesen Befehl auch machen könnte:
| |
| # ip link del lo # <- Ersetze "lo" durch anderen Namen! </
| |
| | |
| === Schnittstelle aktualisieren ===
| |
| Bei Schnittstellen mit dynamischer IP-Konfiguration beispielsweise über DHCP kann man eine Aktualisierung auslösen:
| |
| # networkctl renew HUB
| |
| | |
| Dies funktioniert bei systemd in der Version 237 gar nicht.
| |
| | |
| === Schnittstelle ändern ===
| |
| Nach Änderung einer '''.network'''-Datei werden die Änderungen nicht automatisch übernommen. Man kann das für eine Schnittstelle (hier beispielhaft: HUB) mit diesem Befehl anstoßen:
| |
| # networkctl reconfigure HUB
| |
| | |
| Dies funktioniert bei systemd in der Version 237 gar nicht und in der Version 245 nicht immer wie erwartet, beispielsweise kann man über diese Methode nicht zuverlässig eine statisch zugewiesenen IP-Adresse ändern. Alternativ kann man die Software-Schnittstellen löschen und [https://wiki.ubuntuusers.de/systemd/networkd/#Start-und-Stopp systemd neu starten].
| |
| | |
| === Konfiguration erneut laden ===
| |
| Die erneute Auswertung aller (vielleicht geänderter) '''.netdev'''- und '''.network'''-Dateien kann man mit diesem Befehl erzwingen:
| |
| # networkctl reload
| |
| | |
| * Für jede '''.netdev'''-Datei ohne dazu passende Schnittstellen wird eine Schnittstelle angelegt.
| |
| * '''.netdev'''-Dateien werden ignoriert, wenn es bereits eine passende Schnittstelle gibt.
| |
| * '''.network'''-Dateien werden auf alle passenden Schnittstellen angewandt.
| |
| | |
| Dies funktioniert bei systemd in der Version 237 gar nicht und in der Version 245 nicht immer wie erwartet. Alternativ kann man die Software-Schnittstellen löschen und [https://wiki.ubuntuusers.de/systemd/networkd/#Start-und-Stopp systemd neu starten].
| |
| | |
| == Problembehebung ==
| |
| === Es funktioniert nicht! ===
| |
| Man überprüfe, ob die eingesetzte Version von systemd bereits die in diesem Artikel beschriebenen Eigenschaften besitzt. Die Version von systemd zeigt dieser Befehl:
| |
| systemd --version
| |
| | |
| Vor Version 245 können diese Befehle bzw. Schlüsselworte (sowie weitere, hier nicht behandelte Eigenschaften) nicht verwendet werden:* '''.link'''-Dateien: <tt>Property</tt>, <tt>NamePolicy=keep</tt>
| |
| * '''.link'''- und '''.network'''-Dateien: Werte für <tt>Type</tt> im Abschnitt <tt>[Match]</tt> inkompatibel bei Versionen 237/245
| |
| * '''network'''-Dateien: <tt>WLANInterfaceType</tt>, für <tt>Type</tt> im Abschnitt <tt>[Route]</tt> sind nur zulässig: <tt>unicast</tt>, <tt>blackhole</tt>, <tt>unreachable</tt>, <tt>prohibit</tt>
| |
| * '''networkctl''': delete, renew, reconfigure, reload
| |
| | |
| === Es funktioniert immer noch nicht! ===
| |
| Diese Checkliste abarbeiten:# [https://wiki.ubuntuusers.de/systemd/networkd/#Start-und-Stopp Wurde systemd-networkd überhaupt gestartet?]
| |
| # Welche Meldungen von systemd-networkd stehen im Systemlog? <br/>journalctl -b -u systemd-networkd.service
| |
| # [https://wiki.ubuntuusers.de/systemd/networkd/#Ausfuehriche-bersicht-der-aktiven-IP-Konfiguration-des-Systems Welche Konfigurationsdateien wurden den Schnittstellen tatsächlich zugewiesen?] Wenn hier nicht die erwarteten Dateien angezeigt werden, sind die Selektionskriterien unzureichend oder falsch oder es gibt syntaktische Fehler in den Dateien.
| |
| # Gibt es Kompetenzstreitigkeiten mit anderen Programmen zur Netzwerk-Konfiguration?
| |
| # [https://wiki.ubuntuusers.de/systemd/networkd/#Start-und-Stopp systemd-networkd ist verwirrt und will neu gestartet werden!]
| |
| | |
| === Umbenennung einer Schnittstelle funktioniert nicht ===
| |
| udev hat eine eingebaute Restriktion: Schnittstellen werden nur einmal umbenannt! Diese einzige Chance wird bereits beim Hochlauf verbraucht.
| |
| | |
| Man muss also die geänderten Namensregeln bei bereits installierten Kerneln in deren '''initrd.img''' hinterlegen:
| |
| # update-initramfs -u
| |
| | |
| Bei der Installation neuer Kernel wird das automatisch mit erledigt.
| |
| | |
| Bei Ubuntu 18.04 mit systemd-Version 237 ist diese Restriktion fest in das Programm eingebaut und daher nicht abschaltbar.
| |
| | |
| Ab Ubuntu 20.04 mit systemd-Version 245 ist die Restriktion über die Einstellung "<tt>NamePolicy=keep</tt>"in der Datei '''/lib/systemd/network/99-default.link''' realisiert:
| |
| | |
| [Link]
| |
| NamePolicy=keep kernel database onboard slot path
| |
| | |
| Man kann diese Systemdatei mit einer eigenen Datei '''/etc/systemd/network/99-default.link''' maskieren, indem man die Systemdatei kopiert und in der Kopie das Wort "<tt>keep</tt>" entfernt, und diese Datei wie vorstehend gezeigt in die '''initrd.img''' einfügen.
| |
| | |
| === Verzögerung beim Hochlauf ===
| |
| Wenn die Konfiguration einer Schnittstelle misslingt, beispielsweise weil per DHCP keine Antwort eintrifft, blockiert die systemd-Unit '''systemd-networkd-wait-online.service''' bis zu 2 Minuten lang den Hochlauf bevor sie sich mit Fehler beendet. Wenn man anschliessend per networkctl eine Schnittstelle im Zustand "<tt>configuring</tt>" vorfindet, kann man die Zwangspause oft wie [https://wiki.ubuntuusers.de/systemd/networkd/#Beispiel-Schnittstelle-ignorieren oben beschrieben] abstellen.
| |
| | |
| = Setting up Systemd-Networkd =
| |
| | |
| [[Kategorie:Linux/Netzwerk/networkd]]
| |