Инструменты пользователя

Инструменты сайта


linux:file_base:nfs

NFS

Network File System (cетевая файловая система), позволяет открывать сетевой доступ к папкам/разделам/дискам, поддерживается Linux, Windows.

Сервер

Ставим nfs-kernel-server, проверяем работу и активацию службы nfs-server.

Настройки экспорта находятся в файле /etc/exports.
Некоторые опции:

  • rw, ro - чтение/запись, только чтение
  • sync (async) - блокировка запросов, пока идет запись на диск, по умолчанию. (не блокировать)
  • secure (insecure) - использовать порты ниже 1024 (использовать любые)
  • [no_]root_squash - [не_] подменять запросы от root на анонимные, по умолчанию вкл.
  • all_squash - подменять все запросы на анонимные
  • [no_]subtree_check - [не] проверять попытки выхода за пределы расшаренной папки
  • anonuid (anongid) - uid и gid анонимного пользователя

После изменения параметров, нужно применить настройки, командой:

# exportfs -ra

Примеры (пробел в строке только один):

/var/nfs 192.168.0.0/24(rw,sync,no_subtree_check) # разрешить подсеть
/var/nfs 127.0.0.1(rw,sync,all_squash,root_squash,anonuid=1001,anongid=1001)

Указано, что для работы используются порты: 111, 2049.

Клиент

Linux

Вроде поддерживает из коробки, где то сказано, что нужно ставить пакет nfs-common.
Монтируется обычным способом, с указанием хоста, перед расположением.

Windows

Права на запись регулируются настройками экспорта на сервере + базовыми настройками прав доступа в ФС, на сервере.

Подключить можно несколькими способами:
Нужно включить NFS клиент, и диск уже будет доступен просто по сети, по сетевому адресу.

Командой mount: в проводнике не появляется, анонимный вход.

mount -o anon \\192.168.0.16\mnt\raid Z:

Через команду меню в проводнике, в проводнике появляется, но тогда, при вызове команды mount, информация по ресурсу отсутствует.

Есть способ подключения под авторизованным пользователем, но он почему то не работает и решения пока не нашел, ошибка возникает у многих:

mount -u:user -p:* \\192.168.0.16\mnt\raid Z:

Официальный костыль заключается в том, что бы сменить UID и GID анонима на валидные, указанные на Linux сервере, делается это через реестр, в ветке: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default, нужно поменять значение ключей AnonymousUid и AnonymousGid на соответствующие, после ребута должно работать. У меня таких ключей не оказалось почему то.

По итогу, можно смонтировать его командой mount, затем в меню проводника «добавить сетевой диск», что бы он отображался в дисках. Права доступа настроены на стороне сервера.
Настройка UID и GID только на стороне сервера, работает только с Linux, на Windows нет, очевидно без изменения ключей в реестре, итого, запись работает только если в ФС стоит разрешение для всех.

Опыт использования c Windows

Настроил сервер NFS на виртуалке в Proxmox, в локальной сети.
При установлении соединения, очень большая задержка, и пока непонятно с портами.
После установки соединения работает норм, просмотр видео без косяков.
Так же, косяк с правами доступа, точнее с авторизацией, подключается только под анонимом (костыль через реестр что то не подходит у меня).
И косяк с кодировкой, подключается в режиме ANSI, так же доступны китайские кодировки, но юникода нету, поэтому русские символы не работают, отображается криво либо в винде, либо в linux, в зависимости где присвоишь имя файлу.

Сетевое взаимодействие

Винда инициирует подключение по 111 порту, затем, делается запрос службе Portmap, для получения номера порта, Portmap отвечает 2049, винда закрывает соединение на 111ом, открывает на 2049, обмениваются какими то данными, несколько запросово/ответов по протоколу NFS, затем винда закрывает подключение на 2049 и снова открывает на 111ом, все повторилось, затем, винда снова инициирует подключение, сразу на 2049, снова несколько запросов/ответов.
nfs_0.jpg

После, винда пытает установить соединение по 445ому порту, сервер бородит (посылает RST), винда шлет Retransmossion, сервер снова RST, так два раза, винда ломится на 139, сервер снова RST, несколько обменов по NFS, затем снова Retransmission - RST на 445 и 139-ом портах. По четыре повтора.
PS: при запросе и ответе на портах 445 и 139, винда похоже думает что проблемы в сети, это может объяснить большое кол-во попыток.
nfs_1.jpg

Винда шлет три запроса «Name query NBSTAT», по протоколу NBNS, сервер на них отвечает «Port unreachable», по ICMP.
Винда обновляет ARP.
nfs_2.jpg

Затем ломится на 52219ый порт, сервер бородит RST пакетом, 4 повтора.
Затем, винда снова подключается на 111ой, Portmap дает 45881, и уже по этому порту, вроде начинается движуха. Вроде происходит монтирование, чтение прав доступа и т.д.
Затем, винда ломится на порт 40847, сервер RST, снова 111ый, 2049й, запросы/ответы, после чего, винда опять ломится на 445 и 139, сервер рестит, снова «Port unreachable» и обновление ARP.

Тут уже заметена передача тестового файла или это содержимое диска, оно тоже видно.. о_о
Винда ломится на 80ый порт, сервер рестит, опять 111ый, Portmap, несколько раз.
Все это за 370 пакетов, произвел подключение к серверу NFS и передачу текстового файла.

Исходный файл Wireshark (расширение нужно сменить на .pcapng): test-nfs.pcapng.odt

linux/file_base/nfs.txt · Последнее изменение: 2021/04/20 09:57 — admin