## [[Vorlage(Überarbeitung, 30.09.2017, NetworkManager/NetworkManager_ohne_GUI, kB)]] *** FERTIG *** [[Vorlage(getestet, bionic, focal )]] {{{#!vorlage Wissen [:Terminal#Virtuelle-Konsole:Arbeiten in der (virtuellen) Konsole] [:Editor#Konsole: Einen Editor im Terminal öffnen] [:chmod:Rechte einer Datei setzen] }}} [[Inhaltsverzeichnis]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] [:NetworkManager:] ist für Rechner ohne graphische [:Desktop:Desktops], also z.B. für * [wikipedia:Headless: Headless Server] * [:Server_Installation:Server] ohne Desktop und ohne [:Desktop:Window-Manager] (also nur eine Konsole) nicht konzipiert – aber trotzdem über das Kommandozeilen-Programm '''nmcli''' einsetzbar. Diese spezielle Anwendung wird hier beschrieben. NetworkManager hat Vorteile gegenüber anderen Verfahren, insbesondere bei einer WLAN-Verbindung, weil er die Verbindung zum Netzwerk nicht nur beim Hochfahren regelt (siehe [:Dienste:]), sondern auch im laufenden Betrieb ständig die Verbindung überwacht und wenn erforderlich nach Unterbrechungen auch wieder herstellt. Das macht NetworkManager auch für Server-Installationen interessant – als Ersatz für die Netzwerkkonfigurationen über die Datei '''[:interfaces:/etc/network/interfaces]'''. NetworkManager verwendet allerdings im Gegensatz zu '''ifupdown''' zur Legitimation von System-Operationen [:PolicyKit:], dieses sollte vom Administrator für seinen konkreten Einzelfall konfiguriert werden. Auch bei Rechnern mit graphischem Desktop können die hier vorgestellten Arbeitsweisen genutzt werden, beispielsweise bei der Fehlersuche. Die Möglichkeiten von '''nmcli''' und die dabei zu verwendende Kommandosprache sind versionsabhängig. Hier wird die mit Ubuntu 16.04 ausgelieferte Version 1.2.6 oder neuer vorausgesetzt. {{{#!vorlage Hinweis Mit dem Begriff `Konsole` ist hier die Eingabe am [wikipedia:Prompt:Shell-Prompt] (`cmdline`, `shell`) gemeint. Dieser ist nicht mit dem Programm [:Konsole:] aus KDE identisch! }}} = Installation bei einem Desktop-System = Bei einem Desktop-System ist der NetworkManager einschließlich '''nmcli''' bereits vorinstalliert. = Installation ohne Desktop = Bei einem nur über eine Konsole bedienbarem Rechner bedarf die Installation einer besonderen Vorgehensweise, da eine normale Installation des Paketes '''network-manager''' den vollen Umfang der jeweiligen Desktop-Pakete nachinstallieren würde – was auf einem Server meistens nicht erwünscht ist. Daher ist das folgende Vorgehen empfohlen. 1. Eine Verbindung zum Internet sollte bereits vorhanden sein, um den folgenden Befehl ausführen zu können[1]: {{{#!vorlage Befehl sudo apt-get --no-install-recommends install network-manager }}} 2. Nach der erfolgreichen Installation von NetworkManager muss die bisherige automatische Konfiguration des Netzwerkes angepasst werden: * Bei Ubuntu 16.04 muss die Konfiguration über '''ifupdown''' deaktiviert und für die Zukunft dauerhaft unterbunden werden: {{{#!vorlage Befehl sudo ifdown -a --exclude lo sudo mv /etc/network/interfaces /etc/network/interfaces.unused }}} * Bei Ubuntu-Systemen ab 17.10 muss [:Netplan:] umprogrammiert werden. In der Datei '''/etc/netplan/01-network-manager-all.yaml''' (Der Dateiname kann auch anders lauten!) muss der Wert für `renderer` von `networkd` auf `NetworkManager` geändert werden: {{{ # Let NetworkManager manage all devices on this system network: version: 2 renderer: NetworkManager }}} Weitere Konfigurationsdateien für [:Netplan:] sind zu entfernen oder unwirksam zu machen, danach ist die Netzwerkkonfiguration wie im Wiki zu [:Netplan:] beschrieben zu generieren. 3. Nach einem Neustart des Rechners übernimmt NetworkManager die Konfiguration des Netzwerkes. Wenn er einen DHCP-Server findet, wird auch gleich eine aktive Verbindung hergestellt; anderenfalls muss man gemäß den hier folgenden Anleitungen nun eine Konfigurationsdatei anlegen. 4. Man kann noch den alternativen Netzwerk-Konfigurator '''systemd-networkd''' deaktivieren. Hierzu setzt man die Systemd-Unit '''systemd-networkd.service''' àuf `disable` und stoppt sie. = NetworkManager einrichten = NetworkManager erstellt für jede von ihm verwaltete Netzwerkschnittstelle (sog. device) automatisch eine temporäre Konfiguration (sog. connection) und liest zusätzlich bereits vor dem Login eines Benutzers Konfigurationsdateien aus dem Verzeichnis '''/etc/NetworkManager/system-connections/'''. Anschließend versucht NetworkManager für jede von ihm verwaltete Netzwerkschnittstelle eine Verbindung zu aktivieren. Nach dem Login eines Benutzers werden keine Konfigurationsdateien aus dem HOME-Verzeichnis gelesen. (Das war früher anders!) Eine Übersicht der Netzwerkschnittstellen bzw. der möglichen Verbindungen erhält man auf einer Konsole mit den Befehlen: {{{#!vorlage Befehl nmcli device nmcli connection }}} {{{#!vorlage Hinweis Beachte: Man führt das Kommando '''nmcli''' nicht als ''root'', sondern als normaler Benutzer aus! NetworkManager verwendet [:PolicyKit:] zur Authentifizierung der Benutzer bei kritischen Systemoperationen. Die Vorgabe-Werte sind großzügig eingestellt; der Administrator eines Multi-User- bzw. Server-Systems sollte die Vorgaben mit seinen Sicherheits-Anforderungen abgleichen! }}} Das Programm '''nmcli''' unterstützt hinsichtlich seiner Kommandosprache die automatische Vervollständigung per Tab-Taste; man muss also z.B. nur '''nmcli c''' eingeben und (ggf. mehrmals) die Tab-Taste betätigen und kann sich so die möglichen Befehle zusammenbauen lassen. Eine neue Konfigurationsdatei für eine kabelgebundene Verbindung erstellt man auf einer Konsole mit dem Befehl: {{{#!vorlage Befehl nmcli connection add type ethernet ifname GERÄT }}} Dabei ist GERÄT eine der von '''nmcli device''' gelisteten Schnittstellen. Diese Methode der Datei weist automatisch ''root'' als Besitzer und Gruppe zu, sorgt für die richtigen Benutzerrechte (''0600'')[3], synchronisiert den Dateinamen mit dem Wert der Konfigurationsvariablen `id=...` und verwaltet die Datei innerhalb von NetworkManager unter ihrer UUID. Damit vermeidet man gegenüber der direkten Erzeugung einer passenden Datei im Verzeichnis '''/etc/NetworkManager/system-connections/''' viele Fehlermöglichkeiten. Der Dateiname für jede Konfigurationsdatei muss mit dem frei wählbaren Wert der Konfigurationsvariablen `id=...` in der Datei übereinstimmen; diese sind synchronisiert änderbar mit dem Befehl: {{{#!vorlage Befehl #nmcli connection modify ALTER-NAME connection.id NEUER-NAME nmcli connection modify ethernet-eth0 connection.id IntraNET }}} Praxistipp: Zur einfachen Unterscheidung von automatisch angelegten und bewusst angelegten Verbindungen kann man bei der Wahl des Namens reichlich Grossbuchstaben verwenden. == Kabelverbindung konfigurieren== Der Befehl {{{#!vorlage Befehl #nmcli connection add type ethernet ifname GERÄT nmcli connection add type ethernet ifname eth0 }}} erzeugt diese Datei '''/etc/NetworkManager/system-connections/ethernet-eth0''': {{{ [connection] id=ethernet-eth0 uuid=1a7f80db-a616-44b2-abb8-b4ec1fbb3413 type=ethernet interface-name=eth0 permissions= secondaries= [ethernet] mac-address-blacklist= [ipv4] dns-search= method=auto [ipv6] addr-gen-mode=stable-privacy dns-search= method=auto }}} Die leeren Zeilen sind für die Auswertung erforderlich! Die Zeilen in eckigen Klammern `[` bzw. `]` fassen die einzelnen Abschnitte zur Auswertung zusammen. Nachfolgend die wesentlichen Werte, soweit diese nicht selbsterklärend sind. {{{#!vorlage Tabelle <-5 rowclass="titel"; tablestyle="width: 95%";> Wichtige Variablen in der Konfigurationsdatei +++ <: rowclass="kopf"; cellstyle="width: 30px;" > Abschnitt <: cellstyle="width: 15%;"> Variable <^(-5> Funktion +++ <^:> connection <^(> id <^(-3> bezeichnet den Namen für die Verbindung und muss mit der realen Bezeichnung der Datei übereinstimmen. +++ <^:> connection <^(> uuid <^(-3> ist eine vom NetworkManager verwaltete 128-bit Identifizierung dieser Datei. +++ <^:> connection <^(> type <^(-3> beschreibt die Art der Verbindung: `ethernet` bedeutet IEEE802-3 (Kabel), `wifi` IEEE802-11 (Funk). +++ <^:> connection <^(> autoconnect <^(-3> `=false` verhindert die automatische Aktivierung dieser Verbindung. Beim Wert `true` oder wie hier fehlendem Eintrag wird die Verbindung bei Bedarf automatisch aktiviert. +++ <^:> ethernet <^(> mac-address <^(-3> identifiziert den rechnereigenen Baustein, der für die Verbindung benutzt werden soll, über dessen Hardwareadresse. +++ <^:> ethernet, wifi <^(> mac-address-blacklist <^(-3> listet die Hardwareadressen der rechnereigenen Schnittstellen, welche für diese Verbindung gesperrt sind. Nach jeder Adresse folgt ein Semikolon. +++ <^:> ipv4 <^(> method <^(-3> Beim Wert `auto` erfragt NetworkManager per DHCP eine IP und weitere Konfigurationsdaten; beim Wert `manual` werden mit zusätzlichen Variablen in diesem Abschnitt eine statische IP, Routen, Gateway und DNS-Server definiert. +++ <|2:> ipv4 <|2(> addresses1 <: cellstyle="width: 33%;" > eigene IP <: cellstyle="width: 33%;" > Netzmaske <: cellstyle="width: 33%;" > Gateway +++ <:> 10.0.0.42 <:> 10 (für 255.192.0.0) <:> 10.0.0.1 +++ <|2:> ipv4 <|2(> addresses2 <^(-3> (mit Nummer = 2 und folgende) beschreibt jeweils eine weitere IP-Adresse und deren Netzmaske, jedoch wird hier kein Gateway angegeben. +++ <:> 192.0.2.42 <:> 32 (für 255.255.255.255) <:> +++ <^:> ipv4 <^(> dns <^(-3> listet die IPv4-Adressen der DNS-Server. Nach jeder IP-Adresse folgt ein Semikolon. +++ <^:> ipv4 <^(> gateway <^(-3> ist die Adresse des Gateway Servers. +++ <^:> wifi <^(> ssid <^(-3> ist der Klartext-Name des WLAN-Netzes (SSID). +++ <^:> wifi <^(> mode <^(-3> bedeutet Modus des WLAN-Netzes: `infrastructure` bzw. `adhoc` +++ <^:> wifi <^(> seen-bssids <^(-3> listet die zum WLAN-Netz gehörenden Access-Points mit ihren MAC-Adressen (BSSID) an. Die BSSID wird im Gegensatz zur SSID vom Access-Point immer ausgesendet. So lassen sich auch versteckte Netzwerke zuordnen und einbinden. Nach jeder BSSID folgt ein Semikolon. +++ <^:> wifi <^(> mac-address-randomization <^(-3> enthält einen '''missverständlichen Schlüssel''' 0, 1 oder 2: `0` bedeutet „überlasse anderen die Entscheidung“; `1` bedeutet „feste MAC-Adresse“ (!); `2` bedeutet „veränderliche MAC-Adresse“. +++ <^:> wifi <^(> powersave <^(-3> enthält einen '''missverständlichen Schlüssel''' 0, 1, 2 oder 3 für die Energie-Einspar-Strategie: `0` bedeutet „verwende eine global definierte Strategie“; `1` bedeutet „nichts verändern“; `2` bedeutet „ausschalten“ und `3` bedeutet „einschalten“. +++ <^:> wifi-sec <^(> key-mgmt <^(-3> beschreibt Art der Verschlüsselung des WLAN-Netzes. +++ <^:> wifi-sec <^(> psk <^(-3> ist entweder ein WPA-Key mit genau 64 hexadezimalen Ziffern oder eine WPA-Passphrase mit 8-63 ASCII-Zeichen. }}} Zur Bedeutung weiterer Variablen sowie zur Verwendung des Abschnitts `[ipv6]` und weiterer Abschnitte siehe die Dokumentation von NetworkManager. == Konfigurationsdatei bearbeiten == Zur Bearbeitung kann man eine der folgenden Methoden anwenden: 1. Datei als ''root'' mit einen Texteditor[2] bearbeiten: * Man sollte dies __nicht__ bei laufendem NetworkManager machen, da man sonst inkonsistente Zustände provoziert. * Dies ist die mächtigste Methode, man kann aber auch leicht fehlerhafte Konfigurationen erstellen. 1. Verwendung des in '''mncli''' eingebauten interaktiven Verbindungs-Editor, dessen Bedienung exemplarisch hier im Abschnitt [#Statische „Statische IP definieren“] erläutert wird. * Hierbei profitiert man von dem in '''nmcli''' eingebauten Hilfesystem, den direkt verfügbaren Erläuterungen zu den Optionen und deren Werten und auch wegen der automatischen Befehls-Vervollständigung und der eingebauten Befehls-Historie. * Alle Möglichkeiten von NetworkManager sind zugänglich. * Die Eingaben werden geprüft und syntaktisch falsche Eingaben werden abgewiesen. 1. Ab Ubuntu 16.04: Verwendung des halbgraphischen Editors '''nmtui''', der mittels der NCURSES-Bibliothek die Daten aufbereitet: * Übersichtlicher als der interaktive Verbindungs-Editor von '''nmcli''', * aber weniger mächtig. 1. Einsatz eines graphischen Konfigurierwerkzeuges: * Erfordert installierten Desktop, * noch übersichtlicher und schöner als '''nmtui''', * aber noch weniger mächtig. == Statische IP definieren == Muss oder will man für IPv4 statische Adressen verwenden, so wird der Abschnitt `[ipv4]` angepasst, beispielsweise: {{{ [ipv4] address1=10.0.0.42/10,10.0.0.1 address2=192.0.2.42/32 dns=192.0.2.222;10.0.0.1; dns-search= method=manual }}} Man kann dies mit '''nmcli''' erledigen, indem man den interaktiven Verbindungs-Editor startet: {{{#!vorlage Befehl #nmcli connection edit VERBINDUNGSNAME nmcli connection edit ethernet-eth0 }}} Der interaktive Verbindungs-Editor versteht eine ganze Reihe von Befehlen, die wichtigsten sind: * `help` zum Aufruf von Hilfstexten. * `print` zur Anzeige von Variablen und Werten. * `goto` und `back` zum Navigieren zu einem Abschnitt und Verlassen des Abschnitts. * `set` zum Setzen von Werten. * `save` zur Speicherung der Datei. * `quit` zum Verlassen des Editors. Der Editor beherrscht die automatische Vervollständigung mit der Tab-Taste und führt eine Befehls-Historie. Die o.g. Veränderung des Abschnitts [ipv4] erreicht man durch diese Befehlsfolge: {{{ nmcli> goto ipv4 nmcli ipv4> set method manual nmcli ipv4> set addresses 10.0.0.42/10 nmcli ipv4> set addresses 192.0.2.42/32 nmcli ipv4> set gateway 10.0.0.1 nmcli ipv4> set dns 192.0.2.222 nmcli ipv4> set dns 10.0.0.1 nmcli ipv4> save nmcli ipv4> quit }}} Beachte: Die Variablen im Editor weichen teilweise von den in der Datei hinterlegten Optionen ab, vgl. `addresses` und `gateway` im Editor mit `address1` in der Datei. Zum Löschen eines Wertes, auch einer Adressliste, gibt man einen leeren Wert durch zweimaliges Betätigen der Eingabetaste ein. == WLAN-Verbindung konfigurieren == Für eine WLAN-Verbindung geht man im Prinzip genau so vor wie für eine Kabelverbindung, verwendet aber `type wifi` und muss die SSID des WLAN-Netzes angeben: {{{#!vorlage Befehl #nmcli connection add ifname GERÄT type wifi ssid SSID nmcli connection add ifname wlan0 type wifi ssid UbuntuUsers }}} Dieser Befehl erzeugt diese Datei '''/etc/NetworkManager/system-connections/wifi-wlan0''': {{{ [connection] id=wifi-wlan0 uuid=d63bfffb-b4f1-465f-af8e-b4cb0786a3eb type=wifi interface-name=wlan0 permissions= secondaries= [wifi] mac-address-blacklist= mac-address-randomization=0 seen-bssids= ssid=UbuntuUsers [ipv4] dns-search= method=auto [ipv6] addr-gen-mode=stable-privacy dns-search= method=auto }}} Anstelle des Abschnitts `[ethernet]` bei der Kabelverbindung wird hier ein Abschnitt `[wifi]` erzeugt; alle Abschnitte können mit dem interaktiven Verbindungs-Editor wie vorstehend beschrieben mit Optionen ausgestaltet werden. Ebenfalls bearbeitbar, jedoch nicht auslesbar, ist ein (in der frisch erzeugten Datei noch fehlender) Abschnitt `[wifi-sec]` zur Aufnahme der für eine verschlüsselte Kommunikation erforderlichen Angaben inklusive des Passwortes. Zur Nutzung der so erzeugten Verbindungsdatei muss man noch im Abschnitt `[wifi]` die Variable `mode` und im Abschnitt `[wifi-sec]` die Variablen `key-mgmt` und `psk` setzen; dies kann man mit dem interaktiven Verbindungs-Editor erledigen: {{{#nmcli connection edit VERBINDUNGSNAME nmcli connection edit wifi-wlan0 }}} {{{ nmcli> goto wifi nmcli 802-11-wireless> set mode infrastructure nmcli 802-11-wireless> back nmcli> goto wifi-sec nmcli 802-11-wireless-security> set key-mgmt wpa-psk nmcli 802-11-wireless-security> set psk Hier ist nichts geheim! nmcli 802-11-wireless-security> save nmcli 802-11-wireless-security> quit }}} {{{#!vorlage Warnung Der Vorgabewert `0` für die Variablen `mac-address-randomization` und `powersave` kann Fehlverhalten verursachen. Im Zweifel und im Fehlerfall sollte man diese Funktionalitäten ausschalten. }}} {{{#!vorlage Hinweis NetworkManager soll zwar die Begriffe `ethernet` und `802-3-ethernet` sowie `wifi` und `802-11-wireless` als Synonyme verwenden; jedoch funktioniert an manchen Stellen nur eine der jeweils alternativen Bezeichnungen. }}} = Beispiele: NM verwenden = == Genereller Status == * Aktuelle Netzwerk-Konfiguration anzeigen: {{{#!vorlage Befehl nmcli general }}} * Netzwerk generell ein- bzw. ausschalten: {{{#!vorlage Befehl nmcli networking on # bzw. off statt on }}} * Funk ein-/ausschalten: (`wwan` steht für Telefon-Netze, `wifi` für IEEE802-11.) {{{#!vorlage Befehl nmcli radio wwan off # bzw. on statt off nmcli radio wifi on # bzw. off statt on }}} Die drei letzten Befehle ändern in der Datei '''/var/lib/NetworkManager/NetworkManager.state''' den (auch über re-boot) gemerkten generellen Status von NetworkManager. == Ab/-Aufbau Verbindung == In den folgenden Befehlen sind natürlich VERBINDUNGSNAME bzw. GERÄT durch sinnvolle Angaben gemäß den Listen '''nmcli connection''' bzw. '''nmcli device''' zu ersetzen. * Aktive Verbindung beenden: {{{#!vorlage Befehl nmcli connection down VERBINDUNGSNAME }}} Beachte: Falls NetworkManager nach dem Abbau der Verbindung eine nutzbare Konfiguration für die Schnittstelle GERÄT findet, bei der `autoconnect` nicht ausgeschaltet wurde, so wird er automatisch mit der gefundenen Konfiguration die Schnittstelle wieder aktivieren. Das dauert einige Sekunden. Die „neue“ aktive Konfiguration kann durchaus wieder die gerade beendete alte oder eine andere sein. * Alternative Methode zum Beenden einer Verbindung: {{{#!vorlage Befehl nmcli device disconnect GERÄT }}} Beachte: Nach dem Abbau der über das GERÄT aktiven Verbindung wird NetworkManager nicht automatisch wieder eine Verbindung über dieses Gerät aufbauen. * Verbindung aktivieren: {{{#!vorlage Befehl nmcli connection up VERBINDUNGSNAME }}} * Alternative Methode zum Verbinden: {{{#!vorlage Befehl nmcli device connect GERÄT }}} Falls für die zu aktivierende Schnittstelle bereits eine andere Verbindung aktiv ist, so wird diese vor dem Aufbau der neuen Verbindung beendet. == Konfiguration anzeigen == * Konfiguration der Schnittstelle GERÄT anzeigen: {{{#!vorlage Befehl nmcli device show GERÄT }}} * Falls man die Ausgabe dieses Befehls in einem Skript verwenden möchte, verwendet man besser: {{{#!vorlage Befehl LANG=C nmcli -t device show GERÄT }}} NetworkManager zeigt per '''nmcli''' Informationen zu allen im System vorhandenen – auch für die von ihm nicht verwalteten – Netzwerkschnittstellen an. = Dokumentation = * Man-Pages: * nmcli als Programm: '''man nmcli''' * nmtui als Programm: '''man nmtui''' * Optionen für die Konfigurationsdateien: '''man nm-settings''' * NetworkManager-Projekt: * [https://developer.gnome.org/NetworkManager/ NetworkManager Reference Manual] {en} Hier die passende Version lt. folgender Tabelle wählen! {{{#!vorlage Tabelle Ubuntu-Version NM-version +++ 14.04 0.9.8.8 +++ 16.04 1.2.6 +++ 17.04 1.4.4 +++ 18.04 1.10.6 +++ 20.04 1.22.10 }}} = Links = * [:NetworkManager:] - Hauptartikel #tag: Netzwerk, Server, Shell