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

Два разговора в одном конверте

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

Конверт — это протокол. Каждый пакет начинается с небольшого заголовка, который называет его тип, и этот заголовок приходит раньше всего остального.

Что на самом деле приходит первым

Из-за такого порядка первое, что появляется на проводе, — не запись TLS. Это заголовок OpenVPN, за которым идёт содержимое того канала, который заголовок объявляет. ClientHello там есть, только не в нулевом байте. Чтобы заметить разницу, не нужно никакого дешифрования, потому что форма сама её выдаёт.

Значения по умолчанию здесь тоже важны. Поток идёт по UDP на 1194, если профиль не выберет TCP. В обоих случаях внешний вид — туннель, а не веб-запрос.

Три честных способа изменить форму

Терминатор TLS, например stunnel, принимает TLS на порту с каждого конца и передаёт расшифрованный поток OpenVPN локально, поэтому сеть видит TLS на этот порт. Протокол, который является TLS с первого байта, ведёт себя иначе: обмен, совместимый с AnyConnect, который реализует ocserv, напоминает корпоративный удалённый доступ, которого многие сети уже ждут. SSTP, поставляемый с Windows, обладает тем же свойством в другом продукте.

В Linux опция -w в SSH переносит соединение точка-точка внутри сеанса SSH, что полезно, когда SSH — единственный разрешённый протокол. Это самый дешёвый из четырёх, если SSH уже работает из этой сети, и наименее полезный, если нет.

Чего не меняет ни один из них

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

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

Сначала диагностика, потом выбор

Поэтому сначала ставьте диагноз. Отброшенный UDP лечится режимом TCP, а распознанная сигнатура — другим протоколом или обёрткой. Выбор инструмента до того, как известна блокировка, — это путь, которым люди в итоге поддерживают три слоя, которые все отказывают по одной и той же причине.

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

Если ни один не подходит, точный ответ таков: эта сеть не понесёт туннель для вас. Это находка, а не неудача усилий. Перебор большего числа вариантов не отменяет политическое решение, принятое выше.

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

Похожие статьи