====== 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|}}