Die Fehlermeldung „unbound” im Kontext von NFS (Network File System) ist ein echter Klassiker unter Systemadministratoren und Linux-Benutzern. Sie taucht oft unerwartet auf, wenn man versucht, ein NFS-Share zu mounten, und kann einem den letzten Nerv rauben. Wenn Sie jemals eine Meldung wie mount.nfs: Protocol not available
oder RPC: Port mapper failure - RPC: Unable to receive
gesehen haben, wissen Sie genau, wovon wir sprechen. Diese Fehler deuten darauf hin, dass der Client keine Verbindung zum Server herstellen oder die notwendigen Informationen über die verfügbaren NFS-Dienste abrufen kann. Aber keine Sorge! Dieser umfassende Leitfaden führt Sie Schritt für Schritt durch die Fehlersuche und -behebung, sodass Sie die „unbound”-Fehlermeldung bei NFS ein für alle Mal in den Griff bekommen.
Was bedeutet „unbound” bei NFS eigentlich?
Bevor wir uns in die Lösungen stürzen, ist es wichtig zu verstehen, was diese Fehlermeldung signalisiert. NFS basiert auf RPC (Remote Procedure Call). RPC ist ein Protokoll, das es einem Programm auf einem Computer ermöglicht, eine Prozedur (Unterprogramm) auf einem anderen Computer so auszuführen, als ob sie lokal wäre. Damit dies funktioniert, müssen die verschiedenen NFS-Dienste (wie nfsd, mountd, lockd) ihre Ports und Programmnummern bei einem zentralen Dienst registrieren: dem Portmapper, der heute meist als rpcbind bekannt ist.
Wenn Sie eine „unbound”-Fehlermeldung sehen, bedeutet das in der Regel, dass der NFS-Client den rpcbind-Dienst auf dem NFS-Server nicht erreichen oder von ihm keine gültigen Informationen über die Ports der NFS-Dienste erhalten kann. Es ist, als würde ein Anrufer versuchen, ein Unternehmen zu erreichen, aber die Telefonzentrale (rpcbind) ist entweder nicht besetzt, reagiert nicht oder kann die gewünschte Abteilung (NFS-Dienste) nicht finden, weil diese sich nicht registriert hat.
Typische Ursachen für diesen Zustand sind:
- Der rpcbind-Dienst läuft nicht auf dem Server.
- Eine Firewall blockiert die Kommunikation mit rpcbind oder anderen NFS-Ports.
- Die NFS-Dienste selbst sind nicht gestartet oder haben sich nicht korrekt bei rpcbind registriert.
- Netzwerkprobleme verhindern die Kommunikation.
Lassen Sie uns diese Punkte systematisch angehen.
Grundlegende Prüfungen und Voraussetzungen
Bevor wir tiefer graben, stellen Sie sicher, dass die Basics stimmen. Diese Schritte sind oft die Lösung für viele Netzwerkprobleme:
1. Netzwerk-Konnektivität überprüfen
Stellen Sie sicher, dass Server und Client sich gegenseitig erreichen können. Ersetzen Sie <server_ip>
durch die tatsächliche IP-Adresse oder den Hostnamen Ihres NFS-Servers.
- Ping-Test: Führen Sie vom Client aus
ping <server_ip>
aus. Wenn keine Antwort kommt, haben Sie ein grundlegendes Netzwerkproblem (Kabel, IP-Konfiguration, Subnetz). - DNS-Auflösung: Wenn Sie Hostnamen verwenden, stellen Sie sicher, dass sowohl der Server als auch der Client die Hostnamen korrekt auflösen können. Testen Sie
ping <server_hostname>
. Überprüfen Sie/etc/hosts
oder Ihre DNS-Konfiguration.
2. Status der NFS-Dienste auf dem Server prüfen
Der NFS-Server benötigt mehrere Dienste, die korrekt laufen müssen. Die wichtigsten sind rpcbind
und nfs-server
(oder nfs-kernel-server
je nach Distribution). Überprüfen Sie deren Status:
systemctl status rpcbind
systemctl status nfs-server # oder nfs-kernel-server auf Debian/Ubuntu
Beide sollten den Status „active (running)” anzeigen. Wenn nicht, versuchen Sie, sie zu starten und für den Systemstart zu aktivieren:
sudo systemctl start rpcbind
sudo systemctl enable rpcbind
sudo systemctl start nfs-server # oder nfs-kernel-server
sudo systemctl enable nfs-server # oder nfs-kernel-server
3. Verfügbare NFS-Shares auf dem Server prüfen
Der Befehl exportfs -v
zeigt Ihnen, welche NFS-Shares der Server exportiert und mit welchen Optionen. Stellen Sie sicher, dass Ihr gewünschtes Share dort aufgeführt ist und die Berechtigungen für den Client passen.
sudo exportfs -v
Wenn Änderungen an /etc/exports
vorgenommen wurden, diese aber nicht angewendet wurden, führen Sie sudo exportfs -ra
aus, um alle Shares neu zu exportieren.
4. NFS-Exporte vom Client aus abfragen
Verwenden Sie auf dem Client showmount -e <server_ip>
, um zu sehen, welche Shares der Server bereitstellt. Dies ist ein ausgezeichneter Test für die grundlegende rpcbind-Kommunikation. Wenn dieser Befehl fehlschlägt, haben Sie ein klares rpcbind-Problem.
showmount -e <server_ip>
Eine erfolgreiche Ausgabe zeigt die exportierten Verzeichnisse an. Eine Fehlermeldung hier ist ein starker Hinweis auf ein „unbound”-Problem.
Häufige Ursachen und deren Lösungen
A. rpcbind läuft nicht oder ist nicht erreichbar
Dies ist die häufigste Ursache für „unbound”-Fehler. Wenn rpcbind nicht läuft oder vom Client nicht erreicht werden kann, können die NFS-Dienste ihre Port-Informationen nicht bereitstellen.
Lösung:
- Starten und Aktivieren von rpcbind: Stellen Sie sicher, dass
rpcbind
auf dem NFS-Server läuft und für den Systemstart aktiviert ist. - rpcinfo prüfen: Verwenden Sie
rpcinfo -p <server_ip>
(vom Client oder Server aus), um zu sehen, welche RPC-Dienste bei rpcbind registriert sind und auf welchen Ports sie lauschen. - Neustart der NFS-Dienste: Wenn rpcbind gerade erst gestartet wurde, müssen die NFS-Dienste oft neu gestartet werden, damit sie sich neu bei rpcbind registrieren können.
sudo systemctl start rpcbind
sudo systemctl enable rpcbind
sudo systemctl status rpcbind
rpcinfo -p <server_ip>
Achten Sie auf Einträge wie portmapper
(Programm 100000) auf Port 111 (TCP und UDP). Und natürlich sollten die NFS-Dienste (nfs
, mountd
, statd
, nlockmgr
) ebenfalls aufgeführt sein.
sudo systemctl restart nfs-server # oder nfs-kernel-server
sudo systemctl restart nfs-mountd # falls separat
sudo systemctl restart nfs-idmapd # falls separat
B. Firewall blockiert RPC- und NFS-Ports
Eine falsch konfigurierte Firewall auf dem NFS-Server ist ein weiterer häufiger Übeltäter. Sie blockiert die Kommunikation auf den notwendigen Ports, selbst wenn rpcbind läuft.
NFS verwendet standardmäßig folgende Ports:
- 111/tcp und 111/udp: Für rpcbind (Portmapper)
- 2049/tcp und 2049/udp: Für NFS selbst (NFSv3 und NFSv4)
- Dynamic Ports: Für NFSv3 können
mountd
,statd
undnlockmgr
dynamische Ports verwenden. Diese werden von rpcbind zugewiesen. Es ist oft ratsam, diese Ports zu fixieren, um Firewall-Regeln zu vereinfachen.
Lösung:
- Identifizieren der benötigten Ports: Verwenden Sie
rpcinfo -p
auf dem Server, um die tatsächlich verwendeten Ports für die NFS-Dienste zu sehen. - Firewall-Regeln anpassen: Öffnen Sie die erforderlichen Ports auf dem NFS-Server. Hier sind Beispiele für gängige Firewalls:
- ufw (Uncomplicated Firewall – Debian/Ubuntu):
- firewalld (CentOS/RHEL/Fedora):
- iptables (manuell):
- Statische Ports für NFSv3: Um die Konfiguration der Firewall zu vereinfachen, können Sie statische Ports für
mountd
,statd
undnlockmgr
in/etc/modprobe.d/nfs.conf
(oder ähnlichen Dateien) und in/etc/nfs.conf
oder in der jeweiligen Dienst-Konfiguration festlegen.Ein Beispiel in
/etc/nfs.conf
(Abschnitt[mountd]
):[mountd] port=892
Danach müssen Sie die NFS-Dienste neu starten und die Firewall entsprechend anpassen.
sudo ufw allow from <client_ip_range> to any port 111 proto tcp
sudo ufw allow from <client_ip_range> to any port 111 proto udp
sudo ufw allow from <client_ip_range> to any port 2049 proto tcp
sudo ufw allow from <client_ip_range> to any port 2049 proto udp
sudo ufw enable # falls noch nicht aktiv
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --reload
Alternativ können Sie auch die Zonen verwenden und explizit die IP-Adresse des Clients zulassen.
sudo iptables -A INPUT -p tcp --dport 111 -s <client_ip_range> -j ACCEPT
sudo iptables -A INPUT -p udp --dport 111 -s <client_ip_range> -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2049 -s <client_ip_range> -j ACCEPT
sudo iptables -A INPUT -p udp --dport 2049 -s <client_ip_range> -j ACCEPT
# Für NFSv3 dynamische Ports:
sudo iptables -A INPUT -p tcp --dport <mountd_port> -s <client_ip_range> -j ACCEPT
sudo iptables -A INPUT -p udp --dport <mountd_port> -s <client_ip_range> -j ACCEPT
# ... und so weiter für statd, nlockmgr
sudo iptables-save > /etc/sysconfig/iptables # persist rules
C. NFS-Dienste sind nicht korrekt gestartet oder synchronisiert
Manchmal laufen rpcbind und die NFS-Dienste, aber es gibt ein Timing-Problem oder eine fehlerhafte Registrierung.
Lösung:
- Reihenfolge der Dienststarts: Stellen Sie sicher, dass
rpcbind
immer vor den NFS-Diensten gestartet wird. Ein einfacher Neustart aller relevanten Dienste kann das Problem beheben:
sudo systemctl restart rpcbind
sudo systemctl restart nfs-server # oder nfs-kernel-server
# Optional, falls separate Dienste:
sudo systemctl restart nfs-mountd
sudo systemctl restart nfs-idmapd
D. Fehlerhafte /etc/exports-Konfiguration
Obwohl dies nicht direkt eine „unbound”-Meldung verursacht, kann eine falsche /etc/exports
-Konfiguration zu Mount-Fehlern führen, die ähnlich aussehen oder die Fehlersuche erschweren.
Lösung:
- Syntax prüfen: Überprüfen Sie die Datei
/etc/exports
auf dem NFS-Server auf Tippfehler oder falsche Berechtigungen. Ein typischer Eintrag sieht so aus:
/srv/nfs/share <client_ip_address>(rw,sync,no_subtree_check)
Ersetzen Sie <client_ip_address>
durch die tatsächliche IP-Adresse oder den Hostnamen des Clients (oder ein Netzwerk wie 192.168.1.0/24
).
/etc/exports
müssen Sie die Exports neu laden:sudo exportfs -ra
chmod 755 /srv/nfs/share
).E. SELinux oder AppArmor blockiert den Zugriff
Sicherheitsmechanismen wie SELinux (auf RHEL/CentOS/Fedora) oder AppArmor (auf Debian/Ubuntu) können den NFS-Diensten den Zugriff auf Ports oder Dateisysteme verwehren.
Lösung:
- SELinux überprüfen:
- Überprüfen Sie den SELinux-Status:
sestatus
. - Versuchen Sie, SELinux temporär in den „permissive”-Modus zu versetzen:
sudo setenforce 0
. Wenn NFS danach funktioniert, liegt es an SELinux. - Dauerhafte Lösung: Installieren Sie die entsprechenden SELinux-Booleschen Werte oder erstellen Sie benutzerdefinierte Regeln. Für NFS sind oft folgende nützlich:
- Überprüfen Sie auch das Audit-Log für Denials:
sudo journalctl -xeu audit
. - AppArmor überprüfen:
- Überprüfen Sie den AppArmor-Status:
sudo aa-status
. - Wenn AppArmor-Profile für NFS existieren und aktiviert sind, kann es sein, dass diese den Zugriff blockieren. Sie können versuchen, die Profile in den „complain”-Modus zu versetzen oder zu deaktivieren (nur zu Testzwecken!):
- Überprüfen Sie die Systemprotokolle für AppArmor-Denials:
sudo journalctl -xe | grep apparmor
.
sudo setsebool -P nfs_export_all_rw 1
sudo setsebool -P nfs_export_all_ro 1
sudo setsebool -P use_nfs_home_dirs 1
sudo aa-complain /etc/apparmor.d/usr.sbin.nfsd # Beispiel
sudo aa-disable /etc/apparmor.d/usr.sbin.nfsd # Beispiel
F. NFS-Version oder Protokoll-Mismatch
In seltenen Fällen kann es zu Problemen kommen, wenn Client und Server unterschiedliche NFS-Versionen bevorzugen oder der Client ein Protokoll (UDP/TCP) anfordert, das der Server nicht unterstützt.
Lösung:
- NFS-Version beim Mounten festlegen: Versuchen Sie, explizit die NFS-Version beim Mount-Befehl anzugeben. NFSv4.1 ist die empfohlene moderne Version, gefolgt von NFSv4.0. NFSv3 ist älter, aber immer noch verbreitet.
sudo mount -t nfs -o vers=4.1 <server_ip>:/share /mnt/nfs # Für NFSv4.1
sudo mount -t nfs -o vers=3,proto=tcp <server_ip>:/share /mnt/nfs # Für NFSv3 mit TCP
Erweiterte Fehlersuche und Debugging
Wenn die oben genannten Schritte nicht zum Erfolg führen, müssen Sie tiefer in die Materie eintauchen:
- Systemprotokolle: Überprüfen Sie immer die Systemprotokolle auf beiden Seiten (Server und Client).
sudo journalctl -xe # für systemd-basierte Systeme
sudo tail -f /var/log/syslog # oder /var/log/messages
Suchen Sie nach Meldungen, die RPC, NFS, rpcbind, Mount oder Netzwerkfehler betreffen.
tcpdump
auf dem Server (und/oder Client), um den Netzwerkverkehr zu überwachen und zu sehen, ob RPC-Anfragen überhaupt ankommen und welche Antworten gesendet werden.sudo tcpdump -i <interface> host <client_ip> and port 111 or port 2049 # auf dem Server
sudo tcpdump -i <interface> host <server_ip> and port 111 or port 2049 # auf dem Client
Suchen Sie nach RPC-Anfragen und deren Antworten. Sehen Sie eine „PORTMAP_GETPORT” Anfrage, und gibt es eine Antwort? Werden die NFS-Mount-Anfragen gesendet und beantwortet?
Prävention und bewährte Praktiken
Um die „unbound”-Fehlermeldung in Zukunft zu vermeiden, beachten Sie diese Best Practices:
- Konsistente Konfiguration: Halten Sie Ihre NFS-Konfiguration (
/etc/exports
, Firewall-Regeln) einfach und konsistent. - Statische Ports: Wenn Sie NFSv3 verwenden, konfigurieren Sie statische Ports für
mountd
,statd
undnlockmgr
, um Firewall-Regeln zu vereinfachen und unvorhersehbares Verhalten zu vermeiden. - Firewall-Management: Verwenden Sie eine gut durchdachte Firewall-Konfiguration und dokumentieren Sie Ihre Regeln. Erlauben Sie nur den benötigten Clients den Zugriff auf die NFS-Ports.
- Regelmäßige Überprüfung: Überprüfen Sie regelmäßig den Status Ihrer NFS-Dienste und rpcbind.
- Updates: Halten Sie Ihr Betriebssystem und Ihre NFS-Pakete auf dem neuesten Stand.
Fazit
Die „unbound”-Fehlermeldung bei NFS ist zwar nervig, aber mit einem systematischen Ansatz zur Fehlersuche ist sie in der Regel gut zu beheben. Meistens liegt das Problem an einem nicht laufenden rpcbind
-Dienst oder an einer blockierenden Firewall. Indem Sie die Netzwerk-Konnektivität überprüfen, den Status der Dienste auf dem Server und Client kontrollieren und die Firewall-Einstellungen sorgfältig prüfen, werden Sie die Ursache des Problems finden und beheben können. Scheuen Sie sich nicht, die Protokolle genau zu studieren und bei Bedarf Netzwerkanalyse-Tools einzusetzen. Mit dieser Anleitung sollten Sie nun bestens gerüstet sein, um den „unbound”-Fehler endgültig zu besiegen und Ihre NFS-Shares reibungslos zu betreiben.