NFS (Network File System) ermöglicht das Teilen von Verzeichnissen über das Netzwerk. Es ist der Standard für Linux-to-Linux Dateifreigaben.

Server-Installation

# Debian/Ubuntu
apt install nfs-kernel-server

# RHEL/CentOS
dnf install nfs-utils

Exports konfigurieren

/etc/exports

# Grundformat
# /pfad    client(optionen)

# Beispiele
/srv/nfs        192.168.1.0/24(rw,sync,no_subtree_check)
/srv/backup     192.168.1.10(rw,sync,no_root_squash)
/srv/public     *(ro,sync)
/home           192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)

Optionen erklärt

| Option | Beschreibung | |--------|--------------| | rw | Lesen und Schreiben | | ro | Nur Lesen | | sync | Synchrones Schreiben | | async | Asynchrones Schreiben | | no_subtree_check | Performance verbessern | | no_root_squash | Root-Rechte behalten | | root_squash | Root wird zu nobody | | all_squash | Alle zu nobody | | anonuid/anongid | UID/GID für nobody |

Exports aktivieren

# Exports neu laden
exportfs -ra

# Aktive Exports anzeigen
exportfs -v

# Export hinzufügen ohne Neustart
exportfs -o rw,sync 192.168.1.0/24:/srv/nfs

Server starten

# Service starten
systemctl start nfs-server
systemctl enable nfs-server

# Status prüfen
systemctl status nfs-server

# Abhängige Dienste
systemctl status rpcbind

Firewall

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

# firewalld
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --reload

Client-Installation

# Debian/Ubuntu
apt install nfs-common

# RHEL/CentOS
dnf install nfs-utils

Mounten

Manuell

# Mount-Punkt erstellen
mkdir -p /mnt/nfs

# Mounten
mount -t nfs server.example.de:/srv/nfs /mnt/nfs

# Mit Optionen
mount -t nfs -o vers=4,soft,timeo=100 server:/srv/nfs /mnt/nfs

In /etc/fstab

# NFSv4
server.example.de:/srv/nfs  /mnt/nfs  nfs4  defaults,_netdev  0  0

# NFSv3
server.example.de:/srv/nfs  /mnt/nfs  nfs  defaults,_netdev,vers=3  0  0

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

Mount-Optionen

| Option | Beschreibung | |--------|--------------| | soft | Timeout bei Fehler | | hard | Wartet unbegrenzt | | timeo=N | Timeout in Zehntelsekunden | | retrans=N | Retries | | rsize/wsize | Block-Größe | | _netdev | Nach Netzwerk mounten | | noatime | Keine Zugriffszeiten | | vers=4 | NFS-Version |

Autofs

Installation

apt install autofs

Konfiguration

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

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

Autofs starten

systemctl start autofs
systemctl enable autofs

# Zugriff mounted automatisch
ls /mnt/nfs/data

NFSv4

NFSv4 ID-Mapping

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

# Auf Server und Client gleich!

Kerberos-Authentifizierung

# Export mit Kerberos
/srv/secure  *(rw,sync,sec=krb5p)

# sec-Optionen:
# krb5   - Authentifizierung
# krb5i  - + Integrity
# krb5p  - + Privacy (verschlüsselt)

Performance

Tuning

# Größere Blockgrößen
mount -t nfs4 -o rsize=1048576,wsize=1048576 server:/share /mnt

# In fstab
server:/share  /mnt  nfs4  rsize=1048576,wsize=1048576  0  0

Server-Threads

# /etc/nfs.conf
[nfsd]
threads = 16

# Oder
echo 16 > /proc/fs/nfsd/threads

Netzwerk-Statistiken

# Client
nfsstat -c

# Server
nfsstat -s

# Alle
nfsstat

Troubleshooting

Export-Test

# Server-Exports prüfen
showmount -e server.example.de

# Lokal
showmount -e localhost

RPC-Dienste

# RPC-Dienste anzeigen
rpcinfo -p server.example.de

# Lokal
rpcinfo -p

Debug-Modus

# Client Debug
rpcdebug -m nfs -s all

# Server Debug
rpcdebug -m nfsd -s all

# Deaktivieren
rpcdebug -m nfs -c all

Häufige Probleme

# "Permission denied"
# - Berechtigungen auf Server prüfen
# - no_root_squash falls nötig
# - Firewall prüfen

# "mount.nfs: access denied"
# - Export-Konfiguration prüfen
# - exportfs -ra
# - IP-Bereich korrekt?

# "mount.nfs: Connection timed out"
# - Firewall prüfen
# - rpcbind läuft?
# - Netzwerk erreichbar?

Sicherheit

Export-Einschränkungen

# Nur bestimmte Hosts
/srv/data   192.168.1.10(rw,sync)
/srv/data   192.168.1.11(ro,sync)

# Subnetz
/srv/data   192.168.1.0/24(rw,sync)

# Mit Hostname
/srv/data   client.example.de(rw,sync)

User-Mapping

# Alle auf bestimmten User mappen
/srv/shared  *(rw,all_squash,anonuid=1000,anongid=1000)

TCP Wrapper (optional)

# /etc/hosts.allow
rpcbind: 192.168.1.0/24
nfs: 192.168.1.0/24

# /etc/hosts.deny
rpcbind: ALL
nfs: ALL

Praktisches Beispiel

Web-Cluster mit NFS

# === Server ===
# /etc/exports
/var/www/shared  192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)

exportfs -ra

# === Web-Server ===
# fstab
nfs-server:/var/www/shared  /var/www/html  nfs4  defaults,_netdev  0  0

mount -a

Home-Verzeichnisse

# === Server ===
/home  192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)

# === Clients ===
nfs-server:/home  /home  nfs4  defaults,_netdev  0  0

Status-Script

#!/bin/bash
# nfs-status.sh

echo "=== NFS Server Status ==="
systemctl status nfs-server --no-pager

echo ""
echo "=== Aktive Exports ==="
exportfs -v

echo ""
echo "=== NFS Statistiken ==="
nfsstat -s

echo ""
echo "=== Aktive Clients ==="
ss -tn | grep :2049

Zusammenfassung

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

| Datei | Funktion | |-------|----------| | /etc/exports | Server-Exports | | /etc/fstab | Client-Mounts | | /etc/auto.master | Autofs-Master | | /etc/idmapd.conf | ID-Mapping |

| Option | Beschreibung | |--------|--------------| | rw/ro | Lesen/Schreiben | | sync | Synchron | | no_root_squash | Root behalten | | no_subtree_check | Performance |

Fazit

NFS ist der Standard für Linux-Dateifreigaben. NFSv4 bietet bessere Sicherheit und Performance. Autofs vereinfacht das Client-Management. Für Windows-Clients ist Samba besser geeignet. Bei sensiblen Daten sollte Kerberos-Authentifizierung verwendet werden.