Doblink Articles
ПРАКТИЧЕСКИЙ РАЗБОР 12 минут чтения Лаборатория Doblink

Виртуальный патч-корд в шкаф АСУ ТП: как сделать прозрачный L2-мост для ПЛК без белых IP и танцев с бубном

Каждый инженер АСУ ТП хоть раз в жизни сталкивался с классической ситуацией: объект сдан, пусконаладка завершена, но спустя неделю вылезает досадный баг в логике. Заказчики звонят и требуют срочных правок, а оборудование находится за тысячи километров. На объекте в лучшем случае есть дежурный электрик или наладчик с ноутбуком и AnyDesk.

Многие коллеги решают этот вопрос так: ставят тяжелую инженерную среду на ноутбук на объекте, скидывают туда исходники проекта и правят логику через удаленный рабочий стол. Мне такой подход категорически не нравится: передавать исходники сторонним людям небезопасно, работать через дергающийся экран удаленки неудобно, а ставить условный TIA Portal весом в десятки гигабайт на слабый офисный ноутбук на объекте — отдельный вид пытки.

Возник логичный вопрос: неужели нет простого программного решения, чтобы превратить ПК на объекте в прозрачный шлюз и спокойно работать со своей привычной рабочей станции?

Забегая вперед — готового, бесплатного, кроссплатформенного решения «из коробки», которое поднималось бы в пару кликов без проброса портов, статических IP-адресов и сложных манипуляций с маршрутизацией, я не нашел. Перепробовав массу вариантов (TeamViewer VPN, ZeroTier, OpenVPN, WireGuard и другие open-source проекты), я постоянно упирался в фундаментальные ограничения: как связать виртуальный сетевой интерфейс с физическим портом? Как работать на уровне L2, если подавляющее большинство VPN работает на L3, а на объекте стоит совершенно новый контроллер, у которого даже нет назначенного IP-адреса?

В итоге мы решили собрать свой собственный аппаратно-программный комплекс — Doblink. Сразу оговорюсь: мы не изобретали принципиально новых протоколов с нуля. Мы взяли проверенные открытые технологии, надежные сетевые протоколы, готовое железо и аккуратно собрали работающий инструмент для инженеров.

В этой статье я расскажу, почему классические L3 VPN фатально спотыкаются о промышленную автоматизацию, как устроен аппаратный шлюз Doblink Box, зачем нам пришлось «обманывать» Windows виртуальным Loopback-адаптером и как под капотом работает прозрачная инкапсуляция сырых Ethernet-кадров в трафик, неотличимый от веб-серфинга.

# В чем корень зла: Layer 3 против Layer 2

Для сетевого инженера весь мир — это IP-маршрутизация (сетевой уровень Layer 3 модели OSI). Завернул пакеты в WireGuard или IPsec, прописал маршруты между подсетями — и офисная сеть работает как часы.

В промышленной автоматизации (АСУ ТП) действуют совершенно другие правила:

1 Широковещательные запросы и Profinet DCP

Инженерные среды (Siemens TIA Portal, Schneider SoMachine, CODESYS, Omron Sysmac Studio) ищут оборудование в сети не по IP-адресам, а сырыми широковещательными запросами канального уровня (Layer 2). Например, протокол Profinet DCP отправляет широковещательный кадр на MAC-адрес FF:FF:FF:FF:FF:FF.

Любой L3-маршрутизатор (включая виртуальные интерфейсы большинства VPN) по стандартам сетевого стека уничтожает такие широковещательные пакеты на входе. В итоге пинг до контроллера по известному IP может даже проходить, но функция «Accessible devices» в среде разработки будет упрямо выдавать пустой список.

2 Чистый контроллер «из коробки» (IP: 0.0.0.0)

Новый промышленный ПЛК с завода не имеет IP-адреса. Задать ему начальный IP, присвоить имя узла и залить базовую конфигурацию аппаратно возможно только по его MAC-адресу через L2-кадры. Если у вас нет прозрачной L2-связности с физическим сегментом, вы не сможете ввести контроллер в строй удаленно — придется лично ехать на объект с патч-кордом.

3 Серые IP, мобильный CGNAT и корпоративные брандмауэры

На распределенных объектах (котельные, насосные станции, шкафы телеметрии) интернет чаще всего работает через 4G-модем. Сотовые операторы держат абонентов за жестким Symmetric NAT и крайне редко дают белые адреса. А если объект подключен к корпоративной сети завода, локальные IT-службы намертво блокируют нестандартные порты, GRE-туннели и IPsec.

Наша цель была предельно практичной: сделать так, чтобы инженер, находясь в офисе или дома за чашкой кофе, подключился к шлюзу — и его среда разработки была на 100% уверена, что ПК подключен коротким кабелем прямо в свитч нужного шкафа автоматики.

# Архитектура решения: Прозрачный L2-мост

Чтобы решить поставленную задачу, мы разделили комплекс Doblink на две взаимодействующие части:

  • Компактный аппаратный шлюз Doblink Box, монтируемый в шкаф автоматики на DIN-рейку.
  • Программный сервер связи Doblink Desktop для рабочей станции под управлением Windows.

Вместо сложной маршрутизации IP-пакетов система эмулирует виртуальный неуправляемый L2-коммутатор (Ethernet-мост). Как это устроено под капотом:

1. Захват сырых кадров

Сетевой интерфейс шлюза перехватывает Ethernet-кадр целиком — вместе с MAC-заголовками источника и приемника, служебными кадрами (ARP, Profinet DCP, LLDP) и VLAN-тегами 802.1Q.

2. Инкапсуляция в TLS 1.3

