====== 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**, снова несколько **запросов/ответов**.\\
{{:linux:file_base:nfs_0.jpg?direct}}
После, винда пытает установить соединение по **445**ому порту, сервер бородит (посылает **RST**), винда шлет **Retransmossion**, сервер снова **RST**, так два раза, винда ломится на **139**, сервер снова **RST**, несколько обменов по **NFS**, затем снова **Retransmission - RST** на 445 и 139-ом портах. По четыре повтора.\\
PS: при запросе и ответе на портах 445 и 139, винда похоже думает что проблемы в сети, это может объяснить большое кол-во попыток.\\
{{:linux:file_base:nfs_1.jpg?direct}}
Винда шлет три запроса "**Name query NBSTAT**", по протоколу **NBNS**, сервер на них отвечает "**Port unreachable**", по **ICMP**. \\
Винда обновляет ARP.\\
{{:linux:file_base:nfs_2.jpg?direct}}
Затем ломится на **52219**ый порт, сервер бородит **RST** пакетом, 4 повтора.\\
Затем, винда снова подключается на **111**ой, **Portmap** дает **45881**, и уже по этому порту, вроде начинается движуха. Вроде происходит монтирование, чтение прав доступа и т.д.\\
Затем, винда ломится на порт **40847**, сервер **RST**, снова **111**ый, **2049**й, **запросы/ответы**, после чего, винда опять ломится на **445** и **139**, сервер рестит, снова "**Port unreachable**" и **обновление ARP**.\\
Тут уже заметена передача тестового файла или это содержимое диска, оно тоже видно.. о_о\\
Винда ломится на **80**ый порт, сервер рестит, опять **111**ый, **Portmap**, несколько раз.\\
Все это за **370 пакетов**, произвел **подключение** к серверу **NFS** и передачу текстового файла.\\
Исходный файл Wireshark (расширение нужно сменить на .pcapng):
{{ :linux:file_base:test-nfs.pcapng.odt|}}