Четырёхузловая архитектура

Как трафик проходит от клиента до интернета через разделённую цепочку компонентов, где каждый знает только то, что ему необходимо.

Четырёхузловая архитектура NavLink
Компоненты

Четыре независимых звена

Каждый узел выполняет строго ограниченную задачу. Компрометация любого из них не раскрывает информацию об остальных — это принципиально отличает NavLink от классических прокси-решений с единой точкой отказа.

Client
Клиентское приложение

Приложение на устройстве пользователя. Перехватывает весь IP-трафик через виртуальный сетевой интерфейс и направляет его в туннель.

  • Знает только адреса control-узлов
  • Адрес exit никогда не раскрывается
  • Платформы: Windows (WinTun), macOS (NEPacketTunnelProvider), Android (VpnService)
  • TLS-профиль: Chrome / Firefox / Safari / Edge
  • Локальный трафик идёт напрямую, минуя туннель
Control
Управляющий узел

Региональный прокси первого прыжка. Принимает соединение от клиента и прозрачно пробрасывает его до exit-узла. Содержимое трафика не видит.

  • Чистый TCP pass-through, нет TLS-терминации
  • Проверяет работоспособность exit каждые 10 секунд
  • Адрес арбитра клиенту не передаётся
  • Видит IP клиента, но не целевой хост
Exit
Exit-узел

Терминирует зашифрованный туннель и устанавливает соединение с целевым ресурсом. Трафик покидает сеть с IP-адреса exit-узла.

  • Декодирует HTTP-обфускацию
  • Проверяет X-Session токен через кеш арбитра
  • Видит IP control-узла, а не реальный IP клиента
  • Поддерживает UDP relay и para-exit маршрутизацию
Arbiter
Арбитр

Центральный сервер управления. Выдаёт ключи доступа, управляет реестром узлов, ведёт биллинг. Клиент с ним напрямую не общается.

  • Недоступен напрямую — только через туннель
  • Подписывает манифест узлов (Ed25519)
  • Не знает IP клиента и целевой хост
  • SQLite WAL — надёжное хранение без внешних зависимостей
Путь данных

Как проходит соединение

От момента открытия сайта до получения ответа — каждый шаг туннельного протокола NavLink.

01

Перехват на уровне ОС

Клиентское приложение поднимает виртуальный сетевой интерфейс — WinTun на Windows, NEPacketTunnelProvider на macOS, VpnService на Android. Весь IP-трафик захватывается и передаётся в tun2socks, который эмулирует TCP-стек поверх TUN-адаптера.

02

Выбор пути: туннель или напрямую

Каждый IP-адрес сверяется с набором CIDR-диапазонов, загруженных при подключении. Адреса целевой страны уходят напрямую через физический интерфейс. Все остальные — через туннель.

RUUSCNIREU
03

uTLS + channel byte

Клиент открывает TLS-соединение к control-узлу с браузерным отпечатком — Chrome, Firefox, Safari или Edge, случайно выбираемым на каждое соединение. В поле TLS Session ID встраивается channel byte: 0x00 — основной туннель, 0x01 — relay API, 0x02 — сигнальный канал NAT.

Session ID[0] = 0xA7 Session ID[1] = channel
04

Control: прозрачный проброс

Control-узел не расшифровывает TLS и не анализирует содержимое. Он пробрасывает байтовый поток напрямую к exit-узлу, выбранному по гео-политике: исключаются exit-узлы в стране клиента и в стране самого control-узла. Из оставшихся выбирается по RTT и нагрузке.

05

Exit: декодирование HTTP-обфускации

Exit-узел видит входящий поток как chunked HTTP POST на статично выглядящий путь. Декодирует обфускацию, проверяет X-Session токен через локальный кеш и устанавливает TCP-соединение с целевым хостом.

X-Session X-Target X-Conn
06

Ответ обратно через туннель

Ответ от целевого сервера проходит тот же путь в обратном направлении: exit, затем control, затем клиент. HTTP-обфускатор применяется и к исходящим данным — для внешнего наблюдателя весь обмен выглядит как стандартный HTTPS.

Авторизация

Как работает сессия

Ключ доступа NavLink — не просто пара логин/пароль. Это зашифрованная структура с вшитыми адресами узлов и цифровой подписью арбитра.

01

Разбор ключа

Клиент расшифровывает key-string и извлекает: логин, пароль, список control-узлов, публичный ключ арбитра и цифровую подпись Ed25519. Ключи V2 используют XChaCha20-Poly1305 с BLAKE2b-производным ключом шифрования.

XChaCha20-Poly1305 BLAKE2b-256 Ed25519
02

Логин через туннель

POST /api/auth/login проксируется через exit-узел на арбитр. Клиент с арбитром напрямую никогда не общается. Арбитр проверяет пароль и возвращает непрозрачный SNC-токен, зашифрованный ChaCha20-Poly1305.

03

Валидация на exit-узле

Каждый туннельный запрос несёт заголовок X-Session. Exit проверяет токен через локальный кеш или запрашивает арбитр. Устаревший кеш хранится 3 часа на случай временной недоступности арбитра.

кеш: 1 мин stale: 3 ч
04

Защита от утечки ключа

Если один и тот же ключ используется одновременно с двух разных устройств в течение 10 секунд — это признак утечки. После трёх таких событий аккаунт автоматически блокируется.

окно: 10 с 3 события = blocked
Изоляция

Кто что знает

Ключевое свойство архитектуры: данные об инфраструктуре разделены между компонентами. Ни один узел не обладает полной картиной.

Данные Client Control Exit Arbiter
Адреса control-узлов YesYesNoYes
Адреса exit-узлов NoYesYesYes
Полная топология сети NoNoNoYes
Реальный IP клиента YesYesNoNo
Целевой хост YesNoYesNo
Содержимое трафика YesNoNoNo

Exit видит целевой хост только в заголовке X-Target — для установки исходящего TCP-соединения. Содержимое трафика он не расшифровывает. Control видит IP клиента, но не знает, куда тот идёт.

Семь уровней защиты

Детальный разбор каждого из семи механизмов обфускации.

К обзору Уровни защиты