ubuntuusers.de

NetworkManager ohne GUI

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Wiki/Icons/terminal.png

NetworkManager ist für Rechner ohne graphische Desktops, also z.B. für

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 /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.

Hinweis:

Mit dem Begriff Konsole ist hier die Eingabe am 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]:

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:

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:

nmcli device
nmcli connection 

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:

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:

#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

#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.

Wichtige Variablen in der Konfigurationsdatei
Abschnitt Variable Funktion
connection id bezeichnet den Namen für die Verbindung und muss mit der realen Bezeichnung der Datei übereinstimmen.
connection uuid ist eine vom NetworkManager verwaltete 128-bit Identifizierung dieser Datei.
connection type beschreibt die Art der Verbindung: ethernet bedeutet IEEE802-3 (Kabel), wifi IEEE802-11 (Funk).
connection autoconnect =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 identifiziert den rechnereigenen Baustein, der für die Verbindung benutzt werden soll, über dessen Hardwareadresse.
ethernet, wifi mac-address-blacklist listet die Hardwareadressen der rechnereigenen Schnittstellen, welche für diese Verbindung gesperrt sind. Nach jeder Adresse folgt ein Semikolon.
ipv4 method 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.
ipv4 addresses1 eigene IP Netzmaske Gateway
10.0.0.42 10 (für 255.192.0.0) 10.0.0.1
ipv4 addresses2 (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 listet die IPv4-Adressen der DNS-Server. Nach jeder IP-Adresse folgt ein Semikolon.
ipv4 gateway ist die Adresse des Gateway Servers.
wifi ssid ist der Klartext-Name des WLAN-Netzes (SSID).
wifi mode bedeutet Modus des WLAN-Netzes: infrastructure bzw. adhoc
wifi seen-bssids 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 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 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 beschreibt Art der Verschlüsselung des WLAN-Netzes.
wifi-sec psk 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.

  2. Verwendung des in mncli eingebauten interaktiven Verbindungs-Editor, dessen Bedienung exemplarisch hier im Abschnitt „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.

  3. 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.

  4. 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:

#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:

#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 

Achtung!

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.

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:

nmcli general 
  • Netzwerk generell ein- bzw. ausschalten:

nmcli networking on    # bzw. off statt on 
  • Funk ein-/ausschalten: (wwan steht für Telefon-Netze, wifi für IEEE802-11.)

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:

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:

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:

nmcli connection up VERBINDUNGSNAME 
  • Alternative Methode zum Verbinden:

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:

nmcli device show GERÄT 
  • Falls man die Ausgabe dieses Befehls in einem Skript verwenden möchte, verwendet man besser:

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:

    • NetworkManager Reference Manual 🇬🇧 Hier die passende Version lt. folgender Tabelle wählen!

      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

Diese Revision wurde am 27. Dezember 2022 08:39 von Femtom erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, Server, Shell