Система динамического проброса портов для подключения сетевых устройств и IoT-хостов без белого IP.
| Область | Описание |
|---|---|
| Устройства (IoT) | Регистрация по device_id + токен, control-порт 8443 (TLS), туннели на динамических портах |
| Серверы | Проброс input_port → output_port (5000+, per-user), статистика в PostgreSQL |
| Веб-интерфейс | React: устройства, серверы, статистика, настройки, скачивание клиентов |
| Realtime | WebSocket: статус устройств, обновление статистики (PostgreSQL NOTIFY) |
| Клиенты | Linux amd64 (в образе), armhf/aarch64, Windows .exe — artifacts/clients/ |
| Наблюдаемость | /health, /metrics (Prometheus), Grafana dashboard, алерты в deploy/prometheus/alerts/ |
┌─────────────┐ :80 ┌────────┐ :8080 ┌──────────────────┐
│ Browser │ ────────────►│ nginx │ ──────────►│ Node (Feathers) │
└─────────────┘ └────────┘ │ REST + WS │
│ └────────┬─────────┘
│ │
│ module_net_port_client │ PostgreSQL
▼ ▼
┌─────────────┐ :8443 ┌──────────────────────────────────────┐
│ IoT device │ ──────────────►│ C-server: device manager + proxy │
└─────────────┘ │ legacy port pairs (5000+, per user) │
└──────────────────────────────────────┘
| Компонент | Порт (по умолчанию) | Назначение |
|---|---|---|
| nginx | 80 | UI, /api/v1, WebSocket, /files |
| Node backend | 8080 | API, /health, /metrics |
| Device control (C) | 8443 | JSON-регистрация устройств |
| Туннели устройств | 6000–6999 | Внешние порты (чётные) |
| Серверы | 5000–5999 | Пары портов пользователя |
| PostgreSQL | 5432 | Устройства, порты, статистика |
- Docker, Docker Compose v2
- Доступная PostgreSQL (в образе или внешняя —
EXTERNAL_DB=trueвDockerfile)
./scripts/build-docker.sh
# или
docker compose build net_port
docker compose up -d net_portПорты в docker-compose.yml (пример):
| Хост | Контейнер | Сервис |
|---|---|---|
| 13080 | 80 | Веб-интерфейс |
| 13880 | 8080 | API напрямую |
| 8443 | 8443 | Регистрация устройств |
| 49000–49099 | 6000–6099 | Туннели (пример проброса) |
Откройте: http://localhost:13080
docker compose --profile monitoring up -d- Prometheus:
http://localhost:9090 - Grafana:
http://localhost:3000(логинadmin/admin, пароль —GRAFANA_ADMIN_PASSWORD) - Health:
curl -s http://localhost:13080/health | jq - Metrics:
curl -s http://localhost:13080/metrics
Подробнее: deploy/README.md, docs/admin-guide.md.
- Войти в веб-интерфейс → Устройства → создать устройство.
- Сохранить
device_idи токен (показывается один раз). - Скачать клиент: Настройки → вкладка с клиентом (список архитектур — только те бинарники, что есть на сервере).
- На хосте устройства:
chmod +x module_net_port_client-0.0.4
./module_net_port_client-0.0.4 \
--device-id DEVICE_ID \
--device-token TOKEN \
--registration-server SERVER_IP \
--registration-port 8443 \
--port-host-base 49000--port-host-base — если клиент за NAT/Docker и внешний порт хоста отличается от внутреннего (например проброс 49000:6000).
Проверка версии на сервере (нужны curl, для установки — sha256sum):
# Только проверить
./module_net_port_client-0.0.4 --check-update \
--update-server http://SERVER:13080 --update-arch armhf
# Скачать новую версию и перезапуститься (symlink module_net_port_client)
./module_net_port_client --auto-update \
--update-server http://SERVER:13080 \
--registration-server SERVER --device-id ... --device-token ...API: GET /api/v1/clients/latest/check?current=0.0.4&platform=linux&arch=armhf, GET /api/v1/clients/latest.
Linux amd64 собирается при docker build. Для ARM:
./scripts/build-client-cross.sh armhf
./scripts/build-client-cross.sh aarch64
./scripts/build-client-windows.sh
docker build -t net_port:latest .Windows: клиент в режиме только Серверы (--host_in, -p_in, --host_out, -p_out). Регистрация устройств (порт 8443) — только Linux-клиент.
Инструкция: artifacts/clients/README.md.
net_port/
├── client/ # C-клиент (Linux)
├── client_win/ # C-клиент (Windows)
├── server/ # C-сервер + device manager
├── web/
│ ├── backend_net_port/ # Feathers API
│ └── frontend_net_port/ # React UI
├── sql/migrations/ # Версионированные миграции (schema_migrations)
├── artifacts/clients/ # armhf/aarch64 бинарники для образа
├── deploy/prometheus/ # Prometheus + алерты
├── deploy/grafana/ # Grafana provisioning + dashboard
├── scripts/ # build-docker, bump-version, integration tests
├── docs/ # admin-guide, openapi.yaml
├── Dockerfile
├── docker-compose.yml
└── start.sh # Entrypoint контейнера
По-прежнему поддерживается запуск C-сервера с фиксированными портами и PostgreSQL (без device manager):
./module_net_port_server-0.0.4 --user 1 --input-port 5000 --output-port 5001Клиент:
./module_net_port_client-0.0.4 --host_in SERVER --p_in 5000 --host_out 127.0.0.1 -p_out 22SSL: сервер и клиент используют TLS; клиент проверяет сертификат сервера.
Клиент Сервер
|-------- SSL Connect -------->|
| Проверяет сертификат сервера |
|<----- SSL Established -------|
|====== Secure Channel ========|
install.shИнтеграционные тесты (туннель, fixed port, security):
./scripts/integration/run_all_integration_tests.shОписание: scripts/integration/README.md.
| Документ | Содержание |
|---|---|
docs/admin-guide.md |
Эксплуатация, метрики, алерты, операции |
docs/openapi.yaml |
OpenAPI (также /docs/openapi.yaml на backend) |
plans/ |
Технические спецификации и планы |
| Переменная | Описание |
|---|---|
DB_HOST, DB_PORT, DB_USER, DB_PASSWORD |
PostgreSQL |
DEVICE_CONTROL_HOST, DEVICE_CONTROL_PORT |
Адрес C device manager (в контейнере 127.0.0.1:8443) |
METRICS_CACHE_MS |
Кэш метрик Prometheus (мс) |
THREADS |
Потоки C-сервера |
GPLv3