TUZVPN
// 01$ tuzvpn explain --dpi

Как DPI распознает и блокирует VPN-трафик

Команда TUZVPN··7 мин

Оборудование не расшифровывает соединение. Ему хватает того, что видно снаружи: порта, формы хендшейка, длин пакетов и ответа сервера на прямую проверку.

Что такое DPI и в каких условиях он работает

DPI — оборудование, установленное в разрыв магистрального канала. Через него проходит весь трафик участка, и решение по каждому соединению нужно принять за миллисекунды, не задерживая поток. Это главное ограничение, и из него вытекает остальное.

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

Расшифровать содержимое DPI не может и не пытается. Но и зашифрованное соединение оставляет снаружи много наблюдаемого: адреса, порты, открытую часть установки соединения, размеры пакетов и интервалы между ними.

Первый уровень: порты и адреса

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

Обходится этот уровень переносом на 443: этот порт нельзя закрыть целиком, не сломав весь HTTPS в сети. Ровно поэтому почти любое современное средство обхода живет на 443, и ровно поэтому фильтрация на этом не заканчивается: раз порт закрыть нельзя, придется смотреть, что именно по нему идет.

Второй дешевый признак — адрес назначения. Диапазоны известных хостинг-провайдеров и адреса, к которым внезапно пошел трафик от множества абонентов, попадают в списки. Признак грубый: под него легко попадают обычные сервисы, поэтому его редко применяют в одиночку.

Второй уровень: сигнатура хендшейка

Любое зашифрованное соединение начинается с обмена, который по определению идет открытым текстом: стороны еще не договорились о ключах. Эта часть и есть основной материал для распознавания.

У классических VPN-протоколов начало соединения выглядит характерно: фиксированная длина первого сообщения, фиксированное значение в первом байте, предсказуемый порядок обмена. Такое правило стоит одно сравнение на пакет и работает даже на 443. Переносом порта форма пакета не меняется.

Отдельная тема — отпечаток TLS. В первом сообщении клиент перечисляет поддерживаемые шифры и расширения, и сам набор вместе с порядком образует узнаваемый отпечаток. Браузеры дают известные отпечатки; клиент со своей библиотекой дает отпечаток, не совпадающий ни с одним браузером, и выделяется именно этим. Еще один признак: открытое имя сервиса в том же сообщении.

Третий уровень: форма трафика

Когда сигнатуры нет, остаются статистические признаки: распределение длин пакетов, интервалы между ними, соотношение исходящего и входящего потоков, длительность сессии. Разные виды активности дают разную форму: скачивание файла, видеопоток, голосовой звонок и просмотр страниц отличаются друг от друга даже полностью зашифрованными.

Туннель выдает себя тем, что в одно соединение с одним адресом упакованы разнородные потоки сразу. Сессия живет часами, обмен идет в обе стороны постоянно, и в нем нет пауз, характерных для чтения страницы человеком.

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

  • Порт и адрес: дешево, применяется всегда
  • Сигнатура хендшейка: дешево и точно, основной рабочий метод
  • Отпечаток TLS-клиента: точно, если отпечаток не совпадает с браузерным
  • Статистика длин и интервалов: дорого и неточно, чаще ведет к деградации
  • Активное зондирование: дорого, применяется точечно по подозрительным адресам

Активное зондирование

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

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

Отсюда требование к транспорту, который планирует пережить фильтрацию: сервер должен вести себя как настоящий сайт для любого, кто не предъявил правильный ключ. Проверяющий, подключившись, обязан увидеть обычный сайт — иначе остальное маскирование бессмысленно.

Почему одни протоколы переживают блокировку, а другие нет

Условий три, и выполнить нужно все. Трафик должен идти по порту, который нельзя закрыть целиком. Начало соединения должно быть неотличимо от массового HTTPS: и по структуре пакетов, и по отпечатку клиента. Сервер должен выдерживать активную проверку.

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

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

Как это выглядит с вашей стороны

Отличить фильтрацию от поломки помогает характер симптома. Соединение не устанавливается вовсе: скорее всего, отрезали порт или узнали хендшейк. Туннель поднялся, статус зеленый, а данные не идут — значит, соединение опознали уже после установки. Если связь работает, но медленно и рывками при нормальной скорости канала, это деградация по статистическим признакам, а не блокировка.

Практическое следствие простое: первым делом стоит поменять локацию, а не переустанавливать приложение. Списки правил и списки адресов у разных операторов разные, и соседний сервер часто оказывается вне текущей волны.

В TUZVPN все локации лежат внутри одного ключа подписки: Швеция, Латвия, Нидерланды, Польша, Германия, США. Переключение занимает пару касаний в INCY или Happ и не требует нового ключа. Российские приложения при включенном VPN продолжают работать, так что переключаться туда-обратно ради банка или доставки не нужно.

// коротко

  • DPI не расшифровывает трафик — он работает с портами, формой хендшейка, отпечатком клиента и статистикой пакетов.
  • Перенос на 443 снимает только самый дешевый слой фильтрации.
  • Сигнатура начала соединения — основной рабочий метод: она дешевая и точная.
  • Статистические признаки чаще приводят не к блокировке, а к сужению полосы.
  • Активное зондирование проверяет сам сервер: он должен отвечать как обычный сайт.
  • Фильтрация неоднородна по операторам и времени, поэтому смена локации помогает чаще, чем переустановка приложения.

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

Почему один и тот же VPN работает у одного провайдера и не работает у другого?

Наборы правил на оборудовании различаются: где-то режут только известные порты, где-то разбирают хендшейк, где-то дополнительно зондируют сервер.

Помогает ли смена порта?

Только против самых простых правил. Если распознавание идет по сигнатуре хендшейка или по статистике пакетов, порт роли не играет.

Что должен уметь протокол, чтобы пережить фильтрацию?

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

// источники

Подключить TUZVPN на конкретной платформе:

// читать дальше