Задача: в удаленном офисе есть компьютер (условно назовем его "сервер"), на котором установлена файловая база 1С. Необходимо удаленно организовать доступ к этому ПК для совместной работы в 1С и M.E.Doc.
Задачу усложняет 2 факта:
- оба офиса находятся за NAT'ом и прямое подключение не представляется возможным;
- на "сервере" установлена не серверная версия ОС (Windows 7 Максимальная). Подключение для настройки к нему возможно только через TeamViewer.
Принимая во внимание то, что количество пользователей в базе будет не более 3-х, разобьем задачу на этапы:
- Объединение компьютеров в виртуальную локальную сеть (с помощью ZeroTier);
- С помощью RDPWrap включаем возможность подключения к "серверу" по RDP.
Использование RPPWrap, вероятно, нарушает пользовательское соглашение Microsoft, поэтому задача будет рассматриваться исключительно в тестовом ключе. Для реальной многопользовательской эксплуатации RDP необходима Windows Server и лицензии User CAL + RDP User CAL.
Использование ZeroTier для объединения ПК в виртуальную локальную сеть
ZeroTier - это виртуальный управляемый Ethernet-свитч. Добавленные в одну сеть ZeroTier, устройства взаимодействуют так, будто бы они находятся в одной локальной сети независимо от расстояния между ними. На момент написания статьи, ZeroTier поддерживает работу в Windows, Linux, MacOS, Android и iOS. Бесплатная версия ZeroTier поддерживает добавление до 100 устройств в сеть, что, в нашем случае, более чем достаточно.
Создаем аккаунт и сеть ZeroTier
Для создания аккаунта ZeroTier необходимо указать e-mail и пароль:
Безо всяких подтверждений почты попадаем в личный кабинет:
В разделе "Networks" создаем новую сеть и сразу наблюдаем ID сети (он понадобится для подключения):
По клику на ID переходим на страницу настроек сети. Поскольку устройств в нашей сети будет не много, поменяем диапазон IP-адресов сети на "192.168.191.*"
Подключаем компьютеры к сети ZeroTier
В нашей сети будут только устройства с ОС Windows и нам понадобится загрузить соответствующий дистрибутив ZeroTier One. Установка его не представляет проблем:
После установки в правом нижнем углу появится иконка ZeroTier. При клике на нее появится предложение авторизоваться:
Появляется список сетей нашего аккаунта. Присоединяемся с помощью кнопки "Join"
В списке сетевых адаптеров появляется новый адаптер ZeroTier, которому присваивается случайный IP-адрес из выбранного диапазона:
Для простоты, мы зададим "серверу" IP-адрес "192.168.191.1". Все это можно сделать в разделе настроек сети. По мере присоединения к сети устройств, они будут появляться в разделе "Members". Зададим понятное имя и IP-адрес (для этого можно ввести IP-адрес вручную и нажать на "+"):
Аналогичным образом подключаем к виртуальной сети все остальные компьютеры.
Добавляем ZeroTier в автозагрузку
Для того чтобы ZeroTier загржался автоматически при запуске ПК, заходим в Preferences и добавляем его в автозагрузку:
Настройки безопасности ZeroTier
Сейчас в нашей сети ZeroTier разрешен любой трафик, по аналогии с ЛВС. Однако, ZeroTier предоставляет возможность управлять трафиком с помощью т. н. Flow Rules (правила потоков), которые задаются в настройках сети ZeroTier Central. Фактически, нам необходимо разрешить трафик к порту 3389 "сервера" и обратный трафик к клиентам. Поэтому, наши правила Flow Rules будут иметь следующий вид:
# Allow only IPv4, IPv4 ARP, and IPv6 Ethernet frames.
# Drop non-ZeroTier issued and managed IP addresses.
#
# This prevents IP spoofing but also blocks manual IP management at the OS level and
# bridging unless special rules to exempt certain hosts or traffic are added before
# this rule.
drop
not ethertype ipv4
and not ethertype arp
and not ethertype ipv6
and not chr ipauth
;
# accept RDP packets to server
accept
ipprotocol tcp
and ipdest 192.168.191.1/32
and dport 3389
;
# Drop TCP SYN,!ACK packets (new connections) not explicitly whitelisted above
break # break can be overridden by a capability
chr tcp_syn # TCP SYN (TCP flags will never match non-TCP packets)
and not chr tcp_ack # AND not TCP ACK
;
# Accept anything else. This is required since default is 'drop'.
accept;
Включаем и настраиваем RDP на "сервере"
Включаем протокол RDP на Windows 7
В редакции Windows 7 Максимальная есть возможность включить подключение через удаленный рабочий стол в Дополнительных параметрах системы.
Задаем пароль для пользователя
Если у текущего пользователя нет пароля - самое время его создать. Иначе подключение по RDP может заканчиваться ошибкой про истекший срок действия пароля или вот такой:
Отключаем срок действия пароля
Для комфортной работы будет лучше отключить максимальный срок действия пароля (по умолчанию 42 дня). Инструкция
Проверяем подключение по RDP
После задания пароля пользователя, подключение уже возможно. IP-адрес нашего "сервера" - 192.168.191.1. На вопрос про сертификат отвечаем положительно:
Однако, многопользовательская работа по прежнему не возможна. При подключении через RDP, рабочий стол "сервера" автоматически блокируется.
Установка RDPWrapper для активации многопользовательского RDP
Проект RDPWrap ставит перед собой целью включение возможности удаленного доступа по RDP (в т. ч. для нескольких пользователей) для "домашних" редакций Windows (и не только). Он не подменяем файлы операционной системы, а "встраивается" в нее. Проект сомнителен с точки зрения лицензионности, однако, для нашей тестовой задачи подойдет.
Для установки RDPWrap необходимо загрузить пакет последней версии, распаковать его и запустить install.bat:
Утилита RDPConf:
Настройка RDPConf
Надпись "[supported partially]" говорит нам, что утилита работает в ограниченном режиме (максимум 2 одновременных сессии RDP). Версия termsrv.dll "6.1.7601.24326" поддерживается не полностью. Однако, если поискать в Google, можно найти вот такую тему.
Для полноценной работы, в файл rdpwrap.ini ("C:\Program Files\RDP Wrap") необходимо добавить такие настройки:
[6.1.7601.24326]
SingleUserPatch.x86=1
SingleUserOffset.x86=1A675
SingleUserCode.x86=nop
SingleUserPatch.x64=1
SingleUserOffset.x64=17F1E
SingleUserCode.x64=Zero
DefPolicyPatch.x86=1
DefPolicyOffset.x86=19E41
DefPolicyCode.x86=CDefPolicy_Query_eax_esi
DefPolicyPatch.x64=1
DefPolicyOffset.x64=17CEE
DefPolicyCode.x64=CDefPolicy_Query_eax_rdi
После перезапуска ПК, запустим утилиту RDPConf и убедимся что надпись поменялась на "[fully supported]" (полная поддержка).
Проверка работы
Для проверки создадим еще 2-х пользователей и 2 подключения по RDP. Дополнительно к этому, на "сервере" будет работать локальный пользователь.
Скриншот 2-х одновременных подключений:
Выводы
Из обычного ПК с Windows 7 Максимальная, при помощи RDPWrap, мы сделали простой сервер для совместной работы 3-х пользователей в 1С. Софтверные ограничения нашего решения:
- для RDPWrap - до 15 одновременных сессий RDP
- для бесплатной версии ZeroTier - 100 устройств в сети.
Благодаря ZeroTier, пользователи 1С могут быть разнесены географически как угодно (разные города, разные страны). Благодаря встроенной безопасности и Flow Rules, наша сеть ZeroTier надежно защищена. В ней допускается хождение только пакетов RDP по направлению к серверу и обратно.