[[Vorlage(Getestet, focal, bionic)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [https://netplan.io/ Netplan] {en} stellt eine auf dem [wikipedia:YAML:]-Format basierende Netzwerk-Konfigurations-Abstraktionsschicht für verschiedene Netzwerk-Dienste bereit. D.h. Netplan liest Konfigurationen im YAML-Format ein und übersetzt diese dann in die Konfigurations-Syntax der auf dem System laufenden Netzwerk-Dienste. Derzeit werden die Dienste [:systemd/networkd: systemd-networkd] und [:NetworkManager:] unterstützt. In der Netplan-Terminologie werden diese auch häufig als „Backend“ bezeichnet. Netplan richtet sich in erster Linie an Administratoren, Installations-Routinen oder jede andere Art der Betriebssystem- bzw. Software-Verteilung. In diesem Bereich kann es die Arbeit vereinfachen, weil die Netzwerk-Konfiguration nur noch in einer einzigen Datei anstatt auf mehrere verteilt gepflegt werden muss. Netplan wurde erstmals mit Ubuntu 17.10 eingeführt, ist eine Eigenentwicklung von Canonical und wird bis jetzt ausschließlich in Ubuntu verwendet. = Installation = Netplan ist in der Grundinstallation von Ubuntu enthalten[1] im Paket: {{{#!vorlage Paketinstallation netplan.io }}} = Arbeitsweise = Netplan folgt der Richtlinie, dass standardmäßig zunächst keinerlei Netzwerk-Konfigurationen generiert werden. Dies geschieht ausdrücklich nur für solche Netzwerkkomponenten, für die eine Netplan-Konfiguration im YAML-Format vorliegt. == Konfiguration == Die Konfiguration von Netplan erfolgt über Dateien mit der Endung .yaml in den Verzeichnissen: * '''/lib/netplan/''' (Dateien der Distribution) * '''/etc/netplan''' (für eigene Konfigurationsdateien) * '''/run/netplan''' (wird zur Laufzeit des Systems anlegt), Dateien in später genannten Verzeichnissen maskieren gleichnamige Dateien in früher genannten Verzeichnissen und die Dateien werden in lexikographischer Reihenfolge bearbeitet. Bei einer Desktop-Installation besteht die Konfiguration für Netplan standardmäßig nur aus der Konfigurationsdatei '''/etc/netplan/01-network-manager-all.yaml''' mit folgendem Inhalt: {{{#!code yaml # Let NetworkManager manage all devices on this system network: version: 2 renderer: NetworkManager }}} `network` ist der oberste Knoten, also alle physischen Netzwerkschnittstellen. `version: 2` gibt die YAML-Version an, wobei `version: 2` bedeutet, dass YAML 1.1 benutzt wird, was der Standard für Netplan ist. `renderer: NetworkManager` besagt, dass die Kontrolle über die Netzwerkschnittstellen an den NetworkManager abgegeben wird. Die andere Alternative ist `networkd` für systemd-networkd. Dies wäre auch der Standardrenderer, wenn keiner angegeben wird. {{{#!vorlage Hinweis Die Einrückung gehört zur Syntax des YAML-Formats und muss konsequent angewendet werden. Um das Risiko syntaktischer Fehler beim Erstellen einer '''yaml-Datei''' möglichst gering zu halten, sollte man im Editor die Anzeige von Leerzeichen einschalten. Dies ist z.B. für [:Nano:] mittels Tastenkombination [[Vorlage(Tasten, alt+p)]] möglich. Hilfreich bei der Fehlersuche in einer '''*.yaml-Datei''' ist außerdem die [:Pakete_installieren: Installation] von '''yamllint''', welches die Überprüfung der Syntax erlaubt. }}} Möchte man eigene Konfigurationsdateien schreiben, so legt man sie im Verzeichnis '''/etc/netplan/''' ab. Der Name der Datei darf beliebig sein, muss aber die Endung '''.yaml''' haben. Die Dateien werden in lexikographischer Reihenfolge gelesen. Hat man z.B. zwei Dateien '''01-foo.yaml''' und '''02-bar.yaml''', würde zuerst '''01-foo.yaml''' gelesen, dann '''02-bar.yaml'''. Sind in den Dateien widersprüchliche / überlappenden Konfigurationen enthalten, wird immer die Konfiguration der später gelesenen Datei genutzt. === Beispiel: statische Netzwerkkonfiguration === {{{#!code yaml network: version: 2 renderer: networkd ethernets: enp1s0: addresses: - 10.10.10.2/24 - 2001:DB8::5/64 dhcp4: no routes: - to: 0.0.0.0/0 #Standardroute für IPv4 via: 10.10.10.1 - to: ::/0 #Standardroute für IPv6 via: 2001:DB8::1 nameservers: addresses: [10.10.10.1, 1.1.1.1, 2001:470:20::2] }}} Im Beispiel wird der Ethernetschnittstelle `enp1s0` die IPv4-Adresse `10.10.10.2` zugewiesen, DHCP deaktiviert, als Gateway `10.10.10.1` und als DNS-Server `10.10.10.1`, `1.1.1.1.` und `2001:470:20::2` festgelegt. Für die Netzwerkschnitte ist dann systemd-networkd zuständig. Als IPv6-Adresse wird `2001:DB8::5/64` festgelegt, Gateway ist `2001:DB8::1`. == Ausführung == Die Übersetzung der Konfigurationen erledigt Netplan früh während des System-Starts, mittels [https://reposcope.com/man/de/7/systemd.generator systemd.generator-Programs] und legt die so erzeugten Konfigurationen im Verzeichnis '''/run''' an und überlässt Kontrolle und Verarbeitung anschließend dem jeweils spezifischen Netzwerk-Dienst. Darüber hinaus kann man Netplan noch mittels der drei folgenden Befehle im laufenden System ausführen: {{{#!vorlage Befehl sudo netplan generate }}} Generiert aus den vorhandenen YAML-Dateien die Konfigurations-Dateien für die angegebenen Netzwerk-Dienste, legt diese unterhalb des Verzeichnisses '''/run/...''' ab, veranlasst aber noch nicht die Anwendung der Konfigurationen durch die Netzwerk-Dienste. Damit lässt sich also zunächst testen, ob aus der YAML-Datei eine valide Backend-Konfiguration hervorgeht. {{{#!vorlage Befehl sudo netplan apply }}} Generiert aus den vorhandenen YAML-Dateien die Konfigurations-Dateien für die angegebenen Netzwerk-Dienste, legt diese unterhalb des Verzeichnisses '''/run/...''' ab und veranlasst die Netzwerkdienste diese Konfigurationen sofort anzuwenden. {{{#!vorlage Befehl sudo netplan try -timeout 180 }}} Veranlasst ebenso wie `netplan apply` die unmittelbare Anwendung der Konfiguration, setzt sie aber nach Ablauf der hinter `-timeout` angegebenen Sekunden wieder automatisch auf die vorherige Konfiguration zurück. Der Nutzer kann die Konfiguration innerhalb dieser Zeitspanne interaktiv annehmen oder ablehnen. Wird `-timeout` nicht angegeben so beträgt das Zeitintervall standardmäßig 120 Sekunden. Die Nutzung von `netplan try` ist damit insbesondere sinnvoll, wenn man neue Netzwerkkonfigurationen auf einem System per Fernwartung einrichten will. Fügt man allen drei Befehlen noch die Option `-debug` hinzu, so erhält man ausführlichere Informationen über den Ablauf des Prozesses. = Verhältnis von Netplan-Konfigurationen in /run zu Konfigurationen der Backends in /etc = Die von Netplan beim Systemstart im Verzeichnis '''/run''' angelegten Konfigurationen für die jeweils spezifischen Netzwerk-Dienste, werden durch etwaig konkurrierende Konfigurationen in den jeweiligen Verzeichnissen unterhalb von '''/etc''' verdrängt. Möchte man sich als Anwender also nicht mit der Syntax von Netplan auseinandersetzen, so kann man [:systemd/networkd: systemd-networkd] oder [:NetworkManager:] einfach wie gewohnt direkt konfigurieren. Für Ubuntu-Desktop-Systeme ist dies für [:NetworkManager:] ohnehin standardmäßig der Fall (s.o. [#Konfiguration Konfiguration]). {{{#!vorlage Hinweis Dies gilt nur im Verhältnis zu von Netplan unterstützten Backends. Installiert man dagegen '''ifupdown''', um Netzwerkschnittstellen mittels [:interfaces: /etc/network/interfaces] konfigurieren zu können, muss man Netplan entweder deaktivieren oder deinstallieren, um Konflikte durch konkurrierende Konfigurationen von Netplan und ifupdown sicher zu vermeiden. }}} = Netplan deaktivieren = Die Deaktivierung von Netplan, um z.B. stattdessen zur Konfiguration des Netzwerks über die Datei [:interfaces: /etc/network/interfaces] zu wechseln, ist im Wikiartikel [:Netplan/Deaktivieren: Netplan Deaktivieren] beschrieben. = Links = == intern == * [:NetworkManager:] - Standard-Netzwerkdienst auf Ubuntu-Desktop-Systemen * [:systemd/networkd: systemd-networkd] - Standard-Netzwerkdienst auf Ubuntu-Server-Systemen, ist aber auch auf Desktop-Systemen vorinstalliert * [:interfaces: /etc/network/interfaces] - Wurde bis einschließlich Ubuntu 17.04 standardmäßig auf Desktop- und auf Server-Systemen zur textbasierten Nextwerk-Konfiguration genutzt == extern == * [https://netplan.io/ Projektseite] {en} inklusive Dokumentation * [man:netplan:Manpage] {en} für Ubuntu für Netplan * [launchpad:netplan:Launchpad-Seite] zu Netplan #tag: Netzwerk, System