NFS (Network File System) ermöglicht das Freigeben von Verzeichnissen über das Netzwerk. Clients können NFS-Freigaben wie lokale Dateisysteme mounten.

NFS-Versionen

VersionFeatures
NFSv3Stabil, weit verbreitet
NFSv4Stateful, bessere Sicherheit
NFSv4.1pNFS, Session Trunking
NFSv4.2Server-side Copy, Sparse Files

Server-Installation

Debian/Ubuntu

apt install nfs-kernel-server

CentOS/RHEL

dnf install nfs-utils
systemctl enable nfs-server
systemctl start nfs-server

Freigaben konfigurieren

/etc/exports

# /etc/exports

# Syntax: Verzeichnis Client(Optionen)

# Einzelner Client
/srv/nfs/data    192.168.1.100(rw,sync,no_subtree_check)

# Subnetz
/srv/nfs/shared  192.168.1.0/24(rw,sync,no_subtree_check)

# Alle Clients
/srv/nfs/public  *(ro,sync,no_subtree_check)

# Mehrere Clients
/srv/nfs/project 192.168.1.100(rw,sync) 192.168.1.101(rw,sync)

Wichtige Optionen

OptionBeschreibung
rwLesen und Schreiben
roNur Lesen
syncSynchrones Schreiben
asyncAsynchrones Schreiben
no_subtree_checkBessere Performance
no_root_squashRoot-Rechte behalten
root_squashRoot wird zu nobody
all_squashAlle User zu nobody
anonuid/anongidUID/GID für anonyme User

Freigabe-Verzeichnis erstellen

mkdir -p /srv/nfs/data
chmod 755 /srv/nfs/data
chown nobody:nogroup /srv/nfs/data

Exports aktivieren

# Exports neu laden
exportfs -ra

# Freigaben anzeigen
exportfs -v

# Einzelne Freigabe
exportfs 192.168.1.0/24:/srv/nfs/data

Client-Installation

Debian/Ubuntu

apt install nfs-common

CentOS/RHEL

dnf install nfs-utils

Freigaben mounten

Manuell mounten

# NFSv4
mount -t nfs4 server:/srv/nfs/data /mnt/nfs

# NFSv3
mount -t nfs -o vers=3 server:/srv/nfs/data /mnt/nfs

# Mit Optionen
mount -t nfs4 -o rw,soft,timeo=100 server:/srv/nfs/data /mnt/nfs

Automatisch via fstab

# /etc/fstab

# NFSv4
server:/srv/nfs/data    /mnt/nfs    nfs4    defaults,_netdev    0    0

# NFSv3
server:/srv/nfs/data    /mnt/nfs    nfs    vers=3,defaults,_netdev    0    0

# Mit Optionen
server:/srv/nfs/data    /mnt/nfs    nfs4    rw,soft,timeo=100,_netdev    0    0

Mit autofs (On-Demand)

apt install autofs

# /etc/auto.master
/mnt/nfs    /etc/auto.nfs    --timeout=60

# /etc/auto.nfs
data    -fstype=nfs4,rw    server:/srv/nfs/data

systemctl restart autofs
# Mount erfolgt automatisch bei Zugriff auf /mnt/nfs/data

Mount-Optionen

Performance

OptionBeschreibung
rsize/wsizeBlockgröße (z.B. 1048576)
asyncAsynchrones I/O
noatimeKeine Access-Time
noctoCache bei Open

Zuverlässigkeit

OptionBeschreibung
hardWartet auf Server
softGibt nach Timeout auf
timeoTimeout in 1/10 Sekunden
retransWiederholungen
_netdevWartet auf Netzwerk

Beispiel mit Optionen

mount -t nfs4 -o rw,hard,intr,rsize=1048576,wsize=1048576 server:/data /mnt/data

Sicherheit

Firewall

# Server
ufw allow from 192.168.1.0/24 to any port nfs
ufw allow from 192.168.1.0/24 to any port 111

# Oder iptables
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 2049 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.1.0/24 --dport 2049 -j ACCEPT

NFSv4 mit Kerberos

# /etc/exports
/srv/nfs/secure    gss/krb5(rw,sync,no_subtree_check)
/srv/nfs/secure    gss/krb5i(rw,sync)  # Integritätsprüfung
/srv/nfs/secure    gss/krb5p(rw,sync)  # Verschlüsselung

Root-Squashing

# Standard: Root wird zu nobody
/srv/nfs/data    192.168.1.0/24(rw,sync,root_squash)

# Root-Rechte behalten (Vorsicht!)
/srv/nfs/data    192.168.1.0/24(rw,sync,no_root_squash)

# Alle User zu nobody
/srv/nfs/data    192.168.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)

NFSv4 ID-Mapping

Server

# /etc/idmapd.conf
[General]
Domain = example.de

[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup

Client

# /etc/idmapd.conf (gleiche Domain!)
[General]
Domain = example.de
# Service neustarten
systemctl restart nfs-idmapd

Troubleshooting

Server-Status

# Exports prüfen
exportfs -v

# Verbundene Clients
showmount -a

# NFS-Statistiken
nfsstat -s

Client-Probleme

# Verfügbare Freigaben
showmount -e server

# Mount-Status
mount | grep nfs

# NFS-Statistiken
nfsstat -c

Häufige Fehler

# "Permission denied"
# → Exports prüfen, IP stimmt?
# → Berechtigungen auf Server

# "Connection refused"
# → Firewall prüfen
# → NFS-Server läuft?

# Stale file handle
# → Remount erforderlich
umount -f /mnt/nfs
mount /mnt/nfs

Debug

# Auf Server
rpcdebug -m nfsd all

# Auf Client
rpcdebug -m nfs all

# Logs
tail -f /var/log/syslog | grep nfs

Performance-Tuning

Server

# /etc/sysctl.conf
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

Client mount-Optionen

mount -t nfs4 -o rsize=1048576,wsize=1048576,hard,intr server:/data /mnt

NFS-Threads erhöhen

# /etc/default/nfs-kernel-server
RPCNFSDCOUNT=32

systemctl restart nfs-kernel-server

Monitoring

nfsstat

# Server-Statistiken
nfsstat -s

# Client-Statistiken
nfsstat -c

# Alle Statistiken
nfsstat -o all

mountstats

# Detaillierte Mount-Statistiken
mountstats /mnt/nfs

Zusammenfassung

BefehlFunktion
exportfs -raExports neu laden
exportfs -vFreigaben anzeigen
showmount -eFreigaben abfragen
mount -t nfs4NFS mounten
nfsstatStatistiken
DateiFunktion
/etc/exportsServer-Freigaben
/etc/fstabClient-Mounts
/etc/idmapd.confID-Mapping
PortDienst
2049NFS
111rpcbind

Fazit

NFS ist die Standard-Lösung für Dateifreigaben im Linux-Umfeld. NFSv4 bietet bessere Sicherheit und einfachere Firewall-Konfiguration. Die Performance ist für die meisten Anwendungsfälle ausreichend. Für heterogene Umgebungen mit Windows-Clients ist Samba oft die bessere Wahl. Mit Autofs lassen sich Freigaben automatisch bei Bedarf mounten.