gna (Agent): Универсальный узел сети
gna_agent — это конечная точка сети GhostNet, выполняющая роль интеллектуального сетевого шлюза. Агент отвечает за создание защищенного L3-туннеля, динамическую маршрутизацию, разрешение имен (DNS) и обеспечение безопасности на уровне конечного устройства (Endpoint Security).
Агент спроектирован как кроссплатформенное приложение (Rust), использующее возможности ядра ОС для работы с виртуальными интерфейсами (TUN).
1. Внутренняя архитектура и модули
Агент работает асинхронно на базе рантайма Tokio, разделяя свои задачи на независимые "потоки" (Tasks):
1.1. Система задач (Tokio Tasks)
- Heartbeat Task: "Пульс" системы. Раз в 10–60 секунд отправляет подписанный отчет (
AgentReport) на Lighthouse. Поддерживает UDP-сессии открытыми через NAT. - Inbound Task: Прослушивает UDP-сокет. Расшифровывает входящие пакеты, проверяет их на Replay-атаки и записывает "чистый" IP-трафик в TUN-интерфейс.
- Outbound Task: Читает пакеты из TUN-интерфейса. Определяет получателя, инициирует PFS Handshake (если нужно) и отправляет зашифрованные данные пиру или через Relay.
1.2. Криптографический слой
- Identity (Ed25519): Используется только для аутентификации. Ваш уникальный
NodeID— это публичный ключ. - PFS Engine (X25519 + ChaCha20): Ядро безопасности. Агент не хранит долгоживущих ключей шифрования трафика. Все сессионные ключи генерируются "на лету" и уничтожаются каждые 10 минут.
- Anti-Replay: Каждый пакет имеет 32-битный порядковый номер и временную метку. Агент игнорирует пакеты, которые "опоздали" или пришли повторно.
2. Жизненный цикл подключения
2.1. Smart Onboarding (Первый запуск)
Агент реализует протокол автоматической конфигурации:
- Запрос:
gna --join <TOKEN>генерирует временный ключ и отправляет его вместе с Hardware Fingerprint (хеш от CPU, MAC-адресов и объема RAM). - Получение: В ответ сервер присылает подписанный сертификат (
cert.pem) и приватный ключ (node.key). - Привязка: С этого момента сертификат валиден только на этом "железе". Копирование файлов на другой ПК не позволит войти в сеть.
2.2. Установка туннеля
Агент создает виртуальный интерфейс ghost0:
- Windows: Использует драйвер
Wintun.dll. Программно отключает режим "QuickEdit" в консоли, чтобы предотвратить "зависание" трафика при выделении текста мышью. - Linux: Использует системный драйвер
/dev/net/tun.
2.3. Локальный DNS-резолвер (Встроенная служба)
Агент больше не правит файл /etc/hosts. Вместо этого:
- Агент поднимает UDP-сервер на порту 53 (привязан к виртуальному IP).
- ОС настраивается на использование этого IP как DNS-сервера.
- Запросы к зоне
.ghostразрешаются мгновенно из локальной памяти (DnsCache). - Остальные запросы прозрачно проксируются на публичные DNS (8.8.8.8) с использованием таймаутов и защиты от зависаний.
3. Режимы работы (Roles)
3.1. Стандартный клиент (P2P Mesh)
Агент пытается установить прямые соединения со всеми участниками сети. Благодаря PeerList (Frame 0x04), агент знает внешние IP-адреса других узлов и использует технику UDP Hole Punching для пробития NAT.
3.2. Exit Node (Шлюз)
- Сервер (Exit Node Server): Настраивает ОС на выполнение NAT (Masquerade). Выступает в роли "анонимайзера" или корпоративного шлюза для выхода в интернет.
- Клиент: Весь трафик устройства (
0.0.0.0/0) упаковывается в VPN и отправляется на выбранный сервер выхода.
3.3. Admin SPA Mode
Агент выступает в роли защищенного прокси для доступа к Lighthouse Dashboard.
- Создает TCP-туннель внутри UDP-соединения.
- Обеспечивает авторизацию администратора на основе крипто-подписи сертификата.
4. Публикация сетевых ресурсов (Services)
Агент позволяет объявлять локальные сервисы (веб-сайты, базы данных, SSH), делая их доступными внутри оверлейной сети под доменными именами .ghost.
- Service Manifest: Список сервисов хранится в
services.json. Каждый сервис включает имя, порт и протокол. - Анонсирование: При каждом "пульсе" (Heartbeat) агент передает список своих сервисов на Lighthouse.
- Доступность: Другие узлы видят эти сервисы в веб-панели и могут обращаться к ним по адресу
http://hostname.ghost:port.
5. Специфика и оптимизация под ОС
5.1. Windows: Enterprise-настройка
Для обеспечения бесперебойной работы на Windows агент выполняет ряд автоматических операций через PowerShell:
- Private Network Profile: Принудительно устанавливает тип сети "Частная", чтобы Windows Firewall не блокировал входящие P2P-соединения.
- Interface Metric (50): Устанавливает метрику интерфейса выше физических адаптеров. Это гарантирует, что обычный интернет-трафик не пойдет в VPN по ошибке, но трафик подсети
10.0.0.0/24всегда пойдет через туннель. - QuickEdit Disable: Программное отключение режима выделения в консоли предотвращает случайную приостановку сетевого потока пользователем.
5.2. Linux: Интеграция с системными демонами
Агент интеллектуально взаимодействует с сетевым стеком Linux:
- Systemd-resolved: Автоматическая конфигурация через
resolvectl. Агент регистрирует домен~ghostи назначает свой локальный DNS приоритетным для этого интерфейса. - IP Forwarding: В режиме шлюза (Exit Node) агент автоматически правит параметры
sysctlи настраивает правилаiptables(MASQUERADE) для пересылки пакетов.
6. Защищенный удаленный доступ (Remote CLI)
Агент включает встроенный исполнитель команд, позволяющий администратору управлять узлом через веб-интерфейс Lighthouse.
- Безопасность:
- Команды принимаются только в зашифрованном виде.
- UUID Replay Protection: Агент кэширует ID последних 1000 команд. Повторная отправка того же пакета (атака воспроизведения) будет проигнорирована.
- Контекст выполнения: Агент поддерживает виртуальную рабочую директорию (CWD). Команда
cd /var/logизменит путь для всех последующих команд в рамках текущей сессии управления.
7. Управление в режиме системной службы
Для профессионального использования агент должен работать как демон. В интерактивное меню встроены инструменты автоматизации:
- Windows: Установка через
sc.exeс флагом--service. Служба работает в сессии "LocalSystem", обеспечивая максимальную производительность сетевого стека. - Linux: Генерация и активация Unit-файла
ghostnet.service. Используется таргетnetwork-online.target, что гарантирует запуск VPN только после того, как физический интернет стал доступен.
8. Экспериментальные функции и автономность
8.1. Локальное P2P-обнаружение (Local Peer Discovery)
Экспериментальный модуль, позволяющий двум агентам в одной локальной сети найти друг друга через UDP-broadcast, минуя Lighthouse. Это позволяет сети GhostNet продолжать работу внутри офиса или здания даже при полной потере связи с внешним интернетом.
8.2. Persistent PFS Sessions
Система кэширования сессионных ключей на диск (в зашифрованном виде). При кратковременном перезапуске агента он может мгновенно восстановить PFS-сессии с пирами без проведения нового цикла Handshake, что сокращает время "подъема" сети до миллисекунд.
8.3. Автономный DNS-кэш
В случае недоступности Lighthouse агент переходит в режим "заморозки" DNS. Он продолжает разрешать имена узлов, которые были известны ему на момент последнего PeerList, обеспечивая частичную работоспособность сети в условиях нестабильной связи с координатором.
9. Безопасность Endpoint (Hardware Binding)
Агент вычисляет аппаратный хеш на основе:
- Серийного номера CPU.
- MAC-адресов постоянных сетевых карт.
- Объема установленной оперативной памяти.
Этот хеш проверяется при каждом соединении. Это гарантирует, что даже если злоумышленник получит полный доступ к файловой системе (украдет node.key и cert.pem), он не сможет подключиться к сети с другого устройства.