NoDPI 2.3. Обзор программы, настройка прокси, работа с HTTPS и анализ сетевого трафика

NoDPI 2.3. Обзор программы, настройка прокси, работа с HTTPS и анализ сетевого трафика

Сетевые программы обычно стараются передать данные как можно быстрее и без лишних преобразований. Но иногда инженеру требуется изменить структуру начального обмена между браузером и сервером, проверить поведение сетевого оборудования или поэкспериментировать с TLS-соединениями. Для подобных задач существуют специальные инструменты, которые работают с трафиком на уровне протоколов.

NoDPI представляет собой небольшую программу с открытым исходным кодом, написанную на Python. Утилита запускает локальный прокси-сервер, принимает HTTP- и HTTPS-соединения, анализирует начало TLS-сеанса и при необходимости изменяет структуру передаваемых записей. При этом NoDPI не устанавливает собственный сетевой драйвер и не требует прав администратора для обычного запуска.

25 октября 2026 года разработчик GVCoder09 выпустил NoDPI 2.3. Обновление принесло новый способ обработки сетевого потока, изменило параметры командной строки и устранило проблемы совместимости, о которых сообщали пользователи.

Разберём устройство программы, нововведения версии 2.3, настройки для Windows и Linux, работу с TLS и ограничения, которые необходимо учитывать перед установкой.

Что нового в NoDPI 2.3

NoDPI развивается как независимое ответвление проекта theo0x0/nodpi. Исходный код распространяется по лицензии GPL-3.0. Основная часть программы использует стандартную библиотеку Python, поэтому запуск из исходников не требует установки сторонних Python-пакетов.

Версия 2.3 стала преимущественно техническим обновлением. Разработчик сосредоточился на механизме обработки TLS ClientHello, а не на изменении пользовательского интерфейса.

Основные изменения выглядят следующим образом.

  • Новый механизм Disorder. Программа может менять последовательность фактического поступления частей TCP-потока на удалённую сторону, используя настройки времени жизни IP-пакетов.
  • Отказ от случайной фрагментации. Прежний метод Random удалён. Разделение TLS ClientHello теперь ориентируется на расположение поля SNI.
  • Новый параметр --no-disorder. Переключатель позволяет отключить механизм Disorder, сохранив обычную фрагментацию TLS-записей.
  • Изменение командной строки. Старый аргумент --fragment-method больше не поддерживается.
  • Уточнённая обработка TLS-записей. Программа читает длину начальной записи из заголовка, а затем получает соответствующее количество байтов.
  • Изменения сборки. В проект добавили процесс автоматической сборки исполняемых файлов для Windows, Linux и macOS через GitHub Actions.
Возможность NoDPI 2.2 NoDPI 2.3
Фрагментация по SNI Поддерживается Поддерживается
Случайная фрагментация Поддерживается Удалена
Механизм Disorder Отсутствует Включён по умолчанию
Выбор метода --fragment-method --no-disorder
Авторизация прокси Поддерживается Сохранена
Работа через системный прокси Поддерживается Сохранена
Журналы соединений Поддерживаются Сохранены

Пользователям предыдущей версии придётся проверить собственные сценарии запуска. Команда с параметром --fragment-method sni больше не соответствует интерфейсу NoDPI 2.3. Программа может завершить запуск с сообщением о неизвестном аргументе.

Как работает NoDPI и зачем программе менять TLS ClientHello

В основе NoDPI лежит обычный локальный HTTP-прокси. После запуска программа слушает адрес 127.0.0.1 и порт 8881. Браузер или другое приложение направляет соединения на локальный адрес, а NoDPI устанавливает отдельное TCP-соединение с конечным сервером.

Для HTTPS используется метод HTTP CONNECT. После согласования туннеля прокси получает первые байты TLS-сеанса, анализирует ClientHello и передаёт данные дальше. Основной зашифрованный обмен между клиентом и сервером продолжает проходить через прокси.

