Авторизация

ПУБЛИКАЦИЯ ПАПКИ ПРИ ПОМОЩИ NFS И ПРОБРОСА TCP ПОРТА

Результат: папка устройства в домашней сети без белого IP адреса смонтирована через Интернет по протоколу NFS v.4 на устройство с ОС Ubuntu/Debian

Здесь мы рассмотрим настройки системы VPNKI, требуемые для получения доступа из Интернет к NFS серверу. Сам сервер расположен во внутренней сети. Например, он расположен у вас дома и не имеет "белого" IP адреса.

Цель всей нашей затеи, например, примонтировать папку для отправки файлов из Интернет прямо на домашний сервер.

 

0. Исходные данные для доступа к домашнему NFS серверу через проброс TCP порта

Мы хотим получить удаленный доступ к серверу NFS, который расположен у вас дома и не имеет белого IP адреса.

Адрес сервера во внутренней сети, например, 192.168.1.2.

ВАЖНО! Будем считать, что вы уже успешно подключили VPN туннель с того же самого устройства на котором будет расположен NFS сервер или с вашего домашнего маршрутизатора.

 

Это можно сделать по любому из VPN протоколов поддерживаемых VPNKI - PPTP, L2TP, L2TP/IPsec, IKEv2/IPsec, OpenVPN, SSTP, Openconnect и WireGuard.

В нашем примере VPN соединение было установлено с маршрутизатора, а сам сервер NFS находится в домашней сети.

Теперь мы хотим сделать доступным в Интернет наш сервер NFS и его папку.

 

Схема выглядит так:

nfs v4 single port mount via tcp proxy without public IP with VPN connection

 

Перед началом настройки стоит убедиться, что компьютер с NFS сервером доступен с сервера VPNKI.

Это можно проверить если выполнить пинг сервера со страницы "Инструменты" в личном кабинете VPNKI.

В нашем случае, со страницы "Инструменты" это был бы пинг адреса 192.168.1.2.

Если пинг успешен, то можно двигаться дальше.

 

 

-------

1. Настройка NFS сервера на Debian/Ubuntu для работы с одним портом TCP

В данном примере будет использоваться сервер NFS на RaspberryPi.

Особенностей у нашего сервера будет две:

  • сервер будет использовать протокол версии NFS 4.2, а более старые протоколы 3 и 2 должны быть выключены.
  • так как мы хотим "опубликовать" наш сервер в Интернет через TCP прокси VPNKI (то есть услугу "Проброс TCP порта"), то для этого нам необходимо убедиться в том, что NFS соединение будет использовать лишь один порт TCP, а все другие службы и порты сервера будут выключены.

 

Итак, установим NFS сервер

sudo apt install nfs-kernel-server

Теперь давайте посмотрим какие порты стали открытыми на вашем устройстве после установки и автоматического старта сервера NFS.

Выполните команду:

netstat -tulpn

 

Обратите внимание на то, что на вашем устройстве автоматически открылись:

  • порт TCP 111 и порт UDP 111 от демона init
  • много разных портов от службы rpc.mountd
  • а также порты TCP и UDP 2049, которые тоже используются для сервера NFS 

 

Такое многообразие портов без белого 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

 

После запуска нужно проверить что:

  • запущена и работает только NFS версия 4. Для этого выполните команду:

cat /proc/fs/nfsd/versions

убедитесь, что в выводе команды указаны версии NFS доступные на сервере в таком виде: -2 -3 +4 +4.1 +4.2 (версии 2 и 3 выключены, версии 4, 4.1, 4.2 включены)

  • для NFS службы работают лишь два порта - TCP 2049 и UDP 2049. Для этого выполните команду:

netstat -tulpn

в ее выводе будут открыты только порты TCP и UDP 2049, а все многообразие, которое мы видели раньше, в списке не появится.

 

 

2. Создание папки на сервере

Теперь давайте создадим папку, которую мы хотим опубликовать в Интернет и сообщим о наличии этой папке серверу 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

 

3. Настройка в личном кабинете сервера VPNKI

Как вы уже поняли из предыдущего раздела, то сервер 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 как представлено на картинке.

 

 

tcp port proxy for nfs v4 with VPN connection

 

В нашем случае система VPNKI автоматически выбрала порт 26522 на адресе msk.vpnki.ru и пробросила его на внутренний адрес 192.168.1.2 и его порт 2049.

В вашем случае назначенный порт будет отличаться. Поэтому в командах этой инструкции используйте выданный вам порт.

Дождитесь применения настроек на сервере (около 5 минут).

 

 

4. Настройка NFS клиента на Debian/Ubuntu

Установим 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

 

В ней указаны:

  • протокол nfs4;
  • протокол TCP;
  • порт 26522 протокола TCP (в вашем случае порт будет другим согласно настроек в личном кабинте VPNKI);
  • адрес msk.vpnki.ru;
  • удаленная папка сервера /tmp/test;
  • которую монтируем в локальную папку клиента /home/pi/files.

Если вы все сделали по инструкции, то монтирование должно быть успешным.

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

ls -la /home/pi/files/

 

И в ее выводе будет показан файл nfs-test.txt, который находится на удаленном сервере.

Вы можете скопировать этот файл в любую папку на клиенте или, наоборот, записать в папку /home/pi/files новый файл, который фактически разместится на удаленном сервере.

 

Для размонтирования папки выполните команду:

umount /home/pi/files

 

 

5. Если все получилось

Если все получилось и папка смонтировалась, то имеет смысл добавить немного безопасности.

Так как в нашем примере мы не используем аутентификацию Kerberos, которая является штатным механизмом аутентификации в NFS v.4, то одним из возможных способов ограничения доступа к папке будет указание "белого списка" IP адресов сети Интернет с которых сервер VPNKI пропустит соединение на опубликованный вами TCP порт.

Для этого заполните поля "Белый список:Сеть/Маска" (см. картинку), указав там сеть своего провайдера, откуда подключается ваше устройство для монтирования папки. В нашем примере это адрес 100.100.100.100, а маска может быть например 255.255.0.0.

После добавления адреса в белый список дождитесь применения настроек на сервере VPNKI.

 

 


ДОПОЛНИТЕЛЬНО ПО ТЕМЕ ИСПОЛЬЗОВАНИЯ VPN СОЕДИНЕНИЙ

  • Немного более подробно про IP адрес можно прочитать в разделе "О технологиях".

 

 Если у Вас появятся вопросы, то вы можете задать их на форуме нашей системы.