linux-rhel-centos-fedora networking networkmanager systemd-networkd rhel rocky-linux

NetworkManager vs. systemd-networkd on RHEL (Artikel 076)

Analyse der Netzwerk-Stacks in RHEL. Warum NetworkManager der Standard ist und wann sich der Wechsel auf das minimalistische systemd-networkd lohnt.

# Networking on RHEL: Den richtigen Stack wählen

TL;DR / Management Summary In RHEL und Rocky Linux ist der NetworkManager (NM) der unangefochtene Standard. Er ist mächtig, unterstützt komplexe VPNs und WLANs und ist tief in die Enterprise-Management-Tools integriert. Dennoch gewinnt systemd-networkd an Bedeutung für minimalistische Cloud-Images und Container-Hosts. Empfehlung: Bleiben Sie bei NetworkManager für 95% Ihrer Server. Wechseln Sie nur zu systemd-networkd, wenn jede Millisekunde Boot-Zeit zählt und Sie absolute Einfachheit brauchen.


# 1. Einführung & Architektur

Zwei Welten, ein Ziel.

  • NetworkManager: Ein dynamischer Dämon, der auf Events reagiert und Profile (connections) verwaltet. Er nutzt traditionell ifcfg-* Dateien oder das moderne Keyfile-Format.
  • systemd-networkd: Ein statischer, extrem schlanker Dienst, der INI-Dateien in /etc/systemd/network/ liest.

# Vergleich (Mermaid)

graph TD
    A[Network Hardware] --> B[Linux Kernel]
    B -->|Option 1| C[NetworkManager]
    B -->|Option 2| D[systemd-networkd]
    C -->|Tool| C1[nmcli / nmtui]
    D -->|Tool| D1[networkctl]
    C -->|Backend| E[WPA Supplicant / Libreswan]
    D -->|Backend| F[Native systemd logic]

# 2. Der RHEL Standard: NetworkManager (Keyfiles)

Weg von ifcfg.

Früher nutzte RHEL /etc/sysconfig/network-scripts/ifcfg-eth0. Ab RHEL 9 sind diese veraltet (deprecated). Der neue Standard sind Keyfiles in /etc/NetworkManager/system-connections/.

# Beispiel: Statische IP via nmcli (generiert Keyfile)

sudo nmcli con add type ethernet con-name static-eth0 ifname eth0 ip4 192.168.1.10/24 gw4 192.168.1.1

# 3. Wechsel zu systemd-networkd

Wenn weniger mehr ist.

In sehr kleinen VMs oder spezialisierten Appliances kann man NetworkManager deaktivieren.

# Schritt 1: NetworkManager stoppen

sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
sudo systemctl mask NetworkManager

# Schritt 2: systemd-networkd konfigurieren

Erstellen Sie /etc/systemd/network/20-eth0.network:

[Match]
Name=eth0

[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
DNS=1.1.1.1

# Schritt 3: Dienst starten

sudo systemctl enable --now systemd-networkd
sudo systemctl enable --now systemd-resolved

# 4. Day-2 Operations: Management

Status prüfen.

Feature NetworkManager systemd-networkd
CLI Tool nmcli networkctl
GUI Tool nmtui Keine
Boot Speed Mittel Extrem schnell
Komplexität Hoch Niedrig

# NetworkManager Status

nmcli connection show
nmcli device status

# systemd-networkd Status

networkctl list
networkctl status eth0

# 5. Troubleshooting & “War Stories”

Wenn die Verbindung nach dem Wechsel stirbt.

# Story 1: “Der DHCP-Zombie”

Symptom: Nach dem Wechsel zu systemd-networkd bekommt das Interface zwei IPs: Eine statische und eine via DHCP. Ursache: Der NetworkManager wurde nur gestoppt, aber nicht deaktiviert oder es läuft noch ein alter dhclient. Lösung: Deaktivieren Sie NM vollständig (mask) und beenden Sie alle dhclient Prozesse manuell.

# Story 2: “Proxmox Cloud-Init Konflikt”

Symptom: Eine RHEL-VM in Proxmox überschreibt nach jedem Reboot die Netzwerkeinstellungen. Ursache: Proxmox sendet Cloud-Init Daten. Wenn Cloud-Init für NetworkManager konfiguriert ist, aber systemd-networkd läuft, entsteht Chaos. Lösung: Konfigurieren Sie Cloud-Init explizit für den gewünschten Renderer in /etc/cloud/cloud.cfg.d/99-custom-networking.cfg: system_info: { network: { renderers: ['networkd'] } }.


# 6. Fazit & Empfehlung

  • RHEL/Rocky Server: Bleiben Sie bei NetworkManager. Die Integration in Tools wie Cockpit und Ansible ist zu gut, um darauf zu verzichten.
  • Minimalist / Edge: Nutzen Sie systemd-networkd, wenn Sie Speicherplatz sparen und den Bootvorgang beschleunigen müssen.
  • Wichtig: Mischen Sie niemals beide Systeme auf einem Host!

# Anhang: Cheatsheet

Aufgabe NetworkManager systemd-networkd
Interface Up nmcli dev connect <if> ip link set <if> up
Route prüfen `nmcli dev show grep ROUTE`
DNS prüfen `nmcli dev show grep DNS`
Config Reload nmcli con reload networkctl reload