linux-rhel-centos-fedora vpn ipsec wireguard openvpn rhel networkmanager

VPN on RHEL: IPsec, WireGuard & OpenVPN (Artikel 084)

Integration von VPN-Clients in den RHEL NetworkManager. Erfahren Sie, wie Sie sichere Tunnel via IPsec (Libreswan), WireGuard und OpenVPN direkt über nmcli verwalten.

# VPN on RHEL: Professionelle Tunnel-Integration

TL;DR / Management Summary Während man unter Debian oft mit Standalone-Dämons arbeitet, integriert RHEL VPNs direkt in den NetworkManager. Dies ermöglicht ein nahtloses Umschalten von Profilen und eine einheitliche DNS-Verwaltung. Wir nutzen Libreswan für IPsec (Enterprise-Standard), das native Kernel-Modul für WireGuard und spezialisierte Plugins für OpenVPN. Das Ziel: Ein “Always-on” VPN, das sich automatisch verbindet, sobald das Netzwerk bereit ist.


# 1. Einführung & Architektur

Das VPN als Interface-Eigenschaft.

Im NetworkManager ist ein VPN kein Dienst, sondern eine Connection vom Typ vpn.

# Der VPN-Stack in RHEL (Mermaid)

graph LR
    A[Admin: nmcli] --> B[NetworkManager]
    B --> C{VPN Plugin}
    C -->|IPsec| D[Libreswan / xl2tpd]
    C -->|OpenVPN| E[NetworkManager-openvpn]
    C -->|WireGuard| F[Kernel Module]
    D/E/F --> G[Virtual Interface: tun0 / wg0]

# 2. IPsec mit Libreswan

Der Klassiker für Site-to-Site und Client-to-Site.

RHEL nutzt Libreswan als Standard-Implementierung für IPsec.

# Pakete installieren

sudo dnf install libreswan NetworkManager-libreswan

# Verbindung hinzufügen

sudo nmcli con add type vpn vpn-type libreswan con-name "Company-IPsec" \
    ifname "*" vpn.data "address=vpn.company.com, psk=SECRET_KEY, user=admin"

# 3. WireGuard: Modern und schnell

Direkt im Kernel.

WireGuard ist ab RHEL 9 nativ im Kernel enthalten.

# Verbindung erstellen (nmcli)

# 1. WireGuard Interface anlegen
sudo nmcli con add type wireguard con-name "WG-Office" ifname wg0 autoconnect yes

# 2. Private Key und IP setzen
sudo nmcli con mod "WG-Office" \
    wireguard.private-key "YOUR_PRIVATE_KEY" \
    ipv4.addresses 10.0.0.2/24 \
    ipv4.method manual

# 3. Peer (Server) hinzufügen
sudo nmcli con mod "WG-Office" \
    +wireguard.peers "public-key=SERVER_PUB_KEY,endpoint=vpn.company.com:51820,allowed-ips=10.0.0.0/24"

# 4. Day-2 Operations: Automatisierung & DNS

Der Tunnel im Alltag.

# Automatisches Verbinden

Stellen Sie sicher, dass das VPN startet, sobald das Ethernet-Interface up ist (VPN-Chaining).

sudo nmcli con mod "Internal-Ethernet" connection.secondaries "WG-Office"

# DNS-Priorität

Oft sollen interne Namen nur via VPN aufgelöst werden.

sudo nmcli con mod "WG-Office" ipv4.dns-priority -1

Ein negativer Wert in RHEL bedeutet höhere Priorität für dieses Interface.


# 5. Troubleshooting & “War Stories”

Wenn die Pakete im Tunnel stecken bleiben.

# Story 1: “Der MTU-Effekt bei IPsec”

Symptom: Ping funktioniert, aber HTTPS-Seiten oder dnf update hängen im VPN. Ursache: IPsec-Header vergrößern das Paket. Wenn das Netz kein PMTU (Path MTU Discovery) kann, werden Pakete lautlos verworfen. Lösung: MTU manuell senken: sudo nmcli con mod "Company-IPsec" vpn.data "mtu=1280".

# Story 2: “SELinux blockiert Key-Files”

Symptom: nmcli con up schlägt fehl mit einer vagen Fehlermeldung. In /var/log/messages steht etwas von “Permission Denied” für /etc/pki/... **Ursache**: Die Zertifikate oder Keys haben nicht das korrekte SELinux-Label für den NetworkManager. **Lösung**: restorecon -Rv /etc/pkiund sicherstellen, dass die Files für den Userroot` lesbar sind.


# 6. Fazit & Empfehlung

  • RHEL 9: Nutzen Sie WireGuard für Performance und IPsec (Libreswan) für Kompatibilität mit Cisco/Juniper/Sophos Gateways.
  • Plugins: Installieren Sie immer die passenden NetworkManager-* Plugins, anstatt die Daemons (openvpn, strongswan) manuell zu konfigurieren.
  • CLI: Nutzen Sie nmcli monitor, um live zu sehen, wie der NetworkManager den Tunnel aufbaut.

# Anhang: Cheatsheet

Aufgabe Befehl
VPN Plugins suchen dnf search NetworkManager-
Verbindung starten nmcli con up <name>
Verbindung stoppen nmcli con down <name>
VPN Logs (RHEL) journalctl -u NetworkManager -f
IPsec Status ipsec status
WireGuard Status wg show
Secrets anzeigen nmcli --show-secrets con show <name>