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 (Первый запуск)

Агент реализует протокол автоматической конфигурации:

  1. Запрос: gna --join <TOKEN> генерирует временный ключ и отправляет его вместе с Hardware Fingerprint (хеш от CPU, MAC-адресов и объема RAM).
  2. Получение: В ответ сервер присылает подписанный сертификат (cert.pem) и приватный ключ (node.key).
  3. Привязка: С этого момента сертификат валиден только на этом "железе". Копирование файлов на другой ПК не позволит войти в сеть.

2.2. Установка туннеля

Агент создает виртуальный интерфейс ghost0:

  • Windows: Использует драйвер Wintun.dll. Программно отключает режим "QuickEdit" в консоли, чтобы предотвратить "зависание" трафика при выделении текста мышью.
  • Linux: Использует системный драйвер /dev/net/tun.

2.3. Локальный DNS-резолвер (Встроенная служба)

Агент больше не правит файл /etc/hosts. Вместо этого:

  1. Агент поднимает UDP-сервер на порту 53 (привязан к виртуальному IP).
  2. ОС настраивается на использование этого IP как DNS-сервера.
  3. Запросы к зоне .ghost разрешаются мгновенно из локальной памяти (DnsCache).
  4. Остальные запросы прозрачно проксируются на публичные 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)

Агент вычисляет аппаратный хеш на основе:

  1. Серийного номера CPU.
  2. MAC-адресов постоянных сетевых карт.
  3. Объема установленной оперативной памяти.

Этот хеш проверяется при каждом соединении. Это гарантирует, что даже если злоумышленник получит полный доступ к файловой системе (украдет node.key и cert.pem), он не сможет подключиться к сети с другого устройства.