GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Beginnen Sie mit NetworkManager unter Linux

Die aktuellsten Linux-Distributionen  Verwenden Sie NetworkManager zum Erstellen und Verwalten von Netzwerkverbindungen. Das heißt, ich muss es als Systemadministrator verstehen. In einer Reihe von Artikeln werde ich mitteilen, was ich bisher gelernt habe und warum ich denke, dass NetworkManager eine Verbesserung gegenüber früheren Optionen darstellt.

Red Hat führte NetworkManager im Jahr 2004 ein, um die Netzwerkkonfiguration und -verbindungen, insbesondere drahtlose Verbindungen, zu vereinfachen und zu automatisieren. Die Absicht war, Benutzer von der Aufgabe zu entlasten, jedes neue drahtlose Netzwerk manuell zu konfigurieren, bevor es verwendet wird. NetworkManager kann kabelgebundene Netzwerkverbindungen ohne Schnittstellenkonfigurationsdateien verwalten, obwohl es Netzwerkverbindungsdateien für drahtlose Verbindungen verwendet.

In diesem Artikel werde ich untersuchen, was NetworkManager ist und wie man ihn verwendet, um Netzwerkverbindungen und Geräte für Linux-Hosts anzuzeigen. Ich werde dabei sogar ein paar Probleme lösen.

Was NetworkManager ersetzt

NetworkManager ist ein Ersatz für frühere Netzwerkverwaltungstools. Der ursprüngliche Schnittstellenkonfigurationsbefehl, ifconfig , und seine Schnittstellenkonfigurationsdateien sind veraltet. Sie können dies in der ifconfig sehen man-Seiten, die einen Hinweis enthalten, der genau das besagt.

Die ip ersetzt den ifconfig Befehl und führt im Wesentlichen die gleichen Aufgaben aus. Beide Befehle existieren seit einiger Zeit nebeneinander, sodass Systemadministratoren einen von beiden verwenden können, wodurch Skripte von ifconfig abhängig bleiben funktionell. Obwohl die Manpages noch nicht darauf hinweisen, ist die Datei ifconfig Befehl ist veraltet, und NetworkManager hat es in der Praxis so gemacht.

Es ist jetzt an der Zeit, diese Skripte neu zu schreiben, da die Verwendung von NetworkManager-Befehlen am sinnvollsten ist.

So funktioniert NetworkManager

NetworkManager wird als systemd-Dienst ausgeführt und ist standardmäßig aktiviert. NetworkManager arbeitet mit D-Bus zusammen, um Netzwerkschnittstellen zu erkennen und zu konfigurieren, wenn sie an den Linux-Computer angeschlossen werden. Diese Plug-and-Play-Verwaltung von Netzwerkschnittstellen macht das Einstecken in neue Netzwerke – sowohl kabelgebunden als auch kabellos – für den Benutzer ganz einfach. Wenn zuvor installierte Netzwerkschnittstellen während des Linux-Starts erkannt werden, werden sie genau wie ein Gerät behandelt, das angeschlossen wird, nachdem das System bereits hochgefahren ist und läuft. Das Behandeln aller Geräte als Plug-and-Play in jeder Instanz erleichtert die Handhabung dieser Geräte für das Betriebssystem, da es nur eine Codebasis gibt, um mit beiden Umständen umzugehen.

Der udev-Daemon erstellt einen Eintrag für jede im System installierte Netzwerkschnittstellenkarte (NIC) in der Netzwerkregeldatei. D-Bus signalisiert NetworkManager das Vorhandensein eines neuen Netzwerkgeräts – verkabelt oder drahtlos. NetworkManager hört dann auf den Datenverkehr auf dem D-Bus und reagiert, indem es eine Konfiguration für dieses neue Gerät erstellt. Eine solche Konfiguration wird standardmäßig nur im RAM gespeichert und ist nicht dauerhaft. Es muss bei jedem Booten des Computers erstellt werden.

NetworkManager verwendet die Informationen von D-Bus, um jede NIC zu initialisieren. Es sucht zuerst nach Konfigurationsdateien, die eine dauerhaftere statische Konfiguration bieten. Bei der Benachrichtigung über ein neues Gerät prüft NetworkManager, ob alte Netzwerkschnittstellen-Konfigurationsdateien (ifcfg-* ) in /etc/sysconfig/network-scripts . Das Plug-in ifcfg-rh ermöglicht die Verwendung dieser Legacy-Dateien für die Abwärtskompatibilität.

