NFS (Network File System) ermöglicht das Freigeben von Verzeichnissen über das Netzwerk. Clients können diese Verzeichnisse wie lokale Dateisysteme nutzen.
Warum NFS?
Vorteile
- Native Linux-Unterstützung
- Keine zusätzliche Software auf Clients
- Hohe Performance
- Transparente Dateizugriffe
- Unix-Berechtigungen
NFS-Versionen
| Version | Features |
|---|
| NFSv3 | Weit verbreitet, UDP/TCP |
| NFSv4 | Firewall-freundlich, Kerberos |
| NFSv4.1 | pNFS, Multi-Server |
| NFSv4.2 | Server-side Copy, Sparse Files |
Server-Installation
Debian/Ubuntu
apt update
apt install nfs-kernel-server
CentOS/RHEL
dnf install nfs-utils
Service aktivieren
systemctl enable --now nfs-server
systemctl status nfs-server
Freigaben konfigurieren
exports-Datei
# /etc/exports
# Einfache Freigabe
/srv/nfs/data 192.168.1.0/24(rw,sync,no_subtree_check)
# Mehrere Clients
/srv/nfs/public 192.168.1.0/24(ro) 10.0.0.0/8(ro)
# Einzelner Host
/home/shared 192.168.1.100(rw,sync,no_root_squash)
# Alle Hosts (unsicher!)
/srv/nfs/open *(ro,sync)
Optionen erklärt
| Option | Beschreibung |
|---|
| rw | Lesen und Schreiben |
| ro | Nur Lesen |
| sync | Synchrones Schreiben (sicher) |
| async | Asynchron (schneller, riskanter) |
| no_subtree_check | Keine Subtree-Prüfung (Performance) |
| no_root_squash | Root-Zugriff behalten |
| root_squash | Root → nobody (Standard) |
| all_squash | Alle Benutzer → nobody |
Freigabe erstellen
# Verzeichnis erstellen
mkdir -p /srv/nfs/data
chown nobody:nogroup /srv/nfs/data
chmod 755 /srv/nfs/data
# Exports bearbeiten
nano /etc/exports
# Exports anwenden
exportfs -ra
# Aktive Exports anzeigen
exportfs -v
Client-Konfiguration
Client-Installation
# Debian/Ubuntu
apt install nfs-common
# CentOS/RHEL
dnf install nfs-utils
Manuelles Mounten
# Mount-Punkt erstellen
mkdir -p /mnt/nfs/data
# Mounten
mount -t nfs server:/srv/nfs/data /mnt/nfs/data
# Mit Optionen
mount -t nfs -o rw,soft,timeo=5 server:/srv/nfs/data /mnt/nfs/data
Verfügbarkeit prüfen
# Server-Exports abfragen
showmount -e server-ip
# Beispielausgabe
Export list for server-ip:
/srv/nfs/data 192.168.1.0/24
Automatisch beim Boot (fstab)
# /etc/fstab
server:/srv/nfs/data /mnt/nfs/data nfs defaults,_netdev 0 0
# Mit Optionen
server:/srv/nfs/data /mnt/nfs/data nfs rw,soft,timeo=5,_netdev 0 0
Autofs (Auto-Mount)
# Installation
apt install autofs
# /etc/auto.master
/mnt/nfs /etc/auto.nfs --timeout=60
# /etc/auto.nfs
data -fstype=nfs,rw server:/srv/nfs/data
# Service neu starten
systemctl restart autofs
# Zugriff triggert Mount
ls /mnt/nfs/data
NFSv4-Konfiguration
Server-Konfiguration
# /etc/exports (NFSv4)
# Root-Export (Pseudo-Filesystem)
/srv/nfs 192.168.1.0/24(rw,sync,fsid=0,crossmnt,no_subtree_check)
# Unterverzeichnisse
/srv/nfs/data 192.168.1.0/24(rw,sync,no_subtree_check)
/srv/nfs/backup 192.168.1.0/24(rw,sync,no_subtree_check)
Domain-Mapping
# /etc/idmapd.conf
[General]
Domain = example.local
Client mounten (NFSv4)
# NFSv4 explizit
mount -t nfs4 server:/ /mnt/nfs
# Unterverzeichnis
mount -t nfs4 server:/data /mnt/nfs/data
# In fstab
server:/ /mnt/nfs nfs4 defaults,_netdev 0 0
Firewall-Konfiguration
NFSv4 (einfach)
# Nur Port 2049
ufw allow from 192.168.1.0/24 to any port 2049
NFSv3 (mehrere Ports)
# Ports fixieren
# /etc/default/nfs-kernel-server (Debian)
RPCMOUNTDOPTS="--manage-gids -p 32767"
RPCNFSDOPTS="-p 2049"
STATDOPTS="--port 32765 --outgoing-port 32766"
# /etc/modprobe.d/lockd.conf
options lockd nlm_udpport=32768 nlm_tcpport=32768
# Firewall-Regeln
ufw allow from 192.168.1.0/24 to any port 111
ufw allow from 192.168.1.0/24 to any port 2049
ufw allow from 192.168.1.0/24 to any port 32765:32768
Mount-Optionen
# Optimierte Mount-Optionen
mount -t nfs -o rw,hard,intr,rsize=131072,wsize=131072,noatime server:/data /mnt/data
# fstab
server:/data /mnt/data nfs rw,hard,intr,rsize=131072,wsize=131072,noatime,_netdev 0 0
Optionen erklärt
| Option | Beschreibung |
|---|
| rsize=131072 | Read-Block-Größe (128KB) |
| wsize=131072 | Write-Block-Größe (128KB) |
| hard | Bei Fehlern warten |
| soft | Bei Fehlern Fehler zurückgeben |
| intr | Unterbrechbar |
| noatime | Keine Zugriffszeiten aktualisieren |
| async | Asynchrones Schreiben |
| nconnect=4 | Mehrere TCP-Verbindungen (NFSv4.1+) |
Server-Optimierung
# Mehr NFS-Threads
# /etc/default/nfs-kernel-server
RPCNFSDCOUNT=16 # Standard: 8
systemctl restart nfs-kernel-server
Berechtigungen
UID/GID-Mapping
NFS nutzt numerische UIDs/GIDs.
Benutzer 1000 auf Client = Benutzer 1000 auf Server
Lösung: UID/GID auf allen Systemen synchron halten
Oder: NFSv4 mit idmapd
Root-Squash
# Standard: Root wird zu nobody
/srv/nfs/data 192.168.1.0/24(rw,root_squash)
# Root-Zugriff behalten (nur vertrauenswürdige Clients!)
/srv/nfs/data 192.168.1.100(rw,no_root_squash)
All-Squash
# Alle Benutzer zu einem User mappen
/srv/nfs/data 192.168.1.0/24(rw,all_squash,anonuid=1000,anongid=1000)
Kerberos-Authentifizierung
Server-Konfiguration
apt install nfs-common krb5-user
# /etc/exports
/srv/nfs/secure 192.168.1.0/24(rw,sync,sec=krb5p)
Security-Stufen
| Stufe | Beschreibung |
|---|
| sys | Standard (UID-basiert) |
| krb5 | Kerberos-Authentifizierung |
| krb5i | + Integritätsprüfung |
| krb5p | + Verschlüsselung |
Client mit Kerberos
mount -t nfs -o sec=krb5p server:/secure /mnt/secure
Monitoring
Aktive Mounts
# Auf Server
showmount -a
# Auf Client
mount | grep nfs
df -h | grep nfs
NFS-Statistiken
# Server-Statistiken
nfsstat -s
# Client-Statistiken
nfsstat -c
# RPC-Statistiken
nfsstat -r
Verbindungen prüfen
# RPC-Services
rpcinfo -p localhost
# NFS-Verbindungen
ss -tn | grep 2049
Troubleshooting
Mount fehlgeschlagen
# Server erreichbar?
ping server
# Exports verfügbar?
showmount -e server
# Firewall?
nc -zv server 2049
# Verbose Mount
mount -t nfs -v server:/data /mnt/data
Zugriff verweigert
# exports prüfen
cat /etc/exports
exportfs -v
# UID/GID prüfen
id
ls -la /srv/nfs/data
# Mount-Optionen prüfen
mount | grep nfs
# Netzwerk-Performance
iperf3 -c server
# NFS-Statistiken
nfsstat -c
Stale NFS Handle
# Unmount erzwingen
umount -f /mnt/nfs
# Lazy Unmount
umount -l /mnt/nfs
# Bei hängenden Mounts
fuser -km /mnt/nfs
umount /mnt/nfs
Backup mit NFS
rsync über NFS
# NFS mounten
mount -t nfs server:/backup /mnt/backup
# rsync
rsync -avz /data/ /mnt/backup/data/
NFS für Backup-Server
# /etc/exports
/backup backup-server(rw,sync,no_root_squash)
Zusammenfassung
| Befehl | Funktion |
|---|
exportfs -ra | Exports neu laden |
exportfs -v | Aktive Exports |
showmount -e server | Server-Exports anzeigen |
nfsstat | NFS-Statistiken |
mount -t nfs | NFS mounten |
| Datei | Beschreibung |
|---|
| /etc/exports | Server-Freigaben |
| /etc/fstab | Client-Mounts |
| /etc/idmapd.conf | NFSv4 ID-Mapping |
Fazit
NFS ist die native Lösung für Dateifreigaben zwischen Linux-Systemen. NFSv4 vereinfacht die Firewall-Konfiguration und bietet Kerberos-Unterstützung. Achten Sie auf korrekte UID/GID-Synchronisation und nutzen Sie optimierte Mount-Optionen für beste Performance. Für heterogene Umgebungen (Windows/Linux) ist Samba die bessere Wahl.