Архитектура GhostNet: Техническое описание
GhostNet (GNA) — это распределенная оверлейная сеть (VPN) корпоративного класса, построенная на принципах Zero Trust. Система обеспечивает защищенное соединение между узлами, пробитие NAT (P2P), маршрутизацию трафика через шлюзы и централизованное управление через PKI с полной поддержкой Perfect Forward Secrecy (PFS).
Система состоит из трех независимых, но интегрированных компонентов:
gna_lighthouse(Сигнальный Сервер & Оркестратор)gna_ca_server(Центр Сертификации)gna_agent(Универсальный Агент)
Фаза 1: Инициализация Инфраструктуры
Развертывание корневых компонентов доверия и управления.
-
Инициализация
gna_ca_server(Root of Trust):- Роль: Изолированный "Банк доверия". Хранит корневой ключ и базу данных.
- Действие: Администратор запускает
gna_ca_server --init-ca. - Результат: Генерируется Root CA Certificate и Private Key (Ed25519/ECDSA). Создается SQLite база данных (
ca_database.db) для реестра сертификатов, инвайтов и CRL (списков отзыва). - Безопасность: Сервер не имеет доступа к интернету, слушает только локальный интерфейс
127.0.0.1:9100.
-
Запуск
gna_lighthouse(Orchestrator):- Роль: Координатор сети, DNS-авторитет и API-шлюз.
- Конфигурация: Указывается
GHOST_PSK(Pre-Shared Key) для защиты сигнального трафика и адрес CA-сервера. - Результат: Lighthouse поднимает:
- UDP :50000 — Туннель для VPN-сигналов и реле трафика.
- UDP :53 — Глобальный DNS-резолвер для зоны
.ghost. - TCP :9000 — HTTPS панель управления (Dashboard).
- TCP :9001 — Внутренний API для SPA-туннелей.
Фаза 2: Smart Onboarding (Присоединение Агента)
Процесс безопасного ввода нового устройства в сеть с привязкой к железу (Anti-Theft).
-
Генерация Инвайта:
- Администратор через веб-панель создает инвайт (Token) с заданными правами (User/Admin/Server) и сроком жизни.
gna_ca_serverрезервирует виртуальный IP (VIP) и сохраняет хэш токена.
-
Запрос на присоединение:
- Пользователь вводит токен в
gna_agent. - Агент собирает Hardware Fingerprint (уникальный слепок железа: CPU, MAC, RAM) и генерирует временный ключ.
- Отправляется зашифрованный
JoinRequestна Lighthouse.
- Пользователь вводит токен в
-
Выпуск Сертификата:
- Lighthouse проксирует запрос в CA.
gna_ca_serverпроверяет токен. Если валиден — генерирует постоянную пару ключей (Ed25519) и подписывает сертификат, жестко привязывая его кHardware Fingerprintи VIP.- Приватный ключ и сертификат (PEM) отправляются агенту.
-
Конфигурация Агента:
- Агент сохраняет ключи в
node.key/cert.pemи обновляет свой конфиг (VIP, настройки сети). - Теперь агент готов к работе и может доказать свою подлинность.
- Агент сохраняет ключи в
Фаза 3: Построение Сети и Handshake
Как агенты находят друг друга и строят защищенные каналы.
-
Запуск и TUN-интерфейс:
- Агент создает виртуальный интерфейс (например,
ghost0), назначает IP и поднимает маршруты. - Windows: Автоматически отключает "засыпание" консоли (QuickEdit) и настраивает профиль сети.
- Linux: Настраивает
resolvectlдля DNS.
- Агент создает виртуальный интерфейс (например,
-
Локальный DNS-сервис:
- Агент запускает встроенный DNS-сервер на
127.0.0.1:53(или на VIP). - Все DNS-запросы ОС перехватываются агентом. Домены
.ghostразрешаются локально, остальные — форвардятся (например, на 8.8.8.8).
- Агент запускает встроенный DNS-сервер на
-
Authenticated Handshake:
- Агент отправляет
Handshakeпакет на Lighthouse, подписанный приватным ключом. - Lighthouse проверяет подпись и Hardware Binding через CA (не украден ли ключ?).
- Если всё ОК, узел помечается как Online.
- Агент отправляет
-
Распространение Карты Сети (Map Update):
- Lighthouse рассылает всем активным агентам обновленный
PeerList(Frame0x04). - Агент обновляет свою таблицу маршрутизации и DNS-кэш (связка
hostname->VIP). Файл/etc/hostsбольше не используется.
- Lighthouse рассылает всем активным агентам обновленный
Фаза 4: Передача Данных (Data Plane & PFS)
GhostNet использует гибридную схему шифрования: ChaCha20-Poly1305 для скорости и X25519 для обмена ключами.
Режим 1: Perfect Forward Secrecy (PFS) — Основной
Трафик между узлами шифруется уникальными сессионными ключами, которые меняются каждые 10 минут.
- PfsRequest (0x06): Агент А хочет отправить данные Агенту Б. Он генерирует эфемерную пару ключей (X25519), подписывает публичную часть своим постоянным ключом и отправляет Б.
- PfsAccept (0x07): Агент Б проверяет подпись, генерирует свою эфемерную пару, вычисляет общий секрет (Shared Secret) и отправляет свой публичный ключ Агенту А.
- Сессия установлена: Оба агента вычисляют идентичный ключ шифрования.
- PfsData (0x08): Данные шифруются этим ключом. Даже если PSK сети или приватный ключ узла будет скомпрометирован в будущем, расшифровать перехваченный ранее трафик невозможно, так как эфемерные ключи удалены из памяти.
Режим 2: Relay (Ретрансляция)
Если прямой P2P канал (UDP Hole Punching) невозможен:
- Агенты заворачивают зашифрованные пакеты (PfsData) в конверт для Lighthouse.
- Lighthouse работает как "слепой" маршрутизатор: он видит заголовки, но не может расшифровать содержимое (PFS ключи есть только у участников).
Режим 3: Exit Node (Шлюз)
- Клиент: Весь трафик (
0.0.0.0/0) направляется в туннель к выбранному узлу-шлюзу. - Шлюз: Расшифровывает пакеты, применяет NAT (Masquerade) и выпускает их в интернет со своего IP.
Фаза 5: Управление и Безопасность
Secure Admin SPA (Single Page Application)
Администратор не имеет прямого доступа к порту 9000 сервера из интернета.
- Админ запускает локального агента в режиме
--admin. - Агент строит TCP-over-UDP туннель к Lighthouse (Frame
0x10,0x12). - Lighthouse проверяет сертификат админа (группа
Admins) и открывает доступ к API. - Браузер админа открывает локальный порт (например,
127.0.0.1:9999), который пробрасывается прямо в панель управления.
Active Enforcement (Мгновенная реакция)
- Revocation: При отзыве сертификата или бане узла в панели, Lighthouse мгновенно рассылает всем агентам команду
PeerRevoke(Frame0x05). - Результат: Все агенты немедленно удаляют нарушителя из таблиц маршрутизации и сбрасывают ключи шифрования. Доступ блокируется за миллисекунды.
Remote CLI
Администратор может отправлять консольные команды (ping, ipconfig, systemctl) на удаленные узлы прямо из веб-интерфейса. Ответы приходят асинхронно через защищенный канал управления.