Чтобы разобраться в механизме, полезно понимать разницу между глубоким анализом пакетов и расшифровкой HTTPS. DPI позволяет исследовать доступные заголовки, признаки протокола и последовательность передачи данных. Для чтения зашифрованного содержимого TLS требуется отдельный механизм расшифровки. NoDPI таким механизмом не является.

Фрагментация TLS по полю SNI

Когда браузер устанавливает HTTPS-соединение, клиент отправляет сообщение ClientHello. Сообщение содержит параметры согласования TLS, поддерживаемые алгоритмы, расширения и, в обычном случае, Server Name Indication (SNI) с именем сервера.

NoDPI ищет область SNI и разделяет содержимое ClientHello на несколько TLS-записей. В реализации версии 2.3 программа выделяет данные перед именем сервера, разделяет байты SNI на небольшие части и добавляет оставшуюся область рукопожатия.

Каждая новая запись получает собственный TLS-заголовок. Серверу приходится собирать исходное сообщение рукопожатия из последовательности записей.

Речь идёт именно о фрагментации TLS-записей, а не об обязательном разделении каждого фрагмента на отдельный IP-пакет. TCP самостоятельно определяет, каким образом разместить записанные приложением данные в транспортных сегментах.

Как устроен новый механизм Disorder

Наиболее интересное изменение версии 2.3 связано с управлением порядком доставки частей TCP-потока.

В исходном коде функция _send_disorder() получает сокет исходящего соединения, включает TCP_NODELAY и временно устанавливает TTL=1 для IPv4 либо соответствующий предел переходов для IPv6.

TTL определяет, сколько сетевых переходов может совершить IP-пакет. Маршрутизаторы уменьшают значение при пересылке, а пакет с исчерпанным пределом отбрасывают.

NoDPI отправляет начальную часть TLS-данных с уменьшенным TTL, затем восстанавливает первоначальное значение и передаёт оставшуюся часть. Реализация рассчитывает на стандартную повторную передачу TCP-сегментов, которые не получили подтверждения.

Таким образом, программа не просто меняет порядок вызовов записи в сокет. Механизм опирается на свойства TCP, сетевого маршрута и обработку повторных передач операционной системой.

У подхода есть побочный эффект. Повторная передача TCP может увеличить время установления соединения. Реальная задержка зависит от сетевого стека, таймеров TCP и состояния маршрута. Универсального выигрыша в скорости новый алгоритм не обещает.

Если сетевое оборудование или удалённый сервер плохо взаимодействует с подобной последовательностью пакетов, возможно увеличение времени соединения или ошибки TLS. Для проверки предусмотрен --no-disorder.

Почему NoDPI изменяет заголовок TLS

В исходном коде версия 2.3 формирует новые записи с начальной последовательностью байтов 16 03 04. Значение 03 04 соответствует числовому обозначению TLS 1.3, но изменение заголовка записи не означает, что клиент и сервер автоматически переходят на TLS 1.3.

Реальную версию протокола стороны согласуют во время рукопожатия. Более того, RFC 8446 предписывает использовать совместимые значения версии во внешних заголовках TLS-записей. Поэтому необычное значение поля может влиять на совместимость с отдельными реализациями TLS.

Ещё одно ограничение связано с поиском SNI. Код NoDPI использует собственный разбор байтовой структуры, а не полноценный универсальный анализатор TLS. При нестандартном расположении расширений или другой форме ClientHello результат зависит от того, сумеет ли программа правильно найти нужную область.

Установка и настройка NoDPI 2.3 на практике

Разработчик предоставляет исходный код и исполняемые сборки для настольных операционных систем. NoDPI работает с Windows, Linux и macOS. Отдельный проект NoDPI4Android предназначен для Android и не является просто той же настольной сборкой.

Проще всего получить подходящий архив на странице выпуска. Загружать исполняемые файлы с посторонних сайтов не рекомендуется.

Запуск в Windows

