Здесь мы рассмотрим настройки системы VPNKI, требуемые для получения доступа из Интернет к NFS серверу. Сам сервер расположен во внутренней сети. Например, он расположен у вас дома и не имеет "белого" IP адреса.
Цель всей нашей затеи, например, примонтировать папку для отправки файлов из Интернет прямо на домашний сервер.
Мы хотим получить удаленный доступ к серверу NFS, который расположен у вас дома и не имеет белого IP адреса.
Адрес сервера во внутренней сети, например, 192.168.1.2.
ВАЖНО! Будем считать, что вы уже успешно подключили VPN туннель с того же самого устройства на котором будет расположен NFS сервер или с вашего домашнего маршрутизатора.
Это можно сделать по любому из VPN протоколов поддерживаемых VPNKI - PPTP, L2TP, L2TP/IPsec, IKEv2/IPsec, OpenVPN, SSTP, Openconnect и WireGuard.
В нашем примере VPN соединение было установлено с маршрутизатора, а сам сервер NFS находится в домашней сети.
Теперь мы хотим сделать доступным в Интернет наш сервер NFS и его папку.
Схема выглядит так:
Перед началом настройки стоит убедиться, что компьютер с NFS сервером доступен с сервера VPNKI.
Это можно проверить если выполнить пинг сервера со страницы "Инструменты" в личном кабинете VPNKI.
В нашем случае, со страницы "Инструменты" это был бы пинг адреса 192.168.1.2.
Если пинг успешен, то можно двигаться дальше.
-------
В данном примере будет использоваться сервер NFS на RaspberryPi.
Особенностей у нашего сервера будет две:
Итак, установим NFS сервер
sudo apt install nfs-kernel-server
Теперь давайте посмотрим какие порты стали открытыми на вашем устройстве после установки и автоматического старта сервера NFS.
Выполните команду:
netstat -tulpn
Обратите внимание на то, что на вашем устройстве автоматически открылись:
Такое многообразие портов без белого IP адреса в Интернет не выставить, поэтому первой задачей будет ограничение работы сервера NFS только одним портом - TCP 2049.
Для этого пока остановите сервер NFS.
sudo service nfs-kernel-server stop
Кроме всего прочего, нам нужно остановить все дополнительные демоны, использование которых нам не потребуется:service rpc-statd stop
service rpcbind stop
А теперь сделаем так, чтобы демоны больше не запускались:
sudo systemctl mask rpcbind.service
sudo systemctl mask rpcbind.socket
Теперь необходимо выключить старые версии NFS (2 и 3) и оставить рабочей только версию 4.
Для этого нужно добавить в конец файла /etc/default/nfs-kernel-server следующие строки:
RPCNFSDOPTS="-N 2 -N 3"
RPCMOUNTDOPTS="--manage-gids -N 2 -N 3"
Теперь давайте запустим наш сервер
sudo service nfs-kernel-server start
После запуска нужно проверить что:
cat /proc/fs/nfsd/versions
убедитесь, что в выводе команды указаны версии NFS доступные на сервере в таком виде: -2 -3 +4 +4.1 +4.2 (версии 2 и 3 выключены, версии 4, 4.1, 4.2 включены)
netstat -tulpn
в ее выводе будут открыты только порты TCP и UDP 2049, а все многообразие, которое мы видели раньше, в списке не появится.
Теперь давайте создадим папку, которую мы хотим опубликовать в Интернет и сообщим о наличии этой папке серверу NFS.
В нашем случае создадим папку test в директории /tmp:
sudo mkdir /tmp/test
а затем добавим в файл /etc/exports информацию о новой папке, доступной через протокол NFS.
Выполните команду:
echo "/tmp/test *(rw,sync,insecure,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports
Теперь сообщите серверу NFS о новой папке. Выполните команду:
sudo exportfs -a
Давайте ради теста создадим текстовый файлик с именем nfs-test.txt в папке /tmp/test и запишем в него фразу "Hello world".
Сделать это можно командой:
echo "Hello world!" | sudo tee -a /tmp/test/nfs-test.txt
Как вы уже поняли из предыдущего раздела, то сервер NFS v.4 у нас имеет адрес 192.168.1.2 и работает на портах TCP 2049 и UDP 2049.
Для публикации сервера NFS в Интернет мы воспользуемся услугой "Проброс TCP порта" в личном кабинете сервера VPNKI и выставим наружу ТОЛЬКО порт TCP. Этого вполне достаточно для работы NFS v.4.
Если у вас нет активной услуги "Проброс TCP порта", то вы можете подключть ее в меню "Мои возможности" - "Добавить услугу".
После подключения услуги вы сможете поставить соответствие внешнего порта (назначенного системой VPNKI) и внутреннего порта 2049 вашего сервера NFS c адресом 192.168.1.2 как представлено на картинке.
В нашем случае система VPNKI автоматически выбрала порт 26522 на адресе msk.vpnki.ru и пробросила его на внутренний адрес 192.168.1.2 и его порт 2049.
В вашем случае назначенный порт будет отличаться. Поэтому в командах этой инструкции используйте выданный вам порт.
Дождитесь применения настроек на сервере (около 5 минут).
Установим NFS клиента:
sudo apt install nfs-common
Теперь выключим ненужные службы:
sudo systemctl disable --now rpcbind.service rpcbind.socket
Создадим папку в которую будем монтировать папку удаленного сервера. Путь это будет папка /home/pi/files .
sudo mkdir /home/pi/files
Теперь давайте смонтируем удаленную папку.
Самая главная команда, ради которой все и затевалось выглядит так:
sudo mount -vt nfs4 -o port=26522,proto=tcp msk.vpnki.ru:/tmp/test /home/pi/files
В ней указаны:
Если вы все сделали по инструкции, то монтирование должно быть успешным.
После монтирования вы можете выполнить на клиенте команду:
ls -la /home/pi/files/
И в ее выводе будет показан файл nfs-test.txt, который находится на удаленном сервере.
Вы можете скопировать этот файл в любую папку на клиенте или, наоборот, записать в папку /home/pi/files новый файл, который фактически разместится на удаленном сервере.
Для размонтирования папки выполните команду:
umount /home/pi/files
Если все получилось и папка смонтировалась, то имеет смысл добавить немного безопасности.
Так как в нашем примере мы не используем аутентификацию Kerberos, которая является штатным механизмом аутентификации в NFS v.4, то одним из возможных способов ограничения доступа к папке будет указание "белого списка" IP адресов сети Интернет с которых сервер VPNKI пропустит соединение на опубликованный вами TCP порт.
Для этого заполните поля "Белый список:Сеть/Маска" (см. картинку), указав там сеть своего провайдера, откуда подключается ваше устройство для монтирования папки. В нашем примере это адрес 100.100.100.100, а маска может быть например 255.255.0.0.
После добавления адреса в белый список дождитесь применения настроек на сервере VPNKI.
Если у Вас появятся вопросы, то вы можете задать их на форуме нашей системы.