Обо мне
Добрый день, коллеги. Меня зовут Сарафанов Павел. С 2003 года я работаю в качестве BackEnd разработчика в крупнейших банках Росси таких как: Сбербанк, Дойче банк, ВТБ, Газпромбанк.
Постановка задачи
Организовать свое рабочее место с возможностью удаленной работы из любой точки страны; доступ к локальным ресурсам домашней сети; доступ, хранение и резервное копирование персональных фотографий и файлов.
Описание инфраструктуры
Есть три локации: Дом, "личный" офис, ноутбук в командировках.
Дом
Роутер
Домашний сервер на базе ПК
Персональные компьютеры, ноутбуки и телефоны домочадцев
Офис
Роутер
Рабочий компьютер
В командировке или дома
Мини роутер
Рабочий ноутбук
Уточнение задачи
Хранение и доступ с любой локации к персональным документам и фотографиям, резервное копирование и хранение.
Возможность подключиться удаленным рабочим столом или помощником к компьютерам в офисе и дома.
Доступ с рабочего ноутбука к специфическим ресурсам провайдеров и удаленная работа в любом городе через "белые" 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 ip 192.168.1.21 порт рабочего стола 3389. Настройка на роутере: внешний порт 3389 -> внутренний ip 192.168.1.21, порт 3389. При подключение с офиса указываем белый ip роутера: 90.189.210.70
Домашний компьютер 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 и удаленный рабочий стол по айпи компьютера без открытия портов на роутерах. И все ресурсы провайдера тоже доступны с ноутбука.
Подробное описание шагов по настройке
И так начнем описывать сделанные настройки по шагам со скриншотами.
В офисе стоит:
Роутер 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.
Рабочий компьютер на базе Windows 11, внутренний IP - 192.168.2.21, маска подсети - 255.255.255.0
Приступим к настройке trueNas:
Включим HyperV в настройках windows: Пуск->Параметры->Приложения->Дополнительные компоненты->Другие компоненты windows. Ставим галочку на против пункта Hyper-V и перезагружаем компьютер.
Запускаем окно управления виртуальными машинами "Диспетчер Hyper-V" и проводим настройку виртуального коммутатора. Выбираем меню "Диспетчер виртуальных коммутаторов" и создаем с типом "Внешняя сеть", что бы наши виртуальные машины были в локальной сети, присваиваем имя и ставим галочку "предоставлять общий доступ...".
Скачиваем ISO образ установщика trueNas https://www.truenas.com/download-truenas-core/
Создаем виртуальную машину "поколения 1"
устанавливаем выделяемую память не менее 12Gb
выбираем наш созданный виртуальный коммутатор
виртуальный жесткий диск
выбираем пункт "Установить ОС с загрузочного DVD и подкладываем скаченный ранее iso файл
Перед запуском виртуальной машины и установкой ОС необходимо сделать некоторые настройки сети и запуска виртуальной машины. В параметрах виртуальной машины в меню "Сетевой адаптер"->"Дополнительные параметры" указываем постоянный MAC адрес для "виртуалки" = "00:00:00:00:00:01"
любой другой по вашему желанию и прописываем статический IP для него на роутере "192.168.2.3". Далее в меню "Контрольные точки" отключаем галочку "Включить..."
В меню "Автоматические действия при запуске" выбираем пункт "Всегда запускать.."
В меню "Автоматические действия при завершении" выбираем пункт "Завершать работу операционной системы.."
Запускаем виртуальную машину и устанавливаем ОС. Выбираем пункт меню Install/Upgrade
Далее пробелом выбираем диск "da0" для установки ОС
Выбираем "Proceed with installation"
Далее придумываем пароль для root
Выбираем "Boot via Bios"
Выбираем пункт "Create Swap"
и ждем установки. Перегружаем "виртуалку" и извлекаем ISO.
После загрузки trueNas
на Web GUI сервера: https://192.168.2.3/ui/dashboard , вводим пароль от root, указанный при установке и попадаем на DashBoard
Теперь нам нужно подключить наши HDD. Идем в Windows "Управление компьютером" и в меню управление дисками отключаем винчестеры (на названии диска правой кнопкой и пункт меню "Вне сети"), которые будут использоваться в trueNas сервере.
Выключаем виртуальный сервер trueNas и идем в настройки. Добавляем в SCSI физические HDD диски.
Запускаем сервер и в dashboard-е в меню "Storage"->"Disk" проверяем, что наши диски появились.
Создаем новый Pool. К сожалению проиллюстрировать процесс создания пула у меня нет возможности, но оставлю здесь ссылку на подробное видео: https://www.youtube.com/watch?v=CnRaWED9QN8 и пояснения по RAID https://www.youtube.com/watch?v=-AnkHc7N0zM
Создаем нужные DataSet - это что-то типа дисков в Windows, с возможностью установить лимиты и правила, а так же сделать "снепшот".
Включаем в разделе "Services" SMB для раздачи файлов по сети для Windows
и дополнительно можем указать название компьютера, его описание и рабочую группу.
Теперь нужно указать какие папки мы будем показывать через SMB. Идем в раздел "Sharing"->"Windows Shares (SMB)" и добавляем нужные папки.
Проверяем что папки появились и файлы доступны через сеть. Для доступа к серверу через SMB можно использовать пользователя root или создать своего. Более подробно о пользователях и правах в этом видео: https://www.youtube.com/watch?v=R-5jbDTCsOE&t=12s
Теперь приступим к настройке 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).
После установки плагина он автоматически запускается и UI доступен по ссылке http://192.168.2.4/syncthing/
Для доступа к данным в ранее созданных DataSet-ах из под syncThing необходимо сделать несколько шагов:
Проверяем 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".Здесь мы видим после 8-ки два одинаковых ID = 983. С этими ID нам нужно создать группу и пользователя. Для этого в разделе "Accounts"->"Groups" создаем группу с именем = "syncGroup" и ID = 983, ставим галочку "Samba Authentication".
В разделе "Accounts"->"Users" создаем пользователя с именем = "sync" и ID = 983, ставим галочку "Samba Authentication, выбираем "Primary Group" = "syncGroup".
Теперь нам нужно изменить права доступа на те DataSet, которые мы будем синхронизировать через syncThing, так как по умолчанию syncThing не имеет прав на чтение и запись в DataSet-ы. Для этого идем в раздел "Storage"->"Pools"->"Edit Permissions" и указываем "Owner" "user" = "sync", "group" = "syncGroup", ставим галочки "Apply User", "Apply Group", "Apply Permissions Recursively" и применяем изменения.
Здесь стоит отметить, что доступ через SMB к DataSet-у, у которого поменяли владельца, будет теперь под пользователем "sync".
Сейчас нам нужно пробросить DataSet в Jail плагина syncThing, что бы увидеть его в UI. Для этого останавливаем плагин в разделе "Plugins".
Нажимаем кнопку "Mount Points" и добавляем все нужные DataSet-ы.
Проверяем в GUI syncThing, что нужные папки стали доступны.
Можно настраивать syncThing на других компьютерах и создавать свою сеть синхронизации и "бэкапа". Дополнительное видео по теме: https://www.youtube.com/watch?v=xkER4b5JX8g
https://www.youtube.com/watch?v=3MKUPJek2GwПриступим к настройке openVpn:
Регистрируемся на портале https://openvpn.net/ в разделе Access Server
Изучаем Access Server Quick Start Guide (https://as-portal.openvpn.com/quick-start-guide) или выполняем следующие шаги.
Скачиваем Virtual Hard Disk https://as-portal.openvpn.com/get-access-server/hyperv
Создаем виртуальную машину "поколения 1", устанавливаем выделяемую память не менее 2Gb, выбираем наш созданный виртуальный коммутатор, в качестве виртуального жесткого диска выбираем ранее скаченный образ.
Перед запуском виртуальной машины и установкой ОС необходимо сделать некоторые настройки сети и запуска виртуальной машины. В параметрах виртуальной машины в меню "Сетевой адаптер"->"Дополнительные параметры" указываем постоянный MAC адрес для "виртуалки" = "00:00:00:00:00:02" или любой другой по вашему желанию и прописываем статический IP для него на роутере "192.168.2.2". Далее в меню "Контрольные точки" отключаем галочку "Включить...". В меню "Автоматические действия при запуске" выбираем пункт "Всегда запускать..". В меню "Автоматические действия при завершении" выбираем пункт "Завершать работу операционной системы..".
При первом включении "виртуалки" вводим login = root, pwd = openvpnas.
Далее будут спрашиваться некоторые настройки, которые можно оставить все по умолчанию. Только в первом вопросе надо будет набрать "yes".
После установки всех настроек, получим экран, где будет написан url для доступа к Web Gui для дальнейшей настройки. В нашем случае это https://192.168.2.2:943/admin/
Устанавливаем пароль для администратора Web Ui командой "passwd openvpn"
Заходим в Web Ui с логином openvpn и только что установленным паролем.
В меню "CONFIGURATION"->"Activation" вводим ключ активации, полученный при регистрации.
В меню "CONFIGURATION"->"Network Settings" в строке "Hostname or IP Address:" указываем "белый" IP роутера (в нашем случае 5.129.00.00).
В меню "Vpn settings" в поле "Specify the private subnets to which all clients should be given access (one per line):" прописываем нашу локальную сеть, что бы получить прямой доступ к ресурсам через VPN.
На роутере создаем проброску портов 443 и 1194 на наш openVpn access server (в нашем случае 192.168.2.2)
Создаем пользователя, под которым будем "логиниться" на клиенте openVpn. Для этого идем в меню "User management"->"User permissions" вводим в пустое поле логин, потом нажимаем рядом кнопку "More settings" и в меню "Allow Access To these Networks:" указываем нашу локальную сеть 192.168.2.0/24 и поставить галочку "all server-side private subnets".
Скачиваем конфигурацию для клиента. Для этого заходим на страницу https://192.168.2.2:943/?src=connect и выбираем нужный нам пункт.
Настройка закончена, осталось установить на ноутбук клиента и конфигурацию и проверить vpn из другой сети и доступ к локальным ресурсам.
Для упрощения удаленной работы с ноутбука в командировке был приобретен мини роутер GL.iNet GL-MT300N-V2, который поддерживает openVpn Client. Загрузив в него нашу конфигурацию мы можем ничего не делать на ноутбуке - все будет ощущаться так, как будто мы работаем из офиса или дома в любой точке страны. Попробуйте - это очень удобно и снижает вероятность конфликта различных Vpn клиентов на ноутбуке.
P.S.
Спасибо всем кто прочитал статью, надеюсь она была полезной.
С уважением,
Павел Сарафанов.
Telegram: @pol1981