Соединение офисов для совместной работы в 1С

Задача: в удаленном офисе есть компьютер (условно назовем его "сервер"), на котором установлена файловая база 1С. Необходимо удаленно организовать доступ к этому ПК для совместной работы в 1С и M.E.Doc.

Задачу усложняет 2 факта: 

  • оба офиса находятся за NAT'ом и прямое подключение не представляется возможным;
  •  на "сервере" установлена не серверная версия ОС (Windows 7 Максимальная). Подключение для настройки к нему возможно только через TeamViewer.

Принимая во внимание то, что количество пользователей в базе будет не более 3-х, разобьем задачу на этапы:

  1. Объединение компьютеров в виртуальную локальную сеть (с помощью ZeroTier);
  2. С помощью 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 и пароль:

Регистрация аккаунта ZeroTier

Безо всяких подтверждений почты попадаем в личный кабинет:

Личный кабинет ZeroTier

В разделе "Networks" создаем новую сеть и сразу наблюдаем ID сети (он понадобится для подключения):

Создание новой сети ZeroTier

По клику на ID переходим на страницу настроек сети. Поскольку устройств в нашей сети будет не много, поменяем диапазон IP-адресов сети на "192.168.191.*"

Редактируем диапазон IP-адресов сети

Подключаем компьютеры к сети ZeroTier

В нашей сети будут только устройства с ОС Windows и нам понадобится загрузить соответствующий дистрибутив ZeroTier One. Установка его не представляет проблем:

Установка ZeroTier One

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

Авторизация клиента в ZeroTier

Появляется список сетей нашего аккаунта. Присоединяемся с помощью кнопки "Join"

Присоединяемся к сети ZeroTier

В списке сетевых адаптеров появляется новый адаптер ZeroTier, которому присваивается случайный IP-адрес из выбранного диапазона:

Сетевой адаптер ZeroTier

Для простоты, мы зададим "серверу" IP-адрес "192.168.191.1". Все это можно сделать в разделе настроек сети. По мере присоединения к сети устройств, они будут появляться в разделе "Members". Зададим понятное имя и IP-адрес (для этого можно ввести IP-адрес вручную и нажать на "+"):

Задаем имя и IP-адрес сервера

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

Добавляем ZeroTier в автозагрузку

Для того чтобы ZeroTier загржался автоматически при запуске ПК, заходим в Preferences и добавляем его в автозагрузку:

Добавляем ZeroTier в автозагрузку

Настройки безопасности 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 Максимальная есть возможность включить подключение через удаленный рабочий стол в Дополнительных параметрах системы.

Включение удаленного рабочего стола Windows 7

Задаем пароль для пользователя

Если у текущего пользователя нет пароля - самое время его создать. Иначе подключение по RDP может заканчиваться ошибкой про истекший срок действия пароля или вот такой:

Вход в систему не произведен: имеются ограничения, связанные с учетной записью.

Отключаем срок действия пароля

Для комфортной работы будет лучше отключить максимальный срок действия пароля (по умолчанию 42 дня). Инструкция

Проверяем подключение по RDP

После задания пароля пользователя, подключение уже возможно. IP-адрес нашего "сервера" - 192.168.191.1. На вопрос про сертификат отвечаем положительно:

Подключение к серверу через RDP

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

Подключение по RDP к "серверу" через ZeroTier Заблокированный рабочий стол Windows 7 во время подключения по RDP

Установка RDPWrapper для активации многопользовательского RDP

Проект RDPWrap ставит перед собой целью включение возможности удаленного доступа по RDP (в т. ч. для нескольких пользователей) для "домашних" редакций Windows (и не только). Он не подменяем файлы операционной системы, а "встраивается" в нее. Проект сомнителен с точки зрения лицензионности, однако, для нашей тестовой задачи подойдет.

Для установки RDPWrap необходимо загрузить пакет последней версии, распаковать его и запустить install.bat:

Установка RDPWrap

Утилита RDPConf:

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]" (полная поддержка).

RDPConf Fully supported

Проверка работы

Для проверки создадим еще 2-х пользователей и 2 подключения по RDP. Дополнительно к этому, на "сервере" будет работать локальный пользователь.

Диспетчер задач Windows

Скриншот 2-х одновременных подключений:

Скриншот 2-х одновременных подключений

Выводы

Из обычного ПК с Windows 7 Максимальная, при помощи RDPWrap, мы сделали простой сервер для совместной работы 3-х пользователей в 1С. Софтверные ограничения нашего решения:

  1. для RDPWrap - до 15 одновременных сессий RDP
  2. для бесплатной версии ZeroTier - 100 устройств в сети.

Благодаря ZeroTier, пользователи 1С могут быть разнесены географически как угодно (разные города, разные страны). Благодаря встроенной безопасности и Flow Rules, наша сеть ZeroTier надежно защищена. В ней допускается хождение только пакетов RDP по направлению к серверу и обратно.


Комментарии