Обо мне

Добрый день, коллеги. Меня зовут Сарафанов Павел. С 2003 года я работаю в качестве BackEnd разработчика в крупнейших банках Росси таких как: Сбербанк, Дойче банк, ВТБ, Газпромбанк.

Постановка задачи

Организовать свое рабочее место с возможностью удаленной работы из любой точки страны; доступ к локальным ресурсам домашней сети; доступ, хранение и резервное копирование персональных фотографий и файлов.

Описание инфраструктуры

Есть три локации: Дом, "личный" офис, ноутбук в командировках.

  1. Дом

    1. Роутер

    2. Домашний сервер на базе ПК

    3. Персональные компьютеры, ноутбуки и телефоны домочадцев

  2. Офис

    1. Роутер

    2. Рабочий компьютер

  3. В командировке или дома

    1. Мини роутер

    2. Рабочий ноутбук

Уточнение задачи

  1. Хранение и доступ с любой локации к персональным документам и фотографиям, резервное копирование и хранение.

  2. Возможность подключиться удаленным рабочим столом или помощником к компьютерам в офисе и дома.

  3. Доступ с рабочего ноутбука к специфическим ресурсам провайдеров и удаленная работа в любом городе через "белые" IP офиса или дома.

Решение 1-ой задачи

Изначально все документы и фото хранились на одном Hdd на рабочем компьютере в офисе и периодически вручную копировались на другие компьютеры с помощью флешки, что очень не удобно, долго и постоянно приводило к потере данных, в том числе и из-за физических сбоев на HDD.

