Статья от команды CloudBridge Research.
Тут можно ознакомиться с нашими исследованиями
Если вы когда-нибудь пытались построить стабильный VPN поверх реального Интернета, то знаете: ключевая проблема не в криптографии и даже не в пропускной способности канала. Проблема в том, как протокол ведет себя, когда сеть начинает «качать».
Мы много лет экспериментировали с OpenVPN, WireGuard и разными вариациями UDP-туннелей. В хорошей сети → работают все. В плохой сети → перестают работать почти все. Поэтому когда в экосистеме QUIC появился MASQUE, мы решили проверить: а можно ли собрать VPN, который действительно переносит нестабильные условия?
Оказалось, что можно. Ниже немного опыта и наблюдений, которые накопились в процессе разработки нашего экспериментального masque-vpn.
Почему MASQUE выглядит многообещающе
QUIC долгое время воспринимали как «протокол для браузеров»: быстрый старт, меньше задержек, меньше head-of-line blocking. Но со временем стало понятно, что QUIC — это скорее современный транспорт, который умеет жить в реальном мире: мигрирующие соединения, резкие просадки канала, переезды между Wi-Fi и LTE.
MASQUE вырос как логичное продолжение:
«Если мы уже передаем пол-Интернета по QUIC, почему бы не сделать поверх него нормальный IP-туннель?»
Так появился RFC 9484 (CONNECT-IP). И он оказался гораздо интереснее, чем ожидалось.
Что происходит, когда MASQUE попадает в нестабильную сеть
Мы специально создавали «плохие условия»: RTT скачет от 50 до 150 мс, джиттер до 30 мс, потери 2%. Типичный мобильный профиль.
Результаты:
OpenVPN в таких условиях легко «тонет» из-за TCP-over-TCP.
WireGuard держится лучше, но чувствителен к потере и не любит частые переключения канала.
MASQUE неожиданно стабилен.
Почему так:
QUIC datagrams не создают лавину ретраев.
Потери не приводят к блокировке всего потока.
Управляющий поток живет отдельно и не мешает передаче данных.
При смене канала соединение не рвется, QUIC продолжает «как ни в чем не бывало».
Когда мы включили свой FEC-модуль (мы сделали XOR-вариант и экспериментируем с Reed-Solomon), джиттер внутри туннеля упал почти до нуля. Это очень заметно в RDP, видеозвонках и стриминговых приложениях.
WireGuard все еще быстрее на идеальных каналах, тут спору нет. Но MASQUE оказался «живучее», а для многих задач именно это и важно.
Немного о том, как все устроено внутри
masque-vpn — это реализация CONNECT-IP поверх QUIC с поднятием TUN-интерфейса, обработкой капсул и передачей пакетов через datagrams. Все максимально прозрачно, без «магии».
Несколько любопытных моментов:
Capsules позволяют динамически менять IP и параметры туннеля без переподключения.
QUIC проще переносит потерю связи между разными интерфейсами.
Go удобен для прототипирования, но, конечно, user-space криптография ест CPU.
Сейчас мы больше сосредоточены на корректности и воспроизводимости, а не на экстремальной оптимизации. Но потенциал для оптимизации — огромный (XDP, eBPF, аппаратный offload и т.д.)
Где MASQUE оправдывает себя лучше всего
MASQUE и WireGuard не конкуренты, а инструменты для разных задач.
Есть сценарии, где MASQUE прямо «заходит»:
Мобильные пользователи, переключающие сети на ходу.
Филиалы и удаленные площадки с неоднородными каналами.
Корпоративная удаленка, где важна предсказуемость качества.
Среды, где HTTP/3 проходит стабильнее, чем «чистый UDP».
Приложения, чувствительные к очередям и джиттеру.
Если упростить:
WireGuard про скорость.
MASQUE про устойчивость.
Но и минусы есть, честно и без маркетинга
Было бы странно их не перечислить:
QUIC-туннель тяжелее по CPU, чем kernel-based WireGuard.
Архитектура MASQUE сложнее.
Пока что нужен наш клиент (нельзя просто включить в ОС).
Оптимизации «на железе», еще впереди.
Но если ваша задача — стабильность в непредсказуемой сети, MASQUE выглядит как один из самых интересных вариантов.
Хотите попробовать?
Репозиторий полностью открыт:
https://github.com/twogc/masque-vpn
Есть базовые образы Docker, примеры конфигураций и минимальные клиенты.
Мы будем рады вашим находкам, идеям, вопросам и Pull Request’ам — это исследовательский проект, и чем больше людей его попробует, тем быстрее мы поймем, как этот стек ведет себя «в дикой природе».
aborouhin
Очень интересно, но текущие реалии вынуждают задаться вопросом - а как там вообще сейчас дела с QUIC в РФ? Живой? Вроде, блокировали его ковровыми методами.