Als Nächstes sucht NetworkManager nach seinen eigenen Schnittstellenverbindungsdateien, die sich in /etc/NetworkManager/system-connections directory befinden Verzeichnis. Die meisten Distributionen, einschließlich Fedora, speichern ihre Netzwerkverbindungsdateien in /etc/NetworkManager/system-connections directory Verzeichnis, wobei der Name des Netzwerks als Dateiname verwendet wird.

Beispielsweise verwendete mein System76 Oryx Pro-Laptop ursprünglich POP!_OS . Ich habe dies durch Fedora ersetzt, das derzeit in Version 35 ist, und jede drahtlose Verbindung, die ich damit hergestellt habe, hat eine Datei in /etc/NetworkManager/system-connections directory . Diese führen Aufzeichnungen über die Service Set Identifier (SSID) und WLAN-Passwörter für jedes Netzwerk. Der DHCP-Server (Dynamic Host Configuration Protocol) im drahtlosen Router stellt die restlichen Netzwerkkonfigurationsdaten für diese drahtlosen Verbindungen bereit. Da diese Dateien Passwörter enthalten, können sie aus Sicherheitsgründen nur vom Root-Benutzer gelesen/geschrieben werden, genau wie die Systemkontodateien /etc/passwd und /etc/shadow .

Das Verzeichnis /etc/NetworkManager/system-connections directory Auf diesem Laptop befanden sich Dateien für das kabelgebundene Netzwerk sowie für jedes der drahtlosen Netzwerke, mit denen ich verbunden war. Die Struktur dieser Dateien unterscheidet sich von der alten ifcfg Dateien, aber sie sind im reinen ASCII-Textformat und sind lesbar und leicht verständlich.

Dieser Prozess ist sequenzsensitiv. Der erste gefundene Satz von Konfigurationsdateien wird verwendet. Wenn keine Konfigurationsdateien gefunden werden, generiert NetworkManager eine Konfiguration unter Verwendung der Daten von einem DHCP-Server. Wenn keine Schnittstellenkonfigurationsdatei vorhanden ist, führt das Anschließen eines neuen Geräts oder Verbinden mit einem neuen drahtlosen Netzwerk dazu, dass udev NetworkManager über das neue Gerät oder die neue drahtlose Verbindung benachrichtigt. In Fedora bis Version 28 erstellt NetworkManager die neue Schnittstellenkonfigurationsdatei. Ab Fedora 29 und höher erstellt NetworkManager nur die Verbindung und keine Schnittstellenkonfigurationsdatei.

Wenn keine Konfigurationsdateien oder kein DHCP-Server gefunden werden, ist keine Netzwerkverbindung möglich.

Oberflächenkonfiguration anzeigen

Das Befehlszeilen-Schnittstellenprogramm von NetworkManager, nmcli, bietet mehrere Optionen, um den aktuellen Status der im Host installierten Netzwerkschnittstellenhardware sowie die derzeit aktiven Verbindungen zu ermitteln. Das nmcli-Programm kann das Netzwerk auf jedem Host verwalten, unabhängig davon, ob es eine grafische Benutzeroberfläche (GUI) verwendet oder nicht, sodass es auch entfernte Hosts über eine Secure Shell (SSH)-Verbindung verwalten kann. Es funktioniert sowohl mit kabelgebundenen als auch mit kabellosen Verbindungen.

Ich beginne mit einigen grundlegenden Informationen zur Verwendung des nmcli-Tools. Ich verwende ein Fedora-System, das ich als Router eingerichtet habe, da ein Beispiel mit mehreren Netzwerkschnittstellen interessanter sein wird als ein einfacher Workstation-Host mit nur einer einzigen Schnittstelle.

Ich beginne mit dem einfachsten Befehl, nmcli ohne Optionen. Dieser einfache Befehl zeigt ähnliche Informationen wie der inzwischen veraltete ifconfig Befehl, einschließlich des Namens und Modells der NIC, der MAC-Adresse (Media Access Control) und der (Internet Protocol) IP-Adresse, und welche NIC als Standard-Gateway konfiguriert ist. Es zeigt auch die DNS-Konfiguration für jede Schnittstelle.

Der Befehl nmcli erfordert Administratorrechte. Die meisten Distributionen empfehlen die Verwendung von sudo aber ich wechsle einfach zum root Benutzer.

$ su -
# nmcli
enp4s0: connected to enp4s0
        "Realtek RTL8111/8168/8411"
        ethernet (r8169), 84:16:F9:04:44:03, hw, mtu 1500
        ip4 default, ip6 default
        inet4 45.20.209.41/29
        route4 0.0.0.0/0
        route4 45.20.209.40/29
        inet6 2600:1700:7c0:860:8616:f9ff:fe04:4403/64
        inet6 fe80::8616:f9ff:fe04:4403/64
        route6 2600:1700:7c0:860::/64
        route6 ::/0