Проблема сбоев железа была решена с помощью домашнего NAS (https://www.truenas.com/). Данный сервер бесплатен, сделан на основе Solaris, легко настраивается через Web GUI, а самое главное поддерживает файловую систему ZFX, "снепшоты" данных и "зеркалирование". Были куплены два одинаковых HDD, установлены в рабочий компьютер в офисе, Поднята Hyper-V виртуалка с TrueNas, где созданы dataSet с физическим "зеркалированием" для фото и документов. Доступ к данным был организован через протокол SMB.

Встал вопрос как организовать доступ к этим данным и выполнять резервное копирование. У trueNas есть плагины, которые выполняют эту функцию. Я рассматривал RSync и syncThing, это широко известные бесплатные программы для синхронизации папок через сеть с гибкими настройками. Мой выбор пал на syncThing (https://syncthing.net/) ввиду его простоты и удобства. Установил плагин на сервере trueNas. На компьютерах, где мне нужны были копии данных я установил нужное приложение syncThing и настроил папки. Никаких других действий не потребовалось, папки стали синхронизироваться и все изменения на одном из компьютеров очень быстро применялись к другим компьютерам, в не зависимости от их расположения и сети. Дальше можно было играться настройками папок, определять кто источник, а кто получатель изменений: Так например я остановился, на том, что источником данных (send only) будет рабочий компьютер в офисе, а на остальных компьютерах отражаются эти изменения (receive only), чтобы домочадцы, имеющие доступ к этим папкам не смогли внести изменения в данные. А также заведена "файловая помойка" для обмена между ПК с настройкой "send and receive", которая синхронизирует любое изменение на любом хосте.

Решение 2-ой задачи

Задача доступа удаленным рабочем столом к компьютерам, которые находятся за роутером с "белым" IP решается простой "проброской" портов. При отсутствии "белого" Ip, решение будет описано в 3-ей задаче. Если Вам нужно получить доступ к нескольким компьютерам за роутером, то этот порт можно изменить в настройках. Например:

  1. Домашний компьютер 1 ip 192.168.1.21 порт рабочего стола 3389. Настройка на роутере: внешний порт 3389 -> внутренний ip 192.168.1.21, порт 3389. При подключение с офиса указываем белый ip роутера: 90.189.210.70

  2. Домашний компьютер 2 ip 192.168.1.23 порт рабочего стола 3389. Настройка на роутере: внешний порт 3390 -> внутренний ip 192.168.1.23, порт 3389. При подключение с офиса указываем белый ip роутера: 90.189.210.70:3390

Сделав аналогичную настройку в офисе, я получил возможность доступа удаленным рабочим столом с рабочего ноутбука в любой точке страны к компьютерам дома и офиса.

Решение 3-ей задачи

Повсеместное использование аббревиатуры VPN, натолкнуло меня на мысль, что с помощью этой технологии легко организовать виртуальную сеть и включить в нее все компьютеры. В итоге я остановился на следующем решении: Поднять в офисе и дома на HyperV "openVpn access server" (https://openvpn.net/access-server/). Данное решение бесплатно при использовании только двух коннектов, что вполне подходит к моим условиям. Проброска портов на роутере позволила подключать openVpn с рабочего ноута в любой точке, а некоторые настройки позволили видеть локальную сеть, использовать smb и удаленный рабочий стол по айпи компьютера без открытия портов на роутерах. И все ресурсы провайдера тоже доступны с ноутбука.

Подробное описание шагов по настройке

И так начнем описывать сделанные настройки по шагам со скриншотами.
В офисе стоит:

  1. Роутер D-Link DIR-2150, белый IP - 5.129.00.00 (в адресе затерты последние 4 цифры), внутренний IP - 192.168.2.1, локальная сеть - 192.168.2.0/24, маска подсети - 255.255.255.0. Выдача IP потребителям настроена через DHCP и по MAC адресу прописаны фиксированные IP.

  2. Рабочий компьютер на базе Windows 11, внутренний IP - 192.168.2.21, маска подсети - 255.255.255.0

Приступим к настройке trueNas:

  1. Включим HyperV в настройках windows: Пуск->Параметры->Приложения->Дополнительные компоненты->Другие компоненты windows. Ставим галочку на против пункта Hyper-V и перезагружаем компьютер.

  2. Запускаем окно управления виртуальными машинами "Диспетчер Hyper-V" и проводим настройку виртуального коммутатора. Выбираем меню "Диспетчер виртуальных коммутаторов" и создаем с типом "Внешняя сеть", что бы наши виртуальные машины были в локальной сети, присваиваем имя и ставим галочку "предоставлять общий доступ...".

  3. Скачиваем ISO образ установщика trueNas https://www.truenas.com/download-truenas-core/

  4. Создаем виртуальную машину "поколения 1"

    устанавливаем выделяемую память не менее 12Gb

    выбираем наш созданный виртуальный коммутатор

    виртуальный жесткий диск

    выбираем пункт "Установить ОС с загрузочного DVD и подкладываем скаченный ранее iso файл

  5. Перед запуском виртуальной машины и установкой ОС необходимо сделать некоторые настройки сети и запуска виртуальной машины. В параметрах виртуальной машины в меню "Сетевой адаптер"->"Дополнительные параметры" указываем постоянный MAC адрес для "виртуалки" = "00:00:00:00:00:01"

    любой другой по вашему желанию и прописываем статический IP для него на роутере "192.168.2.3". Далее в меню "Контрольные точки" отключаем галочку "Включить..."

    В меню "Автоматические действия при запуске" выбираем пункт "Всегда запускать.."

    В меню "Автоматические действия при завершении" выбираем пункт "Завершать работу операционной системы.."

  6. Запускаем виртуальную машину и устанавливаем ОС. Выбираем пункт меню Install/Upgrade

    Далее пробелом выбираем диск "da0" для установки ОС

    Выбираем "Proceed with installation"

    Далее придумываем пароль для root

    Выбираем "Boot via Bios"

    Выбираем пункт "Create Swap"

    и ждем установки. Перегружаем "виртуалку" и извлекаем ISO.

  7. После загрузки trueNas

    на Web GUI сервера: https://192.168.2.3/ui/dashboard , вводим пароль от root, указанный при установке и попадаем на DashBoard

  8. Теперь нам нужно подключить наши HDD. Идем в Windows "Управление компьютером" и в меню управление дисками отключаем винчестеры (на названии диска правой кнопкой и пункт меню "Вне сети"), которые будут использоваться в trueNas сервере.

  9. Выключаем виртуальный сервер trueNas и идем в настройки. Добавляем в SCSI физические HDD диски.

  10. Запускаем сервер и в dashboard-е в меню "Storage"->"Disk" проверяем, что наши диски появились.

  11. Создаем новый Pool. К сожалению проиллюстрировать процесс создания пула у меня нет возможности, но оставлю здесь ссылку на подробное видео: https://www.youtube.com/watch?v=CnRaWED9QN8 и пояснения по RAID https://www.youtube.com/watch?v=-AnkHc7N0zM

  12. Создаем нужные DataSet - это что-то типа дисков в Windows, с возможностью установить лимиты и правила, а так же сделать "снепшот".

  13. Включаем в разделе "Services" SMB для раздачи файлов по сети для Windows

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

  14. Теперь нужно указать какие папки мы будем показывать через SMB. Идем в раздел "Sharing"->"Windows Shares (SMB)" и добавляем нужные папки.

  15. Проверяем что папки появились и файлы доступны через сеть. Для доступа к серверу через SMB можно использовать пользователя root или создать своего. Более подробно о пользователях и правах в этом видео: https://www.youtube.com/watch?v=R-5jbDTCsOE&t=12s

  16. Теперь приступим к настройке syncThing. Идем в раздел "Plugins" и выбираем syncThing, нажимаем кнопку "Install" и сразу переходим в "Advanced plugin installation". Здесь указываем имя конкретного плагина (их может быть несколько одного типа), убираем галочки "DHCP Autoconfigure IPv4", "NAT", "VNET", "Berkeley Packet Filter", указываем в поле "IPv4 address" 192.168.2.4 и "IPV4 mask" 24 (или другой IP, через который будет доступен UI syncThing).

  17. После установки плагина он автоматически запускается и UI доступен по ссылке http://192.168.2.4/syncthing/

  18. Для доступа к данным в ранее созданных DataSet-ах из под syncThing необходимо сделать несколько шагов:

    1. Проверяем id группы и пользователя при установке плагина, под которыми он работает с файловой системой. Для этого идем в раздел "Shell".

      Выполняем команду "cd /mnt/Data/iocage/jails/syncThingTrueNas/root", где "syncThingTrueNas" название нашего экземпляра плагина, а "Data" название Pool-а. После чего выполняем команду "ls -l" и смотрим на строку:
      "drwxr-xr-x 8 983 983 27 Jan 4 21:33 Sync".

    2. Здесь мы видим после 8-ки два одинаковых ID = 983. С этими ID нам нужно создать группу и пользователя. Для этого в разделе "Accounts"->"Groups" создаем группу с именем = "syncGroup" и ID = 983, ставим галочку "Samba Authentication".

      В разделе "Accounts"->"Users" создаем пользователя с именем = "sync" и ID = 983, ставим галочку "Samba Authentication, выбираем "Primary Group" = "syncGroup".

    3. Теперь нам нужно изменить права доступа на те DataSet, которые мы будем синхронизировать через syncThing, так как по умолчанию syncThing не имеет прав на чтение и запись в DataSet-ы. Для этого идем в раздел "Storage"->"Pools"->"Edit Permissions" и указываем "Owner" "user" = "sync", "group" = "syncGroup", ставим галочки "Apply User", "Apply Group", "Apply Permissions Recursively" и применяем изменения.

    4. Здесь стоит отметить, что доступ через SMB к DataSet-у, у которого поменяли владельца, будет теперь под пользователем "sync".

    5. Сейчас нам нужно пробросить DataSet в Jail плагина syncThing, что бы увидеть его в UI. Для этого останавливаем плагин в разделе "Plugins".

      Нажимаем кнопку "Mount Points" и добавляем все нужные DataSet-ы.

    6. Проверяем в GUI syncThing, что нужные папки стали доступны.

  19. Можно настраивать syncThing на других компьютерах и создавать свою сеть синхронизации и "бэкапа". Дополнительное видео по теме: https://www.youtube.com/watch?v=xkER4b5JX8g
    https://www.youtube.com/watch?v=3MKUPJek2Gw

    Приступим к настройке openVpn:

  1. Регистрируемся на портале https://openvpn.net/ в разделе Access Server

  2. Изучаем Access Server Quick Start Guide (https://as-portal.openvpn.com/quick-start-guide) или выполняем следующие шаги.

  3. Скачиваем Virtual Hard Disk https://as-portal.openvpn.com/get-access-server/hyperv

  4. Создаем виртуальную машину "поколения 1", устанавливаем выделяемую память не менее 2Gb, выбираем наш созданный виртуальный коммутатор, в качестве виртуального жесткого диска выбираем ранее скаченный образ.

  5. Перед запуском виртуальной машины и установкой ОС необходимо сделать некоторые настройки сети и запуска виртуальной машины. В параметрах виртуальной машины в меню "Сетевой адаптер"->"Дополнительные параметры" указываем постоянный MAC адрес для "виртуалки" = "00:00:00:00:00:02" или любой другой по вашему желанию и прописываем статический IP для него на роутере "192.168.2.2". Далее в меню "Контрольные точки" отключаем галочку "Включить...". В меню "Автоматические действия при запуске" выбираем пункт "Всегда запускать..". В меню "Автоматические действия при завершении" выбираем пункт "Завершать работу операционной системы..".

  6. При первом включении "виртуалки" вводим login = root, pwd = openvpnas.

    Далее будут спрашиваться некоторые настройки, которые можно оставить все по умолчанию. Только в первом вопросе надо будет набрать "yes".

  7. После установки всех настроек, получим экран, где будет написан url для доступа к Web Gui для дальнейшей настройки. В нашем случае это https://192.168.2.2:943/admin/

  8. Устанавливаем пароль для администратора Web Ui командой "passwd openvpn"

  9. Заходим в Web Ui с логином openvpn и только что установленным паролем.

  10. В меню "CONFIGURATION"->"Activation" вводим ключ активации, полученный при регистрации.

  11. В меню "CONFIGURATION"->"Network Settings" в строке "Hostname or IP Address:" указываем "белый" IP роутера (в нашем случае 5.129.00.00).

  12. В меню "Vpn settings" в поле "Specify the private subnets to which all clients should be given access (one per line):" прописываем нашу локальную сеть, что бы получить прямой доступ к ресурсам через VPN.

  13. На роутере создаем проброску портов 443 и 1194 на наш openVpn access server (в нашем случае 192.168.2.2)

  14. Создаем пользователя, под которым будем "логиниться" на клиенте openVpn. Для этого идем в меню "User management"->"User permissions" вводим в пустое поле логин, потом нажимаем рядом кнопку "More settings" и в меню "Allow Access To these Networks:" указываем нашу локальную сеть 192.168.2.0/24 и поставить галочку "all server-side private subnets".

  15. Скачиваем конфигурацию для клиента. Для этого заходим на страницу https://192.168.2.2:943/?src=connect и выбираем нужный нам пункт.

  16. Настройка закончена, осталось установить на ноутбук клиента и конфигурацию и проверить vpn из другой сети и доступ к локальным ресурсам.

  17. Для упрощения удаленной работы с ноутбука в командировке был приобретен мини роутер GL.iNet GL-MT300N-V2, который поддерживает openVpn Client. Загрузив в него нашу конфигурацию мы можем ничего не делать на ноутбуке - все будет ощущаться так, как будто мы работаем из офиса или дома в любой точке страны. Попробуйте - это очень удобно и снижает вероятность конфликта различных Vpn клиентов на ноутбуке.

P.S.

Спасибо всем кто прочитал статью, надеюсь она была полезной.
С уважением,
Павел Сарафанов.
Telegram: @pol1981

Комментарии (15)


  1. IRT
    26.01.2023 07:28
    +11

    А как служба безопасности банка смотрит на то, что вы напрямую пробрасываете RDP порт из офиса наружу?


    1. PaulSarafanov Автор
      26.01.2023 12:28
      -4

      Уточню - в моем случае под "Личным офисом" подразумевается коворкинг, где стоит мой персональный компьютер. Так что проблем с безопасностью нет и со сменой работы тоже.


  1. 13werwolf13
    26.01.2023 07:31
    +7

    сделан на основе Solaris

    может быть всё таки freebsd? а если копнуть глубже то есть две весрии - на базе фряхи и на базе дебиана

    поддерживает файловую систему ZFX

    может быть всё таки zfs?

    вообще в тексте можно очень много к чему придраться. например зачем разворачивать truenas которому надо немало ресурсов (например ОЗУ для действительно быстрой работы zfs хочет много) внутри виртуальной машины да ещё и на базе весьма паршивенького hyper-v если можно поставить его на хост и остальные ВМ крутить уже в нём, или зачем терпеть оверхэд openvpn да ещё и с довольно тяжёленькой вебмордой если давно изобретён wireguard. но спишем это на вкусовщину.

    однако возвращаясь к первой задаче:

    Хранение и доступ с любой локации к персональным документам и фотографиям, резервное копирование и хранение.

    решается простым syncthing который при использовании личного легковестного дисковери сервера (ну либо прописывании внутри конфига ip адресов всех участников учитывая что всё равно будет vpn со статической адресацией) является отличным устойчивым решением и не требует наличия вообще серверов. он умеет и версионирование файлов кстати, причём опционально можно выбрать на одном устройстве или на нескольких, и опционально же можно выбрать штатный механизм версионирования либо подкинуть собственную команду/скрипт для этого.

    хотя может быть это я придираюсь, но для меня преподнесённое в статье решение выглядит как "с пушки по воробьям", и это при том что я сам люблю применять truenas и понимаю преимущества openvpn над wireguard в некоторых случаях (которых тут нет)..


    1. PaulSarafanov Автор
      26.01.2023 12:24

      По поводу Solaris действительно перепутал - исправлю на FreeBSD
      По поводу ZFX - ошибка, исправлю на OpenZFS
      Syncthing не защищает от физических сбоев винчестера. У меня например "пожелтели" jpg-и и это синхронизировалось с другими компьютерами. OpenZFS позволяет избегать таких проблем.



      1. 13werwolf13
        26.01.2023 15:46
        +1

        Избегать таких проблем позволяет только бэкап по методу "3, 2, 1", а в статье о бэкапах ни слова, только вскользь про возможности снапшотить внутри zfs пула.


        1. PaulSarafanov Автор
          29.01.2023 04:39

          Хранение и бэкап данных это очень разносторонняя проблема и это не цель статьи. Хотя физическое зеркало на hdd, zfs пул плюс снепшот, дублирование данных на другие физические компьютеры в другой физической локации решает основную массу вопросов. После прочтения хороших статей по бэкапу я решил, что мне достаточно таких мер.


  1. OptimumOption
    26.01.2023 07:37
    +1

    Открываем сайт TrueNAS, смотрим минимальные системные требования - "...64-Bit CPU | 16 GB of RAM memory...". Открываем минимальные системные требования в _документации_ к TrueNAS - там уже 8 GB памяти. Но на практике (проверено) , что на этих 8Gb памяти он будет адово скрипеть даже на 8-ми ядерном процессоре. Закрываем сайт TrueNAS...

    p.s. для себя остановился на связке pfSense + OpenMediaVault в качестве NAS + роутер ASUS внутри сети в качестве сервера VPN


    1. PaulSarafanov Автор
      26.01.2023 12:26

      Действительно trueNas требует 16gb оперативной памяти, что бы быстро работать вместе с плагином.


  1. dimitrii_z
    26.01.2023 08:30
    +8

    "С 2003 года я работаю в качестве BackEnd разработчика в крупнейших банках Росси таких как: Сбербанк, Дойче банк, ВТБ, Газпромбанк."

    И далее рассказ как на работе сделан NAS (!) с личными данными, а по факту никто не проверяет что туда льётся (!!) и настроен прямой доступ (!!!) к ним. У меня большие вопросы к службе ИБ данных банков. У серьёзных ребят обычно проблема лишний порт открыть внутри контура на рабочей машине, а тут такое..

    И вообще странное решение задачи: работа может смениться та и мало ли что вообще с машиной случиться, логичнее было бы поднять это всё дома. И на отдельном рабочем ноуте вообще странно фотки хранить, зачем они там? Хочется бэкапирования - сделали дома сервер, настроили к нему доступ и на нём же бэкапы на нужные облака если есть.


    1. PaulSarafanov Автор
      26.01.2023 12:18

      Уточню - в моем случае под "Личным офисом" подразумевается коворкинг, где стоит мой персональный компьютер, который используется для работы. По поводу облаков у меня очень печальный опыт, данные у меня там пропадали гораздо чаще чем с личного HDD.


  1. Dolios
    26.01.2023 09:18

    Организация рабочего места в современных условиях… Организовать свое рабочее место с возможностью удаленной работы из любой точки страны

    В современных условиях доступ, если и нужен, то из-за границы.


    1. PaulSarafanov Автор
      26.01.2023 12:27

      Да это решаемая проблема с помощью openVpn Cloud (тоже бесплатен)


  1. sergiuchuckmisha
    27.01.2023 01:33

    Домашний сервер на базе ПК

    Не задумывались над виртуальным сервером в облаке? При возможной стоимости в несколько $/месяц этот вариант выглядит имеющим право на существование.

    Или этот вариант служба безопасности не пропускает?


    1. 13werwolf13
      27.01.2023 06:19

      несколько $ в месяц это простенькая vps, а дедик с гарантированными ресурсами, дисками приличного размера и приличным камушком будет стоить приличных и очень чувствительных денег.


    1. PaulSarafanov Автор
      29.01.2023 04:32

      Облако это всегда риск пропажи данных, закрытия облака, отсутствия контроля над облаком. А 4тб (+0.5тб в год) данных довольно дорого хранить в облаке. А если надо хранить секретную/персональную информацию? В облаке это категорически запрещено делать.