DNS on RHEL: NetworkManager & systemd-resolved (Artikel 075)
DNS-Verwaltung in der Red Hat Welt. Erfahren Sie das Zusammenspiel zwischen NetworkManager und systemd-resolved, die Nutzung von nmcli und die korrekte Konfiguration von Resolvern.
# DNS on RHEL: Den Resolver im Griff
TL;DR / Management Summary Im Gegensatz zu Ubuntu, das DNS fast ausschließlich über systemd-resolved regelt, ist in der RHEL-Welt (Red Hat Enterprise Linux) der NetworkManager der Dirigent. Er entscheidet, welche DNS-Server in die
/etc/resolv.confgeschrieben werden oder ob er diese Aufgabe an systemd-resolved delegiert. Ein Senior Admin muss wissen, wie man DNS-Server vianmclisetzt und wie man verhindert, dass manuelle Änderungen in derresolv.confvom System überschrieben werden.
# 1. Einführung & Architektur
Die DNS-Hierarchie in RHEL.
In RHEL 8/9 gibt es zwei Hauptakteure:
- NetworkManager: Verwaltet die Interfaces und deren Profile. Er schreibt standardmäßig die
/etc/resolv.conf. - systemd-resolved: Optional aktivierbar für Caching und DNSSEC.
graph TD
A[nmcli / ifcfg-file] --> B[NetworkManager]
B -->|Option 1: Default| C[/etc/resolv.conf - static file]
B -->|Option 2: Proxy| D[systemd-resolved]
D -->|Dynamically| E[/run/systemd/resolve/stub-resolv.conf]
E -.->|Symlink| C
# 2. DNS via NetworkManager (nmcli)
Der Standard-Weg.
Verwenden Sie niemals vi /etc/resolv.conf auf einem RHEL-Server. Die Änderungen sind beim nächsten Netzwerk-Restart oder Reboot weg.
# DNS-Server setzen
# 1. Namen der Verbindung finden
nmcli connection show
# 2. DNS-Server hinzufügen
sudo nmcli connection modify "eth0" ipv4.dns "1.1.1.1 8.8.8.8"
# 3. DNS-Einträge priorisieren (ignore-auto-dns)
sudo nmcli connection modify "eth0" ipv4.ignore-auto-dns yes
# 4. Verbindung neu laden
sudo nmcli connection up "eth0"
# 3. systemd-resolved unter RHEL
Wenn Caching benötigt wird.
systemd-resolved ist in RHEL oft nicht standardmäßig aktiv. Wenn Sie es nutzen wollen:
# Aktivieren
sudo systemctl enable --now systemd-resolved
# Den NetworkManager anweisen, resolved zu nutzen
# In /etc/NetworkManager/conf.d/10-dns-resolved.conf:
# [main]
# dns=systemd-resolved
# Symlink für resolv.conf setzen
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
# 4. Day-2 Operations: Search-Domains & Metriken
Effiziente Auflösung.
# Search Domains setzen
Wichtig für interne Netze (ping server statt ping server.intern.local).
sudo nmcli connection modify "eth0" ipv4.dns-search "intern.local company.com"
sudo nmcli connection up "eth0"
# DNS Status prüfen
# Zeigt, welche Server NetworkManager aktuell kennt
nmcli dev show | grep DNS
# 5. Troubleshooting & “War Stories”
Wenn der Hostname nicht aufgelöst wird.
# Story 1: “Der DHCP-Overwrite”
Symptom: Der Admin setzt 1.1.1.1, aber nach 5 Minuten steht wieder die IP des lokalen Routers in der resolv.conf.
Ursache: Der NetworkManager erhält DNS-Daten via DHCP und überschreibt die manuellen Werte.
Lösung: ipv4.ignore-auto-dns yes setzen (siehe oben).
# Story 2: “Die immutable resolv.conf”
Symptom: nmcli ändert die DNS-Server, aber die /etc/resolv.conf ändert sich nicht.
Ursache: Ein frustrierter Vorgänger hat die Datei mit chattr +i schreibgeschützt.
Lösung: sudo chattr -i /etc/resolv.conf ausführen und danach wieder via NetworkManager verwalten. Lektion: Kämpfen Sie nicht gegen das System, arbeiten Sie mit dem NetworkManager.
# 6. Fazit & Empfehlung
- RHEL Standard: Nutzen Sie nmcli, um DNS-Server zu verwalten. Es ist die sauberste Methode.
- Performance: Wenn Ihr Server massiv DNS-Queries macht (z.B. ein Mail-Gateway), aktivieren Sie systemd-resolved für das Caching.
- IPv6: Vergessen Sie nicht, DNS-Server auch für
ipv6.dnszu hinterlegen, wenn Sie Dual-Stack fahren.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| DNS-Server anzeigen | `nmcli dev show |
| Search-Domain prüfen | `nmcli dev show |
| DNS-Server löschen | nmcli con mod <name> -ipv4.dns <ip> |
| resolv.conf neu schreiben | nmcli general reload |
| DNS-Test | resolvectl query <host> (wenn resolved aktiv) |