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

VersionFeatures
NFSv3Weit verbreitet, UDP/TCP
NFSv4Firewall-freundlich, Kerberos
NFSv4.1pNFS, Multi-Server
NFSv4.2Server-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

OptionBeschreibung
rwLesen und Schreiben
roNur Lesen
syncSynchrones Schreiben (sicher)
asyncAsynchron (schneller, riskanter)
no_subtree_checkKeine Subtree-Prüfung (Performance)
no_root_squashRoot-Zugriff behalten
root_squashRoot → nobody (Standard)
all_squashAlle 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

Performance-Optimierung

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

OptionBeschreibung
rsize=131072Read-Block-Größe (128KB)
wsize=131072Write-Block-Größe (128KB)
hardBei Fehlern warten
softBei Fehlern Fehler zurückgeben
intrUnterbrechbar
noatimeKeine Zugriffszeiten aktualisieren
asyncAsynchrones Schreiben
nconnect=4Mehrere 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

StufeBeschreibung
sysStandard (UID-basiert)
krb5Kerberos-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

Performance-Probleme

# 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

BefehlFunktion
exportfs -raExports neu laden
exportfs -vAktive Exports
showmount -e serverServer-Exports anzeigen
nfsstatNFS-Statistiken
mount -t nfsNFS mounten
DateiBeschreibung
/etc/exportsServer-Freigaben
/etc/fstabClient-Mounts
/etc/idmapd.confNFSv4 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.