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

NFS-Versionen

| Version | Features | |---------|----------| | NFSv3 | Stabil, weit verbreitet | | NFSv4 | Stateful, bessere Sicherheit | | NFSv4.1 | pNFS, Session Trunking | | NFSv4.2 | Server-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

| Option | Beschreibung | |--------|--------------| | rw | Lesen und Schreiben | | ro | Nur Lesen | | sync | Synchrones Schreiben | | async | Asynchrones Schreiben | | no_subtree_check | Bessere Performance | | no_root_squash | Root-Rechte behalten | | root_squash | Root wird zu nobody | | all_squash | Alle User zu nobody | | anonuid/anongid | UID/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

| Option | Beschreibung | |--------|--------------| | rsize/wsize | Blockgröße (z.B. 1048576) | | async | Asynchrones I/O | | noatime | Keine Access-Time | | nocto | Cache bei Open |

Zuverlässigkeit

| Option | Beschreibung | |--------|--------------| | hard | Wartet auf Server | | soft | Gibt nach Timeout auf | | timeo | Timeout in 1/10 Sekunden | | retrans | Wiederholungen | | _netdev | Wartet 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

| Befehl | Funktion | |--------|----------| | exportfs -ra | Exports neu laden | | exportfs -v | Freigaben anzeigen | | showmount -e | Freigaben abfragen | | mount -t nfs4 | NFS mounten | | nfsstat | Statistiken |

| Datei | Funktion | |-------|----------| | /etc/exports | Server-Freigaben | | /etc/fstab | Client-Mounts | | /etc/idmapd.conf | ID-Mapping |

| Port | Dienst | |------|--------| | 2049 | NFS | | 111 | rpcbind |

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.