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
| 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
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.