Распакуйте архив, поместите файл blacklist.txt рядом с исполняемым файлом и откройте PowerShell в каталоге программы.

.
odpi.exe --host 127.0.0.1 --port 8881 --blacklist blacklist.txt

После запуска NoDPI начинает принимать подключения на локальном порту 8881. В консоли отображаются сведения о подключениях, объёме входящего и исходящего трафика и текущей скорости передачи.

В Windows поддерживается запуск со сворачиванием в системный трей.

.
odpi.exe --start-in-tray

NoDPI остаётся преимущественно консольной утилитой с дополнительным управлением через трей. Не следует ожидать полноценной графической панели со всеми сетевыми настройками.

Запуск в Linux

Для Linux можно использовать готовую исполняемую сборку или запустить исходный код через Python.

git clone https://github.com/GVCoder09/NoDPI.git
 cd NoDPI
 git checkout v2.3
 python3 src/main.py --host 127.0.0.1 --port 8881

Для запуска из исходников документация указывает Python 3.8 или новее. В проекте также присутствует Dockerfile на базе Python 3.11. Если используется готовый исполняемый файл, отдельная установка Python обычно не нужна.

Выполнять NoDPI от имени root для обычного локального прокси не требуется. Программа использует пользовательский порт и стандартные сетевые сокеты.

Настройка браузера и проверка соединения

В настройках браузера или операционной системы задайте HTTP-прокси с адресом 127.0.0.1 и портом 8881. Для HTTPS-приложений должна использоваться та же точка подключения с поддержкой HTTP CONNECT.

Проверить работу прокси можно без изменения системных настроек через curl.

curl -I --proxy http://127.0.0.1:8881 https://example.com

При нормальной работе curl устанавливает соединение через локальный прокси, выполняет TLS-рукопожатие и выводит HTTP-заголовки ответа. В консоли NoDPI должны измениться счётчики соединений и объёма трафика.

Если прокси отвечает, но HTTPS-сессия не устанавливается, остановите NoDPI и повторите запуск с отключённым Disorder.

python3 src/main.py --host 127.0.0.1 --port 8881 --no-disorder

Параметр --no-disorder не отключает фрагментацию TLS. Программа продолжает разделять ClientHello на записи, но не применяет дополнительную схему с изменением TTL.

Настройка списка доменов и журналов

NoDPI позволяет выбирать домены, для которых нужно применять преобразование TLS-записей. Список хранится в обычном текстовом файле. Например, для лабораторного испытания можно создать файл test-domains.txt.

example.com
 test.example.org

Затем запустите программу с выбранным файлом.

python3 src/main.py --blacklist test-domains.txt --domain-matching strict --log-access access.log --log-error errors.log

Режим strict сопоставляет точные имена и поддомены, если указан родительский домен. Режим loose использует менее строгий поиск подстроки и может затронуть лишние имена. Для предсказуемых лабораторных тестов лучше оставлять значение strict.

Журнал доступа фиксирует время, адрес клиента, метод запроса, домен и счётчики переданных байтов. Журнал ошибок помогает разбирать неудачные соединения.

Для более широких испытаний существуют параметры --no-blacklist и --autoblacklist. Первый применяет преобразования ко всем обрабатываемым доменам, второй выполняет дополнительные проверки доступности и формирует список автоматически. Автоматический режим ориентируется на отдельные ошибки TLS и не заменяет полноценную диагностику соединения.

Дополнительные параметры включают --auth-username и --auth-password для авторизации на прокси, --quiet для уменьшения консольного вывода и --install для добавления исполняемой версии в автозапуск Windows или пользовательский systemd в Linux.

После завершения эксперимента нужно выключить программу и вернуть прежние настройки прокси. Иначе браузер продолжит обращаться к неработающему локальному адресу.

Ограничения, безопасность и практическая ценность NoDPI

Главное достоинство NoDPI заключается в компактной архитектуре. Исходники доступны для изучения, программа не требует установки драйвера перехвата пакетов, поддерживает несколько настольных платформ и позволяет управлять отдельными аспектами TLS-трафика.

Однако функциональность ограничена устройством локального прокси.

  • Не весь сетевой трафик проходит через NoDPI. Приложение должно поддерживать настройку HTTP-прокси либо использовать системные параметры. Программы с собственными сетевыми соединениями могут работать напрямую.
  • QUIC и HTTP/3 не обрабатываются тем же механизмом. NoDPI ориентирован на TCP-соединения и обычный HTTPS через HTTP CONNECT. Для нативного UDP-трафика требуются другие механизмы.
  • Нет полноценной анонимизации. Прокси работает локально и сам подключается к конечному серверу. Маршрут и внешний IP-адрес пользователя принципиально не заменяются удалённым выходным узлом.
  • Нет дополнительного шифрования трафика. Программа не заменяет TLS и не устанавливает собственный защищённый туннель поверх обычных интернет-соединений.
  • Возможны проблемы совместимости. Изменение структуры ClientHello и поведения TCP может влиять на время соединения и реакцию серверных реализаций TLS.
  • Автоматическая проверка доменов ограничена. В исходном коде для дополнительных HTTPS-проб используется контекст без проверки сертификата. Поэтому результаты таких проб нельзя считать полноценной проверкой подлинности сервера.

NoDPI изменяет характеристики сетевых соединений. Проводите эксперименты на собственных устройствах и в сетях, где разрешены подобные испытания. В корпоративной инфраструктуре согласуйте настройку прокси с администратором. Не публикуйте журналы соединений, если в них содержатся сведения о пользовательской активности.

У программы есть и менее очевидные особенности.

Например, параметр --out-host может создать впечатление, что NoDPI умеет подключаться к другому прокси. По исходному коду аргумент задаёт локальный адрес для исходящих сокетов, а не адрес вышестоящего прокси-сервера.

Встроенный счётчик соединений также не стоит воспринимать как точный показатель сетевых ошибок. В реализации NoDPI отдельная категория статистики увеличивается при выборе соединения для фрагментации, а не только при реальном отказе сервера. Для диагностики полезнее сопоставлять журналы с результатами curl и сетевого анализатора.

Режим автоматического определения доменов выполняет дополнительные HTTPS-запросы. Тайм-аут рукопожатия может возникнуть не только из-за особенностей сетевой обработки, но и из-за нагрузки на сервер, проблем маршрутизации или нестабильного соединения. Поэтому автоматически созданный список требует ручной проверки.

Отдельного внимания заслуживает конфиденциальность. Авторы заявляют, что NoDPI не собирает пользовательские данные. В исходном коде при этом присутствует запрос к серверу проекта для проверки доступности обновлений. Наличие такого запроса само по себе не означает телеметрию, но утверждать, что программа вообще никогда не обращается к инфраструктуре разработчика, было бы неверно.

При включённом журналировании NoDPI сохраняет сведения о посещаемых доменах локально. Кроме того, прокси использует стандартную HTTP Basic-авторизацию без собственного шифрования управляющего соединения. Поэтому открывать порт 8881 для внешних подключений без дополнительной защиты не следует. Привязка к 127.0.0.1, используемая по умолчанию, предпочтительнее для персонального компьютера.

Для Docker необходимо отдельно проверить сетевую конфигурацию. Если процесс слушает только 127.0.0.1 внутри контейнера, обычная публикация порта через -p не гарантирует доступ к прокси с хостовой системы.

Наконец, отсутствие сторонних библиотек в исходной Python-программе не означает, что готовый исполняемый файл имеет полностью прозрачную среду выполнения. При сборке через PyInstaller внутрь включается интерпретатор и необходимые компоненты. Для чувствительных рабочих станций разумно проверять происхождение сборки и при необходимости собирать исполняемый файл самостоятельно.

Частые вопросы о NoDPI 2.3

Нужно ли устанавливать Python для NoDPI?