enp1s0: connected to enp1s0
        "Realtek RTL8111/8168/8411"
        ethernet (r8169), 84:16:F9:03:E9:89, hw, mtu 1500
        inet4 192.168.10.1/24
        route4 192.168.10.0/24
        inet6 fe80::8616:f9ff:fe03:e989/64
        route6 fe80::/64

enp2s0: connected to enp2s0
        "Realtek RTL8111/8168/8411"
        ethernet (r8169), 84:16:F9:03:FD:85, hw, mtu 1500
        inet4 192.168.0.254/24
        route4 192.168.0.0/24
        inet6 fe80::8616:f9ff:fe03:fd85/64
        route6 fe80::/64

eno1: unavailable
        "Intel I219-V"
        ethernet (e1000e), 04:D9:F5:1C:D5:C5, hw, mtu 1500

lo: unmanaged
        "lo"
        loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536

DNS configuration:
        servers: 192.168.0.52 8.8.8.8 8.8.4.4
        interface: enp4s0

        servers: 192.168.0.52 8.8.8.8
        interface: enp1s0

        servers: 192.168.0.52 8.8.8.8
        interface: enp2s0

Verwenden Sie den Befehl nmcli device show um vollständige Informationen über bekannte Geräte und nmcli connection show zu erhalten um einen Überblick über aktive Verbindungsprofile zu erhalten. Konsultieren Sie die Manpages nmcli(1) und nmcli-examples(7) für vollständige Verwendungsdetails. Sie können auch den Hilfebefehl nmcli -h eingeben , als Root-Benutzer, um die grundlegenden nmcli der obersten Ebene anzuzeigen Befehle:

# nmcli -h
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
  -a, --ask                                ask for missing parameters
  -c, --colors auto|yes|no                 whether to use colors in output
  -e, --escape yes|no                      escape columns separators in values
  -f, --fields <field,...>|all|common      specify fields to output
  -g, --get-values <field,...>|all|common  shortcut for -m tabular -t -f
  -h, --help                               print this help
  -m, --mode tabular|multiline             output mode
  -o, --overview                           overview mode
  -p, --pretty                             pretty output
  -s, --show-secrets                       allow displaying passwords
  -t, --terse                              terse output
  -v, --version                            show program version
  -w, --wait <seconds>                     set timeout waiting for finishing operations

OBJECT
  g[eneral]       NetworkManager's general status and operations
  n[etworking]    overall networking control
  r[adio]         NetworkManager radio switches
  c[onnection]    NetworkManager's connections
  d[evice]        devices managed by NetworkManager
  a[gent]         NetworkManager secret agent or polkit agent
  m[onitor]       monitor NetworkManager changes

Beachten Sie, dass die Objekte bis auf das erste Zeichen ausgeschrieben oder abgekürzt werden können. Diese Objekte sind alle eindeutig, daher ist nur das erste Zeichen erforderlich, um ein einzelnes Objekt anzugeben.

Probieren Sie nmcli g aus um den allgemeinen Status anzuzeigen.

# nmcli g
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN    
connected  full          enabled  enabled  enabled  enabled

Diese Ausgabe zeigt nicht sehr viel. Ich weiß auch, dass der Host in diesem Fall keine WLAN-Hardware hat, daher ist dies ein irreführendes Ergebnis. Sie sollten nicht das nmcli g verwenden Befehl aus diesem Grund. Bessere Objektbefehle sind c [Verbindung] und d [evice], die ich am häufigsten verwende.

# nmcli c
NAME         UUID                                  TYPE      DEVICE
enp4s0       b325fd44-30b3-c744-3fc9-e154b78e8c82  ethernet  enp4s0
enp1s0       c0ab6b8c-0eac-a1b4-1c47-efe4b2d1191f  ethernet  enp1s0
enp2s0       8c6fd7b1-ab62-a383-5b96-46e083e04bb1  ethernet  enp2s0
enp0s20f0u7  0f5427bb-f8b1-5d51-8f74-ac246b0b00c5  ethernet  --    
enp1s0       abf4c85b-57cc-4484-4fa9-b4a71689c359  ethernet  --    
 
# nmcli d
DEVICE  TYPE      STATE        CONNECTION
enp4s0  ethernet  connected    enp4s0    
enp1s0  ethernet  connected    enp1s0    
enp2s0  ethernet  connected    enp2s0    
eno1    ethernet  unavailable  --        
lo      loopback  unmanaged    --        

