Виртуальный патч-корд в шкаф АСУ ТП: как сделать прозрачный L2-мост для ПЛК без белых IP и танцев с бубном
Каждый инженер АСУ ТП хоть раз в жизни сталкивался с классической ситуацией: объект сдан, пусконаладка завершена, но спустя неделю вылезает досадный баг в логике. Заказчики звонят и требуют срочных правок, а оборудование находится за тысячи километров. На объекте в лучшем случае есть дежурный электрик или наладчик с ноутбуком и AnyDesk.
Многие коллеги решают этот вопрос так: ставят тяжелую инженерную среду на ноутбук на объекте, скидывают туда исходники проекта и правят логику через удаленный рабочий стол. Мне такой подход категорически не нравится: передавать исходники сторонним людям небезопасно, работать через дергающийся экран удаленки неудобно, а ставить условный TIA Portal весом в десятки гигабайт на слабый офисный ноутбук на объекте — отдельный вид пытки.
Возник логичный вопрос: неужели нет простого программного решения, чтобы превратить ПК на объекте в прозрачный шлюз и спокойно работать со своей привычной рабочей станции?
В итоге мы решили собрать свой собственный аппаратно-программный комплекс — 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.
# Архитектура решения: Прозрачный L2-мост
Чтобы решить поставленную задачу, мы разделили комплекс Doblink на две взаимодействующие части:
- Компактный аппаратный шлюз Doblink Box, монтируемый в шкаф автоматики на DIN-рейку.
- Программный сервер связи Doblink Desktop для рабочей станции под управлением Windows.
Вместо сложной маршрутизации IP-пакетов система эмулирует виртуальный неуправляемый L2-коммутатор (Ethernet-мост). Как это устроено под капотом:
Сетевой интерфейс шлюза перехватывает Ethernet-кадр целиком — вместе с MAC-заголовками источника и приемника, служебными кадрами (ARP, Profinet DCP, LLDP) и VLAN-тегами 802.1Q.
Кадр шифруется алгоритмами сквозного шифрования (AES-256-GCM) и упаковывается в стандартную TCP-сессию на 443 порт. Для пограничных межсетевых экранов, корпоративных прокси и провайдерских DPI этот трафик выглядит абсолютно легитимно — как обычный визит на защищенный HTTPS-сайт.
Если на объекте есть кабельный интернет с динамическим IP, шлюз использует встроенную службу DDNS в комбинации с алгоритмом NAT Traversal («пробитие» портов без ручной настройки объектового роутера).
Для тяжелых условий (сотовые операторы 4G LTE с жестким CGNAT или закрытые заводские периметры) используется ретрансляция через облачный шлюз Azure Relay (*.vpnazure.net). Шлюз сам держит постоянное исходящее TCP-соединение наружу, поэтому белый статический IP-адрес на объекте не требуется.
На стороне шлюза физический сетевой интерфейс переводится в безадресный режим (Promiscuous Mode). Устройство прозрачно перекладывает кадры между физическим медным портом и виртуальным хабом. При этом сам порт шлюза не светится в технологической подсети промежуточными IP-адресами и невидим для сетевых сканеров.
Классические VPN-клиенты часто перенаправляют шлюз по умолчанию (0.0.0.0/0), из-за чего на рабочем компьютере инженера перестает работать локальная сеть, офисная почта или корпоративные чаты. Doblink изолирует промышленную сеть: через мост идут только пакеты подсети контроллеров, а браузер и рабочие программы продолжают выходить в интернет через ваш основной домашний или офисный роутер.
# Аппаратный шлюз: Doblink Box
Мы намеренно отказались от идеи «просто поставьте софт на промышленный ПК или сторонний ноутбук». В шкафу автоматики требуется компактное, надежное и автономное решение, которое стабильно работает на DIN-рейке и не требует монитора с клавиатурой.
Архитектура двух портов и метрики Netplan
В корпусе шлюза физически развязаны два сетевых интерфейса:
- Порт LAN 1 (lan0): предназначен для подключения к технологической подсети шкафа управления. По умолчанию настроен на статический IP
192.168.0.1/24. Сюда подключаются ПЛК, панели оператора (HMI), частотные приводы и контроллеры роботов. - Порт LAN 2 (end0): порт внешней сети. По умолчанию работает в режиме DHCP-клиента и подключается к роутеру предприятия или внешнему модему для выхода в интернет.
Чтобы исходящий интернет-трафик шлюза гарантированно шел наружу, а не пытался уйти в технологический сегмент автоматики, реализовано управление метриками маршрутов через Netplan. Меньшее значение метрики означает высший приоритет: WAN-интерфейсу или Wi-Fi назначается метрика 100, а технологическому порту lan0 — 500.
Как подключиться к веб-интерфейсу шлюза
Вся первоначальная настройка и диагностика Doblink Box выполняются через встроенный веб-интерфейс. Чтобы в него попасть, достаточно находиться со шлюзом в одной локальной сети и перейти в браузере по адресу:
Шлюз поддерживает протокол mDNS (Zeroconf), благодаря чему имя хоста определяется автоматически. Оказаться в одной сети со шлюзом для первичного входа можно тремя способами:
- Через порт LAN 1 (lan0): Задайте на сетевом адаптере ПК статический IP из диапазона подсети (например, 192.168.0.2 с маской 255.255.255.0), соединитесь патч-кордом и откройте
http://doblink.local. - Через порт LAN 2 (end0): Подключите кабель от домашнего или офисного роутера с DHCP — шлюз получит адрес автоматически, и панель станет доступна с любого устройства в этой сети.
- Через Wi-Fi со смартфона: Включите точку доступа на телефоне со служебными параметрами (SSID:
Doblink, пароль:12345678). Шлюз подключится к ней самостоятельно, и вы сможете войти в веб-интерфейс прямо с телефона или подключенного ноутбука.
Пароль администратора по умолчанию: admin (настоятельно рекомендуется сменить его после первого входа в разделе системных настроек).
Аварийная точка доступа и «Вечное подключение»
Представьте реальную ситуацию на стройплощадке: шкаф смонтирован, кабели разведены, но заводской интернет еще не заведен, а согласование с IT-отделом предприятия займет недели.
В прошивку шлюза зашит служебный профиль Wi-Fi (SSID: Doblink, пароль: 12345678). Наладчику на месте достаточно активировать мобильную точку доступа на своем телефоне с этими параметрами. Doblink Box подхватывает сеть за считанные секунды, поднимает зашифрованный туннель, и удаленный инженер может сразу приступать к пусконаладке через сотовую связь монтажника.
А если связь на объекте кратковременно пропадает (например, при смене сотовой вышки)? Алгоритм «Вечного подключения» (Eternal Connection) циклически инициирует повторные попытки соединения каждые 10 секунд. Как только сигнал восстанавливается, L2-мост поднимается автоматически — без зависания драйверов и без перезагрузки оборудования.
# Программная часть: Doblink Desktop для Windows
Аппаратный шлюз на объекте — это только одна сторона моста. Чтобы канал замкнулся, на компьютере инженера разворачивается управляющая программа — Doblink Desktop.
Тот же функционал, но без дублирования настроек ОС
По своей архитектуре программа для Windows полностью повторяет серверную логику Doblink Box. Приложение работает автономно и управляется через встроенный веб-интерфейс (по умолчанию доступен по адресу http://localhost:8080 или через ярлык на рабочем столе).
Здесь используются те же базовые сущности:
- Виртуальные хабы (Virtual Hubs): программные коммутаторы для изоляции потоков данных.
- Исходящие каскады (Cascades): клиентские подключения к удаленным шлюзам.
- Локальные мосты (Local Bridge): связывание виртуального хаба с сетевыми адаптерами операционной системы.
# Проблема с Windows, или Зачем нам понадобился «KM-TEST Loopback»
На этапе сборки первого прототипа под Windows мы натолкнулись на неочевидное поведение сетевого стека Microsoft:
Среды разработки (TIA Portal, CODESYS) при этом просто блокируют отключенный адаптер и не дают выбрать его в качестве интерфейса для поиска контроллеров! Если инженер работает с ноутбука по офисному Wi-Fi, Ethernet-порт свободен — и запустить поиск устройств становится невозможно.
Наше решение: мы задействовали виртуальный адаптер Microsoft KM-TEST Loopback Adapter. Это системный драйвер программной заглушки, аппаратно закольцованный сам на себя. Для Windows он всегда находится во включенном состоянии (Link Up) на виртуальной скорости 10 Гбит/с.
Связка работает так:
- Инженер создает адаптер KM-TEST в системе (для удобства мы упаковали установку через утилиту
devcon.exeв простой BAT-скрипт в один клик). - Адаптеру задается статический IP-адрес из диапазона подсети ПЛК (например,
192.168.81.13). - В Doblink Desktop адаптер KM-TEST привязывается локальным мостом (Local Bridge) к целевому виртуальному хабу.
- В среде разработки (TIA Portal) в качестве интерфейса связи выбирается адаптер KM-TEST.
Инженерный софт начинает слать L2-кадры в активный сетевой адаптер, Doblink Desktop перехватывает их, заворачивает в TLS-туннель и пересылает в шлюз на объекте. Для среды разработки это выглядит как абсолютно реальный физический провод, подключенный к ПЛК.
# Где еще это применимо?
Хотя проект изначально создавался под задачи работы с промышленными контроллерами, протокольно-прозрачный L2-мост закрывает массу смежных потребностей:
Непрерывный опрос удаленных котельных, насосных и распределительных подстанций по Modbus TCP, OPC UA или МЭК 60870-5-104 без покупки белых IP у сотовых операторов.
Обнаружение узлов в ROS2 базируется на мультикасте (DDS Multicast Discovery). Классические L3 VPN мультикаст глушат, а L2-мост прозрачно передает команды и RTSP-видео с мобильных платформ (AGV/AMR) и манипуляторов.
Бесшовное объединение распределенных загородных щитов автоматики на Wiren Board, серверов Home Assistant, KNX IP-шлюзов и контроллеров BACnet в единый широковещательный сегмент.
Производитель серийных станков монтирует шлюз в шкаф управления на заводе. Сервисная служба может удаленно диагностировать станок в любой точке мира без согласования проброса портов с IT-службами заказчика.
# Итоги и планы на будущее
Проект Doblink вырос из чисто практической инженерной боли и постепенно перерос в законченный полукоммерческий продукт.
Что работает уже сейчас:
- • Полноценная передача канального уровня (L2) в зашифрованном туннеле: сквозной поиск контроллеров, прошивка с нуля и прозрачный широковещательный обмен.
- • Маскировка трафика под стандартный HTTPS (порт 443 TCP), пробивающая строгие NAT и корпоративные файрволы.
- • Нулевые требования к статическим белым адресам на стороне объекта.
- • Готовый автономный шлюз на DIN-рейку с веб-интерфейсом и удобная десктопная программа под Windows.
Что в планах на доработку:
- • Собственный DDNS и сервер-ретранслятор: реализация независимого relay-сервера на замену Azure Relay, чтобы проект работал полностью автономно без привязки к зарубежной инфраструктуре.
- • Нативное десктопное приложение на Delphi: прямо сейчас пишется отдельный легковесный клиент.
- • Обновление аппаратной части: перевод входного питания на промышленный стандарт 24 В DC с клеммником на DIN-рейку (сейчас используется разъем 5 В Micro-USB).
- • Заводской литой корпус: переход с 3D-печати корпуса на промышленную термопластавтоматную отливку.