Порты и сеть
Какие порты открывать, кто к кому подключается, работа за NAT и за обратным прокси.
Полная таблица соединений#
Направление важнее номера: система почти всегда инициирует соединения «изнутри наружу», и только браузеры и Let's Encrypt приходят снаружи.
| Откуда | Куда | Порт | Обязательно | Назначение |
|---|---|---|---|---|
| Браузер оператора | Plane | 443/TCP | да | Админка, API, страница плеера |
| Браузер оператора | Node | 443/TCP; 9443, если нода на одном хосте с Plane | да | Видео: HLS, MSE-WS, архив, превью |
| Plane | Node | тот же порт, что и у браузера | да | Управление нодой, телеметрия, конфигурация |
| Node | Plane | 443/TCP | да | Ключи проверки прав, отзывы, служебные потоки |
| Node | Камера | 554/TCP | да | Приём видео по RTSP |
| Plane | Камера | 80 / 8000 / 554 | для ONVIF | Поиск камер, чтение профилей, PTZ, события |
| Plane | PostgreSQL | 5432/TCP | да | База данных (обычно localhost) |
| Интернет | Plane | 80/TCP | для ACME | Проверка Let's Encrypt при выпуске и продлении |
| Интернет | Node | 80/TCP | для ACME | То же, если нода получает свой сертификат |
| Туннельный агент | Релей | 443/TCP | для камер за NAT | Исходящее соединение из закрытой сети |
Сертификат Let's Encrypt продлевается автоматически примерно каждые 60 дней, и при каждом продлении проверка снова приходит на порт 80. Если закрыть его после установки, сертификат однажды истечёт.
Правила межсетевого экрана#
Сервер контрол-плейна:
# ufw sudo ufw allow 80/tcp comment 'ACME challenge' sudo ufw allow 443/tcp comment 'CCTV plane' # firewalld sudo firewall-cmd --permanent --add-service=http --add-service=https sudo firewall-cmd --reload
Сервер отдельной ноды (порты 443 и 80 — так её ставит установщик):
sudo ufw allow 80/tcp comment 'ACME challenge' sudo ufw allow 443/tcp comment 'CCTV node media'
Нода на одном хосте с Plane занимает 9443 и 9080 — 80 и 443 уже у Plane:
sudo ufw allow 9443/tcp comment 'CCTV node media'
Если нода отдаёт видео только во внутренней сети, ограничьте источник:
sudo ufw allow from 10.0.0.0/8 to any port 9443 proto tcp comment 'CCTV node media (LAN)'
Нода должна быть доступна браузеру#
Это главное следствие архитектуры: видео идёт с ноды напрямую в браузер, минуя контрол-плейн.
Поэтому адрес ноды (public_url) обязан быть доступен с рабочих мест операторов.
Возможные схемы:
| Схема | Когда подходит | Что указать в public_url ноды |
|---|---|---|
| Нода на отдельном сервере | Операторы работают снаружи | https://node.example.com |
| Нода на одном хосте с Plane | Одиночная установка | https://cctv.example.com:9443 |
| Нода за обратным прокси | Уже есть балансировщик с TLS | Внешний адрес прокси; управление — по внутреннему http://-адресу |
Если админка открыта по https://, а нода отдаёт видео по http://, браузер заблокирует видео и не
покажет внятной ошибки — просто не будет картинки. У ноды HTTPS работает с первого запуска, поэтому
так получается только если её завели по http://: либо верните ей адреса https://, либо поставьте
её за прокси с TLS. См. TLS и сертификаты.
Управление нодой: схема решает всё#
Адрес управления (control_url, а если он пуст — public_url) — это то, по чему Plane звонит на
ноду. Его схема — единственное решение, из которого Plane выводит слушатели ноды и её стартовый
сертификат:
| Адрес управления | Слушатели ноды | Когда так |
|---|---|---|
https://node.example.com |
80 и 443 | нода на отдельном сервере |
https://cctv.example.com:9443 |
9080 и 9443 | нода на одном хосте с Plane |
http://node.example.com:8090 |
8090, без TLS | впереди прокси, который сам терминирует TLS |
Указывайте https:// сразу: нода получает самоподписанный сертификат на своё настоящее имя вместе
со стартовой конфигурацией, и Plane принимает его осознанно.
http://Нода со своим сертификатом перенаправляет любой обычный HTTP-запрос на HTTPS. При таком
перенаправлении теряется заголовок авторизации — Plane получает 401, управление перестаёт
работать, а нода при этом выглядит живой и продолжает отдавать видео.
Дополнительно: по https:// конфигурация с логинами и паролями камер передаётся шифрованной.
Работа за обратным прокси#
Контрол-плейн можно поставить за nginx/HAProxy, который сам терминирует TLS. Тогда в plane.toml
режим TLS — external, а listen — внутренний адрес.
Существенно: система доверяет первому значению заголовка X-Forwarded-For без дополнительной
проверки. Это значит, что прокси перед контрол-плейном должен быть вашим и обязан
перезаписывать этот заголовок, а не пропускать пришедший от клиента. Иначе клиент сможет подделать
свой IP-адрес в журнале аудита.
Камеры в отдельной сети#
Обычная и правильная схема: камеры живут в изолированном сегменте, куда имеет доступ только нода.
- Ноде нужен доступ к камерам по 554/TCP.
- Контрол-плейну доступ к камерам нужен только если вы пользуетесь ONVIF (поиск камер, чтение профилей, PTZ, события камер). Если ONVIF не используется, Plane может вообще не видеть сеть камер.
- Если прямого доступа нет и белого IP у камер тоже — используйте туннельные агенты.