Hier gibt es viele wirklich interessante Informationen. Beachten Sie, dass die letzten beiden Einträge den c verwenden Objektbefehl haben keine Einträge in der Gerätespalte. Dieses Ergebnis kann entweder bedeuten, dass sie nicht aktiv oder nicht vorhanden sind oder dass ein oder mehrere Konfigurationsfehler vorliegen.

Die zusätzlichen Informationen erhalten wir über das d Der Objektbefehl zeigt nicht einmal das Gerät enp0s20f0u7 an. Es zeigt auch das Gerät eno1 (ein Motherboard-Gerät), das nicht mit c angezeigt wurde Objektbefehl.

Ihre Ausgabe sollte eher so aussehen, obwohl der Gerätename anders sein wird und von der spezifischen Position auf dem PCI-Bus abhängt, mit dem die NIC verbunden ist.

# nmcli c
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  6e6f63b9-6d9e-3d13-a3cd-d54b4ca2c3d2  ethernet  enp0s3
# nmcli d
DEVICE  TYPE      STATE      CONNECTION        
enp0s3  ethernet  connected  Wired connection 1
lo      loopback  unmanaged  --                

Es scheint, dass ich ein paar Anomalien zu erforschen habe. Zuerst möchte ich wissen, welches Gerät enp0s20f0u7 in der Verbindungsliste ist. Da NetworkManager dieses Gerät in der Geräteliste nicht erkennt, gibt es wahrscheinlich eine Netzwerkkonfigurationsdatei in /etc/sysconfig/network-scripts obwohl auf dem Host kein solches Hardwaregerät vorhanden ist. Ich überprüfte dieses Verzeichnis, fand die Interface-Konfigurationsdatei und zeigte den Inhalt an.

# ls -l
total 20
-rw-r--r-- 1 root root 352 Jan  2  2021 ifcfg-eno1
-rw-r--r-- 1 root root 419 Jan  5  2021 ifcfg-enp0s20f0u7
-rw-r--r-- 1 root root 381 Jan 11  2021 ifcfg-enp1s0
-rw-r--r-- 1 root root 507 Jul 27  2020 ifcfg-enp2s0
-rw-r--r-- 1 root root 453 Jul 27  2020 ifcfg-enp4s0

cat ifcfg-enp0s20f0u7
# Interface configuration file for ifcfg-enp0s20f0u7
# This is a USB Gb Ethernet dongle
# This interface is for the wireless routers
# Correct as of 20210105
TYPE="Ethernet"
BOOTPROTO="static"
NM_CONTROLLED="yes"
DEFROUTE="no"
NAME=enp0s20f0u7
UUID="fa2117dd-6c7a-44e0-9c9d-9c662716a352"
ONBOOT="yes"
HWADDR=8c:ae:4c:ff:8b:3a
IPADDR=192.168.10.1
PREFIX=24
DNS1=192.168.0.52
DNS2=8.8.8.8

Nachdem ich mir diese Datei angesehen hatte, erinnerte ich mich, dass ich eine Zeit lang einen USB-Gigabit-Dongle verwendet hatte, weil die auf diesem Host installierte Motherboard-NIC anscheinend ausgefallen war. Das war eine schnelle Lösung, und ich habe später eine neue Netzwerkkarte auf dem PCIe-Motherboard-Bus installiert, damit ich diese Schnittstellenkonfigurationsdatei entfernen konnte. Ich habe es jedoch nicht gelöscht; Ich habe es nach /root verschoben Verzeichnis, falls ich es jemals wieder brauche.

Beachten Sie die Kommentare, die ich verwendet habe, um sicherzustellen, dass mein zukünftiges Selbst oder ein anderer Systemadministrator verstehen würde, warum diese Datei existiert.

Die zweite Anomalie ist, warum der Eintrag für enp1s0 zweimal erscheint. Dies kann nur auftreten, wenn der NIC-Name in mehr als einer Schnittstellenkonfigurationsdatei angegeben ist. Also habe ich die folgenden Schritte ausprobiert, und tatsächlich taucht enp1s0 fälschlicherweise in ifcfg-eno1 auf Konfigurationsdatei sowie ifcfg-enp1s0 Datei.

# grep enp1s0 *
ifcfg-eno1:NAME=enp1s0
ifcfg-enp1s0:# Interface configuration file for enp1s0 / 192.168.10.1
ifcfg-enp1s0:NAME=enp1s0