Кадр шифруется алгоритмами сквозного шифрования (AES-256-GCM) и упаковывается в стандартную TCP-сессию на 443 порт. Для пограничных межсетевых экранов, корпоративных прокси и провайдерских DPI этот трафик выглядит абсолютно легитимно — как обычный визит на защищенный HTTPS-сайт.

3. Преодоление NAT и сотовых сетей

Если на объекте есть кабельный интернет с динамическим IP, шлюз использует встроенную службу DDNS в комбинации с алгоритмом NAT Traversal («пробитие» портов без ручной настройки объектового роутера).

Для тяжелых условий (сотовые операторы 4G LTE с жестким CGNAT или закрытые заводские периметры) используется ретрансляция через облачный шлюз Azure Relay (*.vpnazure.net). Шлюз сам держит постоянное исходящее TCP-соединение наружу, поэтому белый статический IP-адрес на объекте не требуется.

4. Режим «Stealth» (Local Bridge без TAP)

На стороне шлюза физический сетевой интерфейс переводится в безадресный режим (Promiscuous Mode). Устройство прозрачно перекладывает кадры между физическим медным портом и виртуальным хабом. При этом сам порт шлюза не светится в технологической подсети промежуточными IP-адресами и невидим для сетевых сканеров.

5. Изоляция рабочего интернета (Route Guard)

Классические VPN-клиенты часто перенаправляют шлюз по умолчанию (0.0.0.0/0), из-за чего на рабочем компьютере инженера перестает работать локальная сеть, офисная почта или корпоративные чаты. Doblink изолирует промышленную сеть: через мост идут только пакеты подсети контроллеров, а браузер и рабочие программы продолжают выходить в интернет через ваш основной домашний или офисный роутер.

# Проблема с Windows, или Зачем нам понадобился «KM-TEST Loopback»

На этапе сборки первого прототипа под Windows мы натолкнулись на неочевидное поведение сетевого стека Microsoft:

В чем проблема? Если в физический Ethernet-разъем ноутбука не вставлен кабель с активным линком, Windows переводит сетевой адаптер в состояние «Сетевой кабель не подключен» (Media Disconnected).

Среды разработки (TIA Portal, CODESYS) при этом просто блокируют отключенный адаптер и не дают выбрать его в качестве интерфейса для поиска контроллеров! Если инженер работает с ноутбука по офисному Wi-Fi, Ethernet-порт свободен — и запустить поиск устройств становится невозможно.

Наше решение: мы задействовали виртуальный адаптер Microsoft KM-TEST Loopback Adapter. Это системный драйвер программной заглушки, аппаратно закольцованный сам на себя. Для Windows он всегда находится во включенном состоянии (Link Up) на виртуальной скорости 10 Гбит/с.

Связка работает так:

  1. Инженер создает адаптер KM-TEST в системе (для удобства мы упаковали установку через утилиту devcon.exe в простой BAT-скрипт в один клик).
  2. Адаптеру задается статический IP-адрес из диапазона подсети ПЛК (например, 192.168.81.13).
  3. В Doblink Desktop адаптер KM-TEST привязывается локальным мостом (Local Bridge) к целевому виртуальному хабу.
  4. В среде разработки (TIA Portal) в качестве интерфейса связи выбирается адаптер KM-TEST.

Инженерный софт начинает слать L2-кадры в активный сетевой адаптер, Doblink Desktop перехватывает их, заворачивает в TLS-туннель и пересылает в шлюз на объекте. Для среды разработки это выглядит как абсолютно реальный физический провод, подключенный к ПЛК.

# Где еще это применимо?

Хотя проект изначально создавался под задачи работы с промышленными контроллерами, протокольно-прозрачный L2-мост закрывает массу смежных потребностей:

SCADA и диспетчеризация 24/7

Непрерывный опрос удаленных котельных, насосных и распределительных подстанций по Modbus TCP, OPC UA или МЭК 60870-5-104 без покупки белых IP у сотовых операторов.

Робототехника (ROS / ROS2)

Обнаружение узлов в ROS2 базируется на мультикасте (DDS Multicast Discovery). Классические L3 VPN мультикаст глушат, а L2-мост прозрачно передает команды и RTSP-видео с мобильных платформ (AGV/AMR) и манипуляторов.

Умный дом и BMS-системы

Бесшовное объединение распределенных загородных щитов автоматики на Wiren Board, серверов Home Assistant, KNX IP-шлюзов и контроллеров BACnet в единый широковещательный сегмент.

OEM-производители оборудования

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

# Итоги и планы на будущее

Проект Doblink вырос из чисто практической инженерной боли и постепенно перерос в законченный полукоммерческий продукт.

Что работает уже сейчас:

  • • Полноценная передача канального уровня (L2) в зашифрованном туннеле: сквозной поиск контроллеров, прошивка с нуля и прозрачный широковещательный обмен.
  • • Маскировка трафика под стандартный HTTPS (порт 443 TCP), пробивающая строгие NAT и корпоративные файрволы.
  • • Нулевые требования к статическим белым адресам на стороне объекта.
  • • Готовый автономный шлюз на DIN-рейку с веб-интерфейсом и удобная десктопная программа под Windows.

Что в планах на доработку:

  • Собственный DDNS и сервер-ретранслятор: реализация независимого relay-сервера на замену Azure Relay, чтобы проект работал полностью автономно без привязки к зарубежной инфраструктуре.
  • Нативное десктопное приложение на Delphi: прямо сейчас пишется отдельный легковесный клиент.
  • Обновление аппаратной части: перевод входного питания на промышленный стандарт 24 В DC с клеммником на DIN-рейку (сейчас используется разъем 5 В Micro-USB).
  • Заводской литой корпус: переход с 3D-печати корпуса на промышленную термопластавтоматную отливку.
@Doblink_tech