Установка и настройка NFS на Ubuntu 22.04 — сервер и клиент

Введение
Что такое NFS? NFS (Network File System) — сетевой протокол, который позволяет пользователям и приложениям работать с удалёнными файлами так, как будто они расположены локально. Первоначально разработан компанией Sun Microsystems, NFS остаётся стандартом для обмена файлами в Unix‑совместимых системах.
NFS удобно применять в централизованных средах: один сервер хранит данные, к которым подключаются множество клиентов. В этом руководстве описаны шаги для Ubuntu 22.04: установка сервера и клиента, настройка экспортов, правила брандмауэра, автоматический монтирование и проверка записи.
Кому полезно: системным администраторам, инженерам DevOps, консультантам по инфраструктуре.
Ключевые понятия в одну строку:
- Экспорт — каталог, который сервер предоставляет для доступа клиентам.
- Монтирование — подключение удалённого экспорта в локальную файловую систему клиента.
- NFSv3 / NFSv4 — версии протокола с различиями в производительности и безопасности.
Основные варианты использования и варианты запросов
Primary intent: установка и настройка NFS на Ubuntu 22.04 Related intents: настройка NFS сервера, настройка NFS клиента, автоматический монтирование NFS, безопасность NFS, отладка NFS
Требования
- Ubuntu Server 22.04 — для установки NFS‑сервера.
- Клиентская машина с Linux (в примерах — Ubuntu).
- Пользователь с правами sudo на обеих машинах.
- Сетевой доступ между сервером и клиентами (учтите VLAN/маршрутизацию).
Установка и базовая настройка NFS-сервера
- Подключитесь к серверу и переключитесь на root (или используйте sudo):
ssh user@SERVER-IP
sudo su- Обновите список пакетов и установите пакет сервера NFS:
sudo apt update
sudo apt install nfs-kernel-server- Проверьте статус службы NFS:
sudo systemctl is-enabled nfs-server
sudo systemctl status nfs-server
Примечание: на Ubuntu 22.04 основные настройки расположены в /etc/nfs.conf, а дополнительные — в файлах /etc/default/nfs-*. По умолчанию включены NFSv3 и NFSv4.
Проверить поддерживаемые версии ядром сервера можно так:
cat /proc/fs/nfsd/versionsВывод может выглядеть так: -2 +3 +4 +4.1 +4.2 — знак + означает включённую версию.
Создание экспортов и права доступа
- Создайте каталоги, которые будете экспортировать:
sudo mkdir -p /srv/backups /mnt/shared- Установите владельца и права. В примерах используется nobody:nogroup и права 777, чтобы упростить демонстрацию. В продакшне настройте права более строго.
sudo chown -R nobody:nogroup /srv/backups /mnt/shared
sudo chmod 777 /srv/backups /mnt/shared- Отредактируйте /etc/exports и добавьте строки экспорта. В примере:
sudo nano /etc/exportsДобавьте:
/srv/backups 192.168.5.100(rw,sync,no_subtree_check)
/mnt/shared 192.168.10.0/24(rw,sync,no_subtree_check)Пояснения к опциям:
- rw — разрешить чтение и запись;
- sync — запись на диск на сервере выполняется до подтверждения клиенту (безопаснее, но медленнее);
- no_subtree_check — отключает проверку поддерева, улучшает совместимость при переименовании/перемещении файлов.
- Примените экспорты и перезапустите службу:
sudo exportfs -a
sudo systemctl restart nfs-server
sudo systemctl status nfs-server- Посмотреть текущие экспортируемые каталоги:
sudo exportfs -v
Важно: используйте конкретные IP или подсети в /etc/exports. Экспорт на “*” (всем) опасен.
Безопасность: настройка брандмауэра UFW
По умолчанию NFS использует порт 2049 (TCP/UDP). Чтобы ограничить доступ, добавьте правила UFW для конкретных хостов/сетей:
sudo ufw allow from 192.168.5.100 to any port nfs
sudo ufw allow from 192.168.10.0/24 to any port nfs
sudo ufw reload
sudo ufw status
Советы по безопасности:
- По возможности используйте NFSv4 с авторизацией и Kerberos (sec=krb5/krb5i).
- Разделяйте сети управления и передачи данных.
- Используйте сетевые ACL и VPN для доступа через публичные сети.
- Ограничивайте доступ не только по IP, но и на уровне прав файловой системы и пользователей.
Настройка NFS-клиента (Ubuntu)
Подключитесь к клиентской машине (или откройте терминал на рабочей станции):
ssh root@CLIENT-IPУстановите пакет клиента:
sudo apt update
sudo apt install nfs-common
Монтирование вручную
- Создайте точку монтирования на клиенте:
sudo mkdir -p /mnt/data- Смонтируйте экспорт сервера (замените nfs_server_ip на IP или DNS сервера):
sudo mount nfs_server_ip:/srv/backups /mnt/data- Проверьте монтирование:
sudo df -h
Проверка записи
На клиенте создайте файл в точке монтирования:
echo "This file from client" > /mnt/data/write.txt
cat /mnt/data/write.txtНа сервере проверьте наличие и содержимое:
cat /srv/backups/write.txt
ls /srv/backups/
Автоматическое монтирование через /etc/fstab
- Отмонтируйте временно смонтированную точку:
sudo umount /mnt/data- Откройте /etc/fstab и добавьте запись:
sudo nano /etc/fstabДобавьте строку (замените nfs_server_ip):
nfs_server_ip:/srv/backups /mnt/data nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0Пояснение параметров:
- auto — монтировать при загрузке;
- nofail — не останавливать загрузку, если ресурс недоступен;
- noatime — не обновлять время последнего доступа (экономит I/O);
- nolock — отключает блокировки (небезопасно для приложений, требующих блокировок);
- intr — позволяет прерывать операции монтирования (устаревшая опция для некоторых реализаций);
- actimeo=1800 — кэширование атрибутов в секундах (уменьшает сетьную нагрузку).
- Примените изменения:
sudo mount -a
sudo df -hЕсли после перезагрузки система не может монтировать экспорт и у вас есть nofail, загрузка продолжится, но точка останется неподключённой.
Альтернатива: systemd‑автоматическое монтирование с опцией x-systemd.automount для более гибкого управления.
Подробные опции экспорта и монтирования — что выбрать
Короткие рекомендации:
- Для большинства сценариев использования выбирайте NFSv4 (меньше портов, улучшенная автентификация).
- Для высокой производительности используйте async с осторожностью (риск потери данных при падении сервера).
- Для приложений с интенсивной работой с метаданными уменьшите actimeo.
Частые опции для /etc/exports:
- ro — только для чтения;
- rw — чтение/запись;
- sync / async — синхронная/асинхронная запись;
- root_squash / no_root_squash — отображение root клиента на nobody (рекомендуется root_squash);
- all_squash — отображение всех пользователей на nobody;
- anonuid / anongid — задать UID/GID для анонимных пользователей.
Частые опции для mount:
- rw,ro — режим доступа;
- vers=3/4 — версия протокола;
- proto=tcp/udp — транспортный протокол;
- rsize/wsize — размер буферов чтения/записи;
- timeo — таймаут операции;
- soft/hard — поведение при ошибках сети (soft позволяет ошибку, hard повторяет запросы — предпочтительнее для целостности).
Советы по производительности
- Увеличьте rsize/wsize для высокоскоростных сетей (например, rsize=65536,wsize=65536), но тестируйте.
- Для больших потоковых операций используйте TCP.
- Настройте параметр actimeo для баланса между свежестью метаданных и нагрузкой на сеть.
- На сервере используйте быстрые диски и RAID‑массивы; при больших нагрузках рассмотрите кеширование на стороне клиента.
Безопасность и жёсткая настройка
- Kerberos: для безопасной аутентификации используйте NFSv4 с Kerberos (sec=krb5/krb5i/krb5p). Требует настройки KDC и соответствующих сервисных ключей.
- Шифрование: NFS не шифрует трафик по умолчанию. Для передачи по небезопасным сетям используйте VPN или IPsec.
- SELinux/AppArmor: на серверах с включённым SELinux/AppArmor убедитесь, что контекст безопасности директорий и профили разрешают экспорт и доступ.
- Разделение прав: используйте root_squash и anonuid/anongid, чтобы ограничить привилегии удалённых пользователей.
Совместимость и миграция
- NFSv3 совместим с большинством старых клиентов, но требует дополнительных портов (rpcbind и динамические порты).
- NFSv4 использует один TCP‑порт 2049 и имеет встроенную поддержку stateful‑сессий.
- При миграции учитывайте поведение блокировок и привязку пользователей (UID/GID) между серверами.
Отладка и типичные ошибки
- Проблема: клиент не монтирует экспорт. Проверки:
- Убедитесь, что export видим: на сервере sudo exportfs -v.
- На клиенте выполните showmount -e nfs_server_ip.
- Проверьте сетевую доступность: ping, nc -z nfs_server_ip 2049.
- Проверьте брандмауэр (UFW, iptables, firewalld).
- Проблема: “Permission denied” при записи. Проверки:
- Права файловой системы на сервере (uid/gid); совпадают ли они с клиентскими пользователями.
- root_squash может отображать root клиента как nobody — проверьте.
- SELinux/AppArmor — временно отключите (для теста) или проверьте логи.
- Проблема: медленный доступ. Проверки:
- Проверьте сетевые задержки и потери.
- Настройте rsize/wsize и actimeo.
- Оцените нагрузку на диск сервера.
Полезные команды для отладки:
# Показывает экспортируемые каталоги с сервера
exportfs -v
# На клиенте: показ доступных экспортов
showmount -e nfs_server_ip
# Проверка портов
sudo ss -ltnp | grep nfs
sudo ss -lpn | grep 2049
# Журналы
sudo journalctl -u nfs-server -b
sudo dmesg | tail -n 50Контроль качества и тесты
Ключевые тесты после настройки:
- Подключение: mount и df -h показывают точку монтирования.
- Запись: создание/чтение файла с клиента и проверка на сервере.
- Параллельность: несколько клиентов одновременно читают/записывают файлы.
- Перезагрузка: перезагрузить клиент и убедиться, что запись через /etc/fstab монтируется автоматически.
Критерии приёмки:
- Экспорт доступен с указанных IP/подсетей.
- Права файлов соответствуют ожиданиям (чтение/запись разрешены там, где нужно).
- Брандмауэр позволяет доступ только указанным хостам.
- Нет ошибок в журнале nfs-server после перезапуска.
Резервирование, мониторинг и бэкапы
- NFS — способ делиться данными, но не заменяет резервное копирование. Планируйте регулярные бэкапы.
- Мониторьте I/O, загрузку CPU и сетевые метрики. Инструменты: Prometheus + node_exporter, Zabbix, Grafana.
- Рассмотрите HA‑решения: файловые кластеры, DRBD + кластерная система файлов.
Роли и чек‑листы
Для администратора сервера:
- Установить пакет nfs-kernel-server.
- Создать каталоги и настроить права.
- Отредактировать /etc/exports и применить exportfs -a.
- Настроить брандмауэр и проверить доступ.
- Настроить мониторинг и журналирование.
Для администратора клиента:
- Установить nfs-common.
- Создать точку монтирования.
- Тестово смонтировать вручную и проверить запись.
- Добавить запись в /etc/fstab или настроить systemd automount.
Частые ошибки и готовые исправления
- “mount: wrong fs type, bad option” — убедитесь в правильности опции vers и proto.
- “stale NFS file handle” — файл был удалён или иноды изменились; размонтируйте и перемонтируйте.
- “permission denied” — проверьте UID/GID и root_squash.
Краткая методология для внедрения NFS в продакшн
- Спроектировать сеть и список клиентов, имеющих доступ.
- Подготовить сервер (диски, RAID, бэкапы).
- Настроить экспорты с минимально необходимыми правами.
- Защитить доступ брандмауэром и при возможности использовать Kerberos.
- Протестировать производительность и отказоустойчивость.
- Ввести мониторинг и процедуры восстановления.
Глоссарий в одну строку
- export — каталог на сервере, предоставляемый клиентам;
- mount — подключение экспорта в локальную файловую систему;
- root_squash — отображение root клиента в не привилегированного пользователя;
- actimeo — время кэширования атрибутов в секундах.
Часто задаваемые вопросы
Как выбрать между NFSv3 и NFSv4?
NFSv4 рекомендуется для новых развертываний: он использует TCP/2049, упрощает безопасность и поддерживает stateful‑сессии. NFSv3 остаётся для совместимости.
Можно ли использовать NFS через интернет?
Прямое использование NFS через интернет не рекомендуется без VPN/IPsec, так как трафик не шифруется по умолчанию.
Что делать, если после монтирования файлы недоступны или пусты?
Проверьте права на сервере, соответствие UID/GID, и логи nfs-server. Попробуйте размонтировать и снова смонтировать.
Как включить Kerberos для NFS?
Это отдельная комплексная настройка: потребуется KDC (например, MIT KDC или Active Directory), создание ключей для nfs/имя_сервера и настройка секции sec=krb5 в /etc/exports и на клиенте.
Нужно ли ставить одинаковые UID/GID на всех клиентах?
Да, для корректных прав доступа рекомендуется поддерживать согласованность UID/GID между серверами и клиентами либо использовать механизм отображения через anonuid/anongid.
Итоги
Вы успешно узнали, как установить NFS‑сервер и клиент на Ubuntu 22.04, как экспортировать каталоги, настраивать брандмауэр, автоматически монтировать экспорты и тестировать права записи. Для продакшна обратите внимание на безопасность (Kerberos, VPN), согласование UID/GID, мониторинг и резервирование.
Важно: всегда тестируйте изменения в изолированной среде перед применением в продакшн.
Краткие шаги для быстрого старта:
- sudo apt install nfs-kernel-server на сервере;
- настроить /etc/exports и sudo exportfs -a;
- sudo apt install nfs-common на клиенте и sudo mount nfs_server_ip:/srv/backups /mnt/data;
- добавить запись в /etc/fstab для автоподключения.
Заметки
- Всегда ограничивайте доступ по IP/подсети и минимизируйте привилегии.
- Для шифрования трафика используйте VPN или IPsec.
- Документируйте настройки UID/GID и политику бэкапов.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента