Systemd/Networkd/Konfiguration
Systemd/Networkd/Konfiguration
Beschreibung
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
- Verzeichnisse
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
- Best Practice
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
- Dokumentation
Die Einstellmöglichkeiten sind in der Datei aufgelistet und werden ausführlich in der Manpage erklärt
man networkd.conf
Anwendung
.netdev-Dateien: Schnittstelle anlegen
Dateien mit der Endung auf .netdev werden bei jedem 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 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 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 [Bridge] ist hier optional
- Abhängig vom Typ (Kind=) 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 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 "LinkLocalAddressing=no" 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 "degraded" 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 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 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 PermanentMACAddress
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: 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 lo 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 Path benutzt
- Auch USB-Geräte schließt "pci*" 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 "noDHCP=wlan" 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 Type=ether 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 Type=!wlan verwenden
Wenn man auf der Kernel-Kommandozeile "noDHCP=ether" 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 DNS=! Zur Konfiguration der DNS-Namensauflösung kann man beispielsweise systemd-resolved starten, welches dann die hier gemachten Angaben für seine Konfiguration benutzt
Problembehebung
Konfiguration
Dateien
| Datei | Beschreibung |
|---|---|
Anhang
Siehe auch
Dokumentation
- Man-Page
Links
Projekt
Weblinks