Для готовой исполняемой сборки отдельный Python обычно не требуется. Для запуска исходного кода нужен Python подходящей версии. Автор рекомендует Python 3.8 или новее.

Можно ли запустить NoDPI без прав администратора?

Да. При стандартных настройках программа использует локальный адрес 127.0.0.1 и порт 8881. Для обычного запуска системные привилегии не нужны. Политики безопасности организации могут вводить собственные ограничения.

Чем отличается NoDPI 2.3 от версии 2.2?

Основное изменение связано с механизмом Disorder. В версии 2.3 удалена случайная фрагментация, изменён способ обработки начальной TLS-записи и вместо прежнего переключателя метода появился параметр --no-disorder.

Работает ли NoDPI с протоколом HTTP/3?

NoDPI не реализует полноценную обработку QUIC, лежащего в основе HTTP/3. Программа ориентируется на HTTP-прокси и TCP-соединения с TLS. Для экспериментов с QUIC потребуются инструменты, работающие с UDP.

Можно ли использовать NoDPI как обычный HTTP-прокси?

Да. Программа принимает обычные HTTP-запросы и HTTPS-соединения через CONNECT. При этом NoDPI остаётся специализированной утилитой, а не полноценной заменой корпоративным прокси-серверам с развитой системой контроля доступа, фильтрации и учёта.

Что делать, если после включения NoDPI сайты открываются медленнее?

Сравните время соединения с обычным подключением, затем повторите эксперимент с параметром --no-disorder. Если задержки сохраняются, проверьте журналы ошибок, параметры прокси, работу DNS и TLS-рукопожатия. Не стоит применять преобразование ClientHello ко всем доменам без необходимости.

Как проверить, что NoDPI действительно изменяет TLS-записи?

Используйте Wireshark или tcpdump в собственной тестовой сети. Сравните TLS ClientHello при прямом соединении, через NoDPI с параметром --no-disorder и через стандартный режим версии 2.3. Проверьте количество TLS-записей, последовательность TCP-сегментов и наличие повторных передач. Простой рост счётчиков NoDPI ещё не подтверждает корректность преобразования трафика.

Вывод

NoDPI 2.3 представляет интерес прежде всего как компактный инструмент для экспериментов с HTTPS-соединениями и изучения поведения сетевых протоколов. Открытый код, локальный прокси, работа без административных привилегий и возможность отдельно управлять TLS-фрагментацией делают программу удобной для небольшой сетевой лаборатории.

Новая версия заметно изменила механизм работы с начальными TCP-сегментами. Disorder использует низкий TTL и повторные передачи TCP, поэтому поведение соединения зависит не только от самой программы, но и от особенностей операционной системы и сети.

Для первых экспериментов я бы выбрал запуск на локальном адресе, собственный небольшой список тестовых доменов и сравнение режимов с Disorder и без него. Результаты лучше проверять через curl и Wireshark, а не только по сообщениям консоли.

Не стоит воспринимать NoDPI как универсальный сетевой инструмент. Программа не заменяет полноценный прокси-сервер, VPN, анализатор протоколов или средство защиты трафика. Её сильная сторона заключается в точечном изменении начального TLS-обмена. Границы применимости определяются используемым протоколом, поведением клиента и сервера, а также возможностями конкретной сети.

Разбор основан на исходном коде версии 2.3 и опубликованных изменениях разработчика. Независимые сравнительные испытания производительности и совместимости в разных операционных системах не проводились, поэтому заявлять о гарантированном ускорении или стабильности соединений было бы преждевременно.

NoDPI DPI прокси HTTPS TLS SN
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
ИИ закрыл все тревоги. А атаки точно остановлены?Разбираем в статье на SecurityLab — и объясняем, как оценивать пользу ИИ, а не красоту отчётов. Читать статью→ 18+. Реклама. Рекламодатель ООО «Интеллектуальная безопасность», ИНН 7719435412, erid: 2SDnjcr7xo6