Организация рабочего места в современных условиях

Обо мне

Добрый день, коллеги. Меня зовут Сарафанов Павел. С 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.

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

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

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

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

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

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

    06c13de6e14a1caeae2c601dddf5d0ff.jpg

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

    0c3775d3acfcbd2a1ac680f9566713d3.jpg

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

    6192776d69ecf96f495eb92abbbbbb8b.jpg

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

    9a92e970cd74ccbe211e9012332651cf.jpg

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

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

    56e6fe6f0b43f2d698fb5e49fd90a24a.jpg

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

    ced481b3d1f1e54625edb8f0a88c0e51.jpg

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

    7c0c57a2d78301b138151a7bf3f371a1.jpg

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

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

    cb8b37a6d068f8edecfed3de4da070c8.jpg

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

    41d8f42b5224d89be742a02c3283341e.jpg

    Выбираем «Proceed with installation»

    d254ac6f78d5e9b6070c8de172816efa.jpg

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

    aa4ab03c2417909a60988cb0d47e896f.jpg

    Выбираем «Boot via Bios»

    b71b22e94484016c270546f61059af63.jpg

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

    aa560f8f7a57263ecc62a6fb7d7b6f55.jpg

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

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

    8c6df8a2f69081c97cba914baf74f454.jpg

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

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

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

    7e024f3aafde22f7f2964c561d39d598.jpg
  10. Запускаем сервер и в dashboard-е в меню «Storage»→«Disk» проверяем, что наши диски появились.

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

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

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

    2707781bbaea447d43b4c2a5022fc4fd.jpg

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

    6006f34f38c8f6bb461b84e363e7ab0d.jpg
  14. Теперь нужно указать какие папки мы будем показывать через SMB. Идем в раздел «Sharing»→«Windows Shares (SMB)» и добавляем нужные папки.

    4351663a87ee6194731867370bfb8719.jpg
  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).

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

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

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

      dc1277c8056de7256b9a6c85c2727d7e.jpg

      Выполняем команду «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».

      cc7dfaf292e4556012e31f79b8d01614.jpg

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

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

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

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

      ab65eb49eb98a5758f9080d4293070ff.jpg

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

      2de6cc01ef03b043e71c3c9118110baa.jpg
    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, выбираем наш созданный виртуальный коммутатор, в качестве виртуального жесткого диска выбираем ранее скаченный образ.

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

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

    061097096f18e3b7a0e73e8d74e17fe7.jpg

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

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

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

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

    b69264091676eaaea289b930ae643295.jpg
  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.

    bae74b9298f10909a1ee0d39fda2037f.jpg
  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».

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

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

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

P.S.

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

© Habrahabr.ru