Контроль у вас
qeli работает на вашем сервере. Никаких чужих узлов, аккаунтов и подписок — данные не покидают вашу инфраструктуру.
qeli — это полноценный VPN (а не прокси) для размещения на собственном сервере. Он использует собственный сетевой протокол и встроенную маскировку трафика поверх соединений TCP или UDP. Цель — пройти там, где блокируют обычные VPN, и при этом защитить всё устройство целиком — со встроенной панелью управления через браузер.
# одна служба — несколько профилей сразу
$ qeli server --config /etc/qeli/server.conf
[ ok ] Профиль 'tcp' tcp://0.0.0.0:443 под HTTPS
[ ok ] Профиль 'obfs' tcp://0.0.0.0:8443 под WebSocket
[ ok ] Профиль 'real' tcp://0.0.0.0:8444 REALITY
[ ok ] Профиль 'udp' udp://0.0.0.0:4443 под QUIC
[ ok ] панель управления → https://0.0.0.0:8080
[ ok ] все профили запущены
VLESS, V2Ray, Shadowsocks и большинство популярных инструментов обхода блокировок — это прокси: они перенаправляют трафик только тех приложений, которые специально настроены. qeli создаёт настоящий сетевой туннель и защищает всё устройство целиком.
Обычный VPN отлично работает — пока его не начинают блокировать. qeli создан для случаев, когда это важно: пройти сквозь фильтрацию и при этом держать всё под собственным контролем.
Современные системы фильтрации трафика — в том числе государственные — распознают WireGuard и OpenVPN по характерным признакам и блокируют их за секунды. Готовые коммерческие VPN тоже попадают в списки блокировок, а ваши данные при этом проходят через чужие серверы.
qeli маскирует трафик под обычные сайты и протоколы — HTTPS, WebSocket, QUIC, — поэтому фильтры не отличают его от повседневного интернета. А работает он на вашем собственном сервере: без посредников, подписок и слежки.
Правила, которым qeli следует по умолчанию, — его «конституция».
qeli работает на вашем сервере. Никаких чужих узлов, аккаунтов и подписок — данные не покидают вашу инфраструктуру.
Устойчивость к блокировкам встроена в сам протокол, а не добавлена отдельным плагином поверх.
Мы прямо пишем, от чего защищаемся, а от чего нет. Без маркетинговых обещаний полной невидимости.
Протокол и все клиенты открыты — можно проверить, что именно происходит внутри.
Программа ничего не собирает о вас и никуда не отправляет данные о вашем использовании.
Туннель, маскировка, управление и клиенты — в одном решении, без связки из нескольких отдельных программ.
По возможностям qeli близок к известным инструментам маскировки под HTTPS, но использует собственный сетевой протокол, встроенный туннель и панель управления. Не нужны дополнительные программы-посредники — всё работает в одной службе.
Современное шифрование X25519 и ChaCha20-Poly1305. Каждый пакет шифруется отдельно, а в передаваемых данных нет открытого счётчика — частого признака самодельных VPN.
Маскировка под HTTPS, полная маскировка под WebSocket и перенаправление на настоящий сайт (REALITY) — без сторонних программ. Несколько режимов на выбор, переключаются одной настройкой.
TCP, UDP и REALITY одновременно в одной службе. У каждого профиля свой ключ, свои пользователи и раздельный доступ. WireGuard и OpenVPN так не умеют.
Управление через браузер с защитой входа. Создание ссылок для подключения и QR-кодов для клиентов — прямо из панели, без правки файлов.
Защита ключа сервера, раздельный доступ для пользователей, защита от подбора пароля и устойчивость к сбоям — всё собрано в одной программе.
У каждого профиля свой постоянный ключ. Клиент закрепляет его у себя; при несовпадении соединение разрывается — защита от подмены сервера.
Подлинность подключения привязана к отпечатку всего рукопожатия. Любая подмена данных в канале разрывает соединение — защита от перехвата посредником.
Клиенты без закреплённого ключа отклоняются, а ключ сервера не раскрывается тем, кто сканирует сеть. Строгий режим против посторонних.
Пользователь одного профиля не подключится к другому даже с верным паролем. Профили полностью изолированы друг от друга.
Блокировка по паре «пользователь и адрес» с настраиваемым порогом. Пароли защищены стойким к перебору алгоритмом Argon2id.
Сервер отклоняет слишком короткие запросы — его нельзя использовать как усилитель для DDoS-атак на третьи стороны.
Связь восстанавливается сама, с нарастающими интервалами. Недоступность сервера определяется за десятки секунд. Смена Wi-Fi и мобильной сети не разрывает сессию.
Настройки DNS восстанавливаются после сбоя или некорректного завершения — интернет не пропадает даже после аварийной остановки программы.
В передаваемых данных нет открытого растущего счётчика пакетов — частого признака, по которому распознают и блокируют самодельные VPN.
Сервер подтверждает свою подлинность до того, как клиент отправит пароль, — перехватить пароль посреднику не удастся. Порядок шагов важен для безопасности.
Клиент начинает соединение так же, как обычный браузер при заходе на сайт по HTTPS, и обменивается с сервером временными ключами. Внешне это неотличимо от захода на обычный сайт.
клиент: приветствие (как браузер) → сервер: ответ и сертификат
Подлинность подключения привязывается к отпечатку всего обмена. Если кто-то посередине подменит хотя бы одно сообщение — отпечаток не сойдётся, и соединение прервётся.
отпечаток = хеш всех сообщений рукопожатия
Сервер доказывает, что владеет своим постоянным ключом, а клиент сверяет этот ключ с закреплённым у себя. Это происходит до отправки пароля — поэтому подменный сервер пароль не получит.
проверка: ключ сервера = закреплённый ключ?
Только теперь по уже защищённому каналу клиент отправляет логин и пароль. Пароль проверяется стойким алгоритмом, а доступ выдаётся согласно профилю пользователя.
логин и пароль → проверка Argon2id → доступ по профилю
Каждый пакет шифруется, дополняется до нужного размера и отправляется в выбранном виде маскировки — под HTTPS, WebSocket или QUIC.
пакет → шифрование → маскировка (HTTPS · WebSocket · QUIC)
Режим определяет, как соединение выглядит «на проводе» для систем фильтрации. Выбирается одной настройкой, одинаково на сервере и клиенте. Ниже — что именно уходит в сеть и против какого уровня фильтрации работает каждый режим.
Соединение начинается с псевдо-рукопожатия TLS 1.3: клиент шлёт ClientHello с именем сайта (SNI), обменом ключами X25519 (key_share) и GREASE-значениями. Порядок TLS-расширений рандомизируется, поэтому отпечаток JA3/JA4 меняется при каждом подключении. Дальше данные идут в TLS-записях типа Application Data — как у настоящего HTTPS.
ClientHello · SNI · x25519 · GREASE
порядок расширений рандомизирован
данные → TLS record 0x17 (application_data)
Весь поток дополнительно шифруется потоковым ключом ChaCha20 на общем секрете (PSK) — на проводе нет ни одной узнаваемой структуры. Чтобы пройти эвристики «полностью зашифрованного» трафика (GFW c 2022, ТСПУ), начало замаскировано под рукопожатие WebSocket Upgrade: клиент шлёт обычный GET … Upgrade: websocket, сервер отвечает 101 Switching Protocols с корректным Sec-WebSocket-Accept (SHA-1). Первый пакет — печатаемый HTTP-текст, проходит исключения энтропийного детектора. Путь, Host, User-Agent и ключ рандомизированы.
GET /<rand> HTTP/1.1 · Host/UA/key рандом
Upgrade: websocket → 101 Switching Protocols
далее: поток XOR ChaCha20 (без структуры)
На каждом TCP-подключении сервер делает один «подсмотр» (peek) первого ClientHello. Если это не клиент qeli — определяется по наличию расширения ALPN (у qeli-клиента его нет), — соединение целиком и прозрачно проксируется на настоящий сайт (например, cloudflare:443). Активный пробер, который сам достучится до сервера (openssl s_client), увидит реальный сайт с действующим сертификатом, а не VPN. Решение принимается один раз на accept.
peek ClientHello на TCP accept
есть ALPN → проксируем на реальный сайт :443
нет ALPN → это qeli-клиент, обычный сеанс
Для UDP датаграммы оформляются под заголовок QUIC версии 1. Зашифрованная датаграмма принимает форму QUIC short-header: первый байт — в диапазоне с установленным fixed-битом QUIC, затем 12-байтовый nonce играет роль connection-id, далее защищённые данные — а не равномерный шум с первого байта. Начальная датаграмма добивается до ≥1200 байт (защита от усиления атак), сервер отбрасывает слишком короткие.
[flag 0x40|x][nonce:12 как conn-id][protected]
initial ≥ 1200 байт (анти-амплификация)
Замеры на двух одинаковых серверах: по 2 ядра процессора, канал около 1 Гбит/с. Версия 2.0.0, июнь 2026 года.
Все режимы стабильно держат ~410–560 Мбит/с без обрывов. Маскировка под HTTPS почти не снижает скорость, REALITY — наравне с обычным режимом, полная маскировка теряет 10–13% из-за двойного шифрования.
По UDP передача без потерь до 300 Мбит/с, держит ~400 Мбит/с при потерях менее 3%, насыщается около 500 Мбит/с — расшифровка не успевает на одном ядре процессора.
Ограничение — расшифровка выполняется на одном ядре процессора. На более мощном оборудовании или с аппаратным ускорением шифрования скорость будет выше. Для сравнения, без VPN на том же стенде: TCP около 20 Гбит/с, UDP около 1 Гбит/с.
Без маркетинга. Показатели qeli измерены на нашем тестовом стенде; данные других решений — типовые опубликованные значения на сопоставимом оборудовании (2 ядра процессора, канал около 1 Гбит/с). В сравнение включены и инструменты обхода блокировок, и обычные VPN — для ориентира.
WireGuard быстрее всех, но только без маскировки — под блокировками он не работает. Среди инструментов обхода блокировок qeli держит около 475 Мбит/с стабильно — выше типового V2Ray и наравне с другими.
| Возможность | WireGuard | AmneziaWG | OpenVPN | Shadowsocks | V2Ray | Hysteria 2 | qeli |
|---|---|---|---|---|---|---|---|
| Полноценный VPN (а не прокси) | да | да | да | прокси | прокси | прокси | да |
| Скорость | ★★★★★ | ★★★★ | ★★★ | ★★★ | ★★★ | ★★★★ | ★★★★ |
| Маскировка трафика | нет | ★★★ | нет | ★★★ | ★★★★ | ★★★★ | ★★★★ |
| Несколько режимов маскировки | нет | один | нет | плагины | ★★★★ | частично | ★★★ HTTPS / WebSocket / REALITY |
| Маскировка под HTTPS / HTTP3 | нет | нет | TLS | через плагин | TLS + REALITY | под HTTP/3 | под HTTPS + REALITY |
| Встроенная панель управления | нет | приложение | нет | нет | нет | нет | да |
| Защита от подбора пароля | нет | нет | плагин | нет | нет | нет | да |
| Закрепление ключа сервера | ключ узла | ключ узла | сертификат | пароль | да | сертификат | да |
| Раздельный доступ по профилям | нет | нет | нет | нет | частично | нет | да |
| Несколько профилей в одной службе | нет | нет | нет | нет | да | нет | да |
| Работа в ядре системы | да | да | нет | нет | нет | нет | нет |
| Независимый аудит безопасности | ★★★ | ★★ | ★★★ | ★★ | ★★★ | ★★ | нет |
| Постквантовая криптография | нет | нет | нет | нет | нет | нет | в планах |
VPN на своём сервере для себя или небольшой команды, где важны: маскировка трафика под HTTPS или под WebSocket, встроенная панель управления, несколько профилей, закрепление ключа и пароль, раздельный доступ для пользователей.
Нужна максимальная скорость — берите WireGuard. Нужна защита от государственной активной проверки с настоящим сертификатом — Xray REALITY. Нужен код, прошедший независимый аудит, — OpenVPN или WireGuard. Постквантовая криптография — пока нет ни у кого из списка.
Что защищено, а что нет. qeli открыто описывает свои ограничения вместо маркетинговых обещаний полной невидимости.
Все клиенты полностью совместимы с сервером. Ссылка для подключения и QR-код переносят все настройки в любой клиент одним нажатием.
Написан на Rust
Приложение
Приложение
Один формат настроек для сервера, клиента и списка пользователей. Настройки клиента — это та же ссылка для подключения и QR-код.
# минимальный набор настроек
[qeli]
server = vpn.example.com:443
proto = tcp
mode = obfs
front = websocket
obfs = ОБЩИЙ-СЕКРЕТНЫЙ-КЛЮЧ
user = alice
pass = ••••••••
key = 33f399e6…d532450 # закреплённый ключ сервера
# одна ссылка → QR-код → импорт в клиент
qeli://alice:pass@vpn.example.com:443
?proto=tcp
&mode=obfs
&front=websocket
&obfs=ОБЩИЙ-СЕКРЕТНЫЙ-КЛЮЧ
&sni=www.google.com
&key=33f399e6…d532450
# создаётся в панели управления или командой:
$ qeli add-client alice
Весь код открыт — протокол, сервер и три клиента. Изучайте, собирайте сами, сообщайте о проблемах и предлагайте улучшения.
Полноценный self-host VPN с собственным сетевым протоколом и встроенной маскировкой трафика — под HTTPS, WebSocket, QUIC и REALITY.
$ git clone https://github.com/qeli-vpn/qeli.git
Соберите программу, задайте настройки и раздайте ссылки для подключения. Одна служба — TCP, UDP, REALITY и панель управления через браузер.
$ cargo build --release # собрать программу
$ qeli server --config server.conf # запустить сервер
$ qeli add-client alice # выдать ссылку клиенту