Камеры за NAT: туннели
Агент и релей: подключение камер из закрытых сетей без белого IP.
Туннель нужен, когда камера физически недоступна медиаузлу: она стоит в чужой локальной сети, за NAT, без белого IP и без VPN. Вместо того чтобы пробрасывать порты на объекте, в его сети запускается агент, который сам, исходящим соединением, приходит на релей — публичный сервер вашей инсталляции. Plane выдаёт каждой камере стабильные публичные адреса ONVIF и RTSP на релее, и медиаузел работает с ней как с обычной камерой.
Раздел консоли: /admin/infrastructure/tunnels, заголовок «Безопасные туннели камер»,
подзаголовок «Relay-серверы, исходящие LAN-агенты, обнаруженные камеры, стабильные маршруты и ACL
точных адресов.»
Как это устроено#
объект (закрытая сеть) ваша инфраструктура ┌───────────────────────────┐ ┌──────────────────────────┐ │ камеры (RTSP + ONVIF) │ │ Plane cctv.example.com │ │ ▲ │ │ ▲ │ │ │ LAN │ │ │ управление │ │ ┌─────┴─────┐ │ │ ┌─┴──────────┐ │ │ │ агент │────────────┼───────────▶│ │ релей │◀───── нода │ └───────────┘ исходящее │ TLS │ └────────────┘ RTSP/ONVIF └───────────────────────────┘ └──────────────────────────┘
Ключевые свойства модели:
- Агент не принимает входящих подключений. На объекте не нужны ни белый IP, ни проброс портов, ни правила во входящем направлении — достаточно исходящего доступа к одному TLS-порту релея.
- Публичные адреса стабильны. Каждой паре «камера + сервис» Plane выделяет постоянную аренду эндпоинта, поэтому конфигурация ноды не «плывёт» при переподключениях агента.
- Порт открывается только явным действием. Обнаружение камеры само по себе публичный порт не открывает.
- Ноды туннельных двоичных файлов не запускают. Нода продолжает забирать обычный RTSP URL — она вообще не знает, что за ним туннель.
Роли в консоли: раздел «Relay-серверы» виден только суперадминистратору, раздел «Агенты» — суперадминистратору и админу организации.
Порядок развёртывания#
Порядок обязателен: агента нельзя создать, пока нет включённого релея.
Шаг 1. Создать relay-сервер (суперадмин)#
/admin/infrastructure/tunnels → раздел «Relay-серверы» → «Новый relay-сервер».
| Поле | Что указывать |
|---|---|
| «Публичный IP или hostname» | адрес, по которому агенты видят релей из интернета |
| «Единый TLS-порт агентов» | один порт, куда приходят все агенты |
| «Базовые CIDR потребителей (по одному в строке)» | адреса Plane и медиаузлов, которым разрешено ходить в туннельные порты |
| «Диапазон публичных портов камер» | из какого диапазона выдавать стабильные эндпоинты ONVIF и RTSP |
| «Допуск офлайн, секунд» | сколько релей работает по последнему снимку конфигурации, если Plane недоступен |
| «Управляющее соединение» | «Plane → relay» (если Plane стоит в DMZ и сам ходит к релею) или «Relay → Plane» |
Сразу после создания откройте вкладку «Конфигурация запуска» и сохраните файл.
Шаг 2. Установить релей#
# на публичном сервере релея sudo installers/hastreamer-cctv-relay/install.sh # положить конфигурацию, полученную в консоли sudo install -o root -g hastreamer-cctv-relay -m 0640 relay.toml \ /etc/hastreamer-cctv-relay/relay.toml sudo systemctl start hastreamer-cctv-relay systemctl is-active hastreamer-cctv-relay # active
Шаг 3. Создать агента#
Раздел «Агенты» → «Новый агент».
| Поле | Что указывать |
|---|---|
| «Назначенный relay» | к какому релею привязан агент — привязка постоянна |
| «Разрешённые CIDR локальной сети» | подсети объекта, куда агенту разрешено ходить |
| «Зарезервированные/запрещённые IP целей» | адреса, к которым обращаться нельзя (шлюзы, серверы, АРМ) |
| «Макс. ожидающих подключений», «Сессий на маршрут» | ограничители нагрузки |
| «Разрешить специальные цели» | только суперадмин, по необходимости |
Откройте вкладку «Конфигурация запуска» и скопируйте файл кнопкой «Копировать конфигурацию».
Секрет релея и секрет агента выдаются только при создании или явной ротации. Plane хранит лишь их отпечаток и повторно значение не показывает. Не сохранили — остаётся «Ротировать секрет», а это немедленно обрывает работу текущей конфигурации: старый ключ перестаёт действовать в момент ротации, и процесс нужно перезапустить с новым файлом.
Файл конфигурации содержит секреты: «Файл содержит секреты: храните его с правами только владельца и
перезапускайте процесс после замены.» Права — 0640, владелец — служебная учётная запись; двоичные
файлы отказываются запускаться с конфигурацией, доступной группе или всем.
Шаг 4. Установить агента в сети объекта#
# на машине внутри локальной сети объекта sudo installers/hastreamer-cctv-agent/install.sh sudo install -o root -g hastreamer-cctv-agent -m 0640 agent.toml \ /etc/hastreamer-cctv-agent/agent.toml sudo systemctl start hastreamer-cctv-agent journalctl -u hastreamer-cctv-agent -n 20 --no-pager
Агенту достаточно исходящего доступа к TLS-порту релея и сетевого доступа к камерам объекта. Входящие правила на объекте не нужны.
В консоли, в карточке агента на вкладке «Обзор», статус должен смениться на «Агент в эфире», а поле «Последняя связь» — обновляться. Статус «Relay не в сети» означает проблему на стороне релея, а не агента.
Шаг 5. Найти камеры и подготовить маршруты#
- Откройте карточку агента → вкладка «Обнаруженные камеры». Здесь инвентарь ONVIF-устройств, который передал агент; свежие помечены как «Найдена в последнем сканировании». Если список пуст: «Агент пока не передал ONVIF-устройства.»
- Для нужного устройства нажмите «Подготовить маршруты камеры» — Plane выделит стабильные эндпоинты ONVIF и RTSP.
- Нажмите «Добавить в «Камеры»» — откроется форма камеры, уже с типом источника «Камера через агент» и выбранным устройством.
- Введите «Имя пользователя» и «Пароль» камеры и нажмите «Проверить и получить профили». До успешной проверки перейти к следующему шагу формы нельзя: «Перед продолжением проверьте учётные данные и получите рабочий основной RTSP-профиль.» Успех: «Камера проверена: получено рабочих профилей — {count}.»
- Пройдите шаги «Профили потоков» и «Запись и размещение» как у обычной камеры и сохраните её — Добавление камер.
Вкладки карточки агента#
| Вкладка | Что показывает |
|---|---|
| «Обзор» | статус агента и релея, «Последняя связь», «Активные сессии», «Активные эндпоинты», «Добавлено / обнаружено камер», «Политика агента» |
| «Обнаруженные камеры» | инвентарь ONVIF-устройств объекта и действия по ним |
| «Эндпоинты» | «Стабильные аренды эндпоинтов»: «Сервис», «Цель в LAN», «Публичный эндпоинт» и состояние («Доступен», «Выделен · недоступен», «Карантин», «Освобождён») |
| «Доступ» | «Дополнительный доступ точных адресов»: «Исходный IP/CIDR» и «Область маршрутов» — все маршруты агента или один эндпоинт |
| «Конфигурация запуска» | готовый файл конфигурации агента |
Что меняется на стороне камеры#
Камера, добавленная через агент, отличается от обычной в нескольких важных местах:
- «Хост / IP» и «Порт ONVIF» заполняются автоматически и доступны только для чтения — это адреса выделенной аренды, а не адрес камеры в её локальной сети.
- Проверка обязательна при создании. Без успешной проверки учётных данных и получения рабочего основного профиля камеру сохранить нельзя.
- Тип источника после создания не меняется — как и у любой другой камеры.
- Удаление камеры дополнительно снимает туннельную обвязку: «Камера также будет удалена из сохранённого инвентаря агента, её tunnel-маршруты будут отозваны, а публичные порты помещены в карантин перед повторным использованием.»
У такой камеры есть связанное устройство агента, аренды портов и квоты — их снимает только индивидуальное удаление. Если в выделение попадёт хотя бы одна туннельная камера, вся пачка будет отклонена целиком: не удалится ни одна из выбранных камер. Удаляйте туннельные камеры по одной через «Изменить» → «Удаление камеры».
Ещё два ограничения, которые защищают работающие камеры:
- Действие «Освободить» на вкладке «Эндпоинты» запрещено для эндпоинта, который использует камера — сначала удалите камеру.
- «Удалить агент» блокируется, пока к нему привязаны камеры, а «Удалить relay-сервер» — пока к нему привязаны агенты.
Сеть и firewall#
| Направление | Что открыть |
|---|---|
| объект → релей | исходящее на «Единый TLS-порт агентов»; входящих правил на объекте не требуется |
| Plane и ноды → релей | «Диапазон публичных портов камер» — только для адресов из «Базовых CIDR потребителей» |
| релей → Plane или Plane → релей | в зависимости от выбранного «Управляющего соединения» |
Список разрешённых адресов задаётся дважды: правилами хоста или облака и ACL самого релея. Второй уровень обязателен, но он не заменяет firewall. RTSP на участке «нода — релей» переносит учётные данные камеры, поэтому этот участок допустим только в доверенной сети (частная сеть, VPN, канал провайдера) — публиковать его в общий интернет нельзя.
Plane проверяет наблюдаемый адрес источника у релея, поэтому в поле «Исходящий IP relay, видимый Plane» указывайте фактический публичный адрес после NAT, а не значение из заголовков.
Эксплуатация#
- Ротация секрета. «Ротировать секрет» в консоли → заменить файл конфигурации на сервере
(атомарно, права
0640) → перезапустить процесс. Старая управляющая личность перестаёт работать сразу. - Кратковременная недоступность Plane. Релей продолжает работать по последнему корректному снимку в пределах «Допуска офлайн»; просроченный, повреждённый или чужой снимок отключает публичные слушатели — это защита, а не сбой.
- Карантин портов. Освобождённые публичные порты какое-то время не переиспользуются. Обходить карантин вручную нельзя.
- Что смотреть при разборе: наблюдаемая ревизия конфигурации, аптайм, число подключённых агентов, активные и ожидающие сессии, счётчики трафика — вкладка «Обзор» карточки агента и карточка релея.
Диагностика#
| Симптом | Вероятная причина | Что делать |
|---|---|---|
| Кнопка «Новый агент» недоступна | нет включённого relay-сервера | «Попросите суперадминистратора настроить и включить relay-сервер.» |
| Статус агента «Агент не в сети» | нет исходящего доступа к TLS-порту релея | проверьте firewall объекта и journalctl -u hastreamer-cctv-agent -f |
| Статус «Relay не в сети» | не запущен или недоступен релей | systemctl status hastreamer-cctv-relay на сервере релея |
| «Агент пока не передал ONVIF-устройства.» | камеры вне «Разрешённых CIDR локальной сети» или ONVIF выключен на камере | расширьте список CIDR, проверьте ONVIF на камере |
| Проверка камеры не проходит | неверные учётные данные ONVIF или маршруты ещё не готовы | повторите «Проверить и получить профили»; при сбое подготовки — «Повторить подготовку маршрутов» |
| Нода не забирает поток | «Базовые CIDR потребителей» не включают адрес ноды | добавьте адрес ноды в ACL релея и в firewall |
| Не удаляется агент | к нему привязаны камеры | удалите туннельные камеры по одной, затем агента |
Смежные разделы: Добавление камер, Ноды и флот, Порты и сеть, Диагностика неисправностей.