# cat ifcfg-eno1
## Interface configuration file for eno1 / 192.168.10.1
## This interface is for the wireless routers
## Correct as of 20200727
TYPE="Ethernet"
BOOTPROTO="static"
NM_CONTROLLED="yes"
DEFROUTE="no"
NAME=enp1s0
ONBOOT="yes"
HWADDR=04:d9:f5:1c:d5:c5
IPADDR=192.168.10.1
PREFIX=24
DNS1=192.168.0.52
DNS2=8.8.8.8

Ich habe den NAMEN in NAME=eno1 geändert und NetworkManager neu gestartet. Die Änderungen in den Schnittstellenkonfigurationsdateien werden erst aktiviert, wenn ich NetworkManager neu starte. Die Geräte- und Verbindungsergebnisse sehen jetzt so aus. Ich verwende die integrierte NIC immer noch nicht, was wahrscheinlich in Ordnung ist, nachdem ich den falschen Namen aus ifcfg-eno1 entfernt habe Schnittstellenkonfigurationsdatei. Das erfordert eine Ausfallzeit für diesen Router.

# systemctl restart NetworkManager
# nmcli d
DEVICE  TYPE      STATE        CONNECTION
enp4s0  ethernet  connected    enp4s0    
enp1s0  ethernet  connected    enp1s0    
enp2s0  ethernet  connected    enp2s0    
eno1    ethernet  unavailable  --        
lo      loopback  unmanaged    --        
# nmcli c
NAME    UUID                                  TYPE      DEVICE
enp4s0  b325fd44-30b3-c744-3fc9-e154b78e8c82  ethernet  enp4s0
enp1s0  c0ab6b8c-0eac-a1b4-1c47-efe4b2d1191f  ethernet  enp1s0
enp2s0  8c6fd7b1-ab62-a383-5b96-46e083e04bb1  ethernet  enp2s0
eno1    abf4c85b-57cc-4484-4fa9-b4a71689c359  ethernet  --  

Eine weitere Option besteht darin, nur die aktiven Verbindungen anzuzeigen. Dies ist eine gute Option mit sauberen Ergebnissen, aber sie kann auch andere Probleme verschleiern, wenn Sie sie ausschließlich verwenden.

# nmcli connection show --active
NAME    UUID                                  TYPE      DEVICE
enp4s0  b325fd44-30b3-c744-3fc9-e154b78e8c82  ethernet  enp4s0
enp1s0  c0ab6b8c-0eac-a1b4-1c47-efe4b2d1191f  ethernet  enp1s0
enp2s0  8c6fd7b1-ab62-a383-5b96-46e083e04bb1  ethernet  enp2s0

Nachdem Sie den Gerätenamen in ifcfg-eno1 geändert haben Datei in die richtige, vermute ich, dass die NIC des Motherboards, eno1, wieder funktionieren wird. Ich werde damit experimentieren, wenn ich das nächste Mal eine Wartungssitzung auf diesem Host habe.

Ist das nicht interessanter als ein Host mit einer einzigen Netzwerkkarte? Dabei bin ich auf einige Probleme gestoßen.

Die Verwendung von NetworkManager-Tools zum Verwalten von Netzwerken wird im Red Hat Enterprise Linux (RHEL) 8-Dokument „Konfigurieren und Verwalten von Netzwerken“ behandelt.

Abschließende Gedanken

Ich bin ein Fan der „Wenn es nicht kaputt ist, repariere es nicht“-Philosophie. Aber selbst die einfachste Verwendung von NetworkManager über die Befehlszeile, das Anzeigen des aktuellen Status der Netzwerkgeräte und -verbindungen, hat mir zwei Anomalien in meinen vorherigen Konfigurationen gezeigt, die ich übersehen hatte. Ich bin jetzt ein Fan von NetworkManager. Die älteren Tools waren gut, aber NetworkManager ist besser; Die zusätzlichen Informationen, die es bietet, sind von unschätzbarem Wert.

In Teil 2 dieser Serie werde ich die Verwaltung von Netzwerkschnittstellen besprechen.


Linux
  1. Wie sind Sie zu Linux gekommen?

  2. Erste Schritte mit SSH unter Linux

  3. Beginnen Sie mit Cloud-Servern

  4. Erste Schritte mit Deepin Terminal unter Ubuntu Linux

  5. Verbinden von Linux Mint mit dem WiFi-Netzwerk

Beginnen Sie mit GNUPlot

Erste Schritte mit GIT unter Linux

Erste Schritte mit dem Linux-Betriebssystem

Podman-Tutorial – Erste Schritte mit Podman

Network Manager unter Linux mit Beispielen

Erste Schritte mit Arch Linux