NetworkManager ohne GUI
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
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.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
NetworkManager ist für Rechner ohne graphische Desktops, also z.B. für
Server ohne Desktop und ohne 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 /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
vonnetworkd
aufNetworkManager
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:
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.
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.
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.
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
undback
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
Links¶
NetworkManager - Hauptartikel