# Лабораторный бенчмарк VPN-протоколов — Qeli 0.8.0 Период прогона: **2026-09-01T17:05:33Z — 2026-09-02T05:20:05Z (UTC)**. Статус данных: **complete**. Этот документ фиксирует завершённый лабораторный прогон, методику, параметры конфигураций и результаты. Throughput измерен `iperf3`. Признаки H/B/T/A описывают включённые механизмы маскировки и результаты preflight/PCAP, но не измеряют вероятность классификации внешним DPI. ## 1. Фактическая сводка - Полный `rep1`: **34** доступных режимов. `rep2` и `rep3`: **25** masked-режимов. **9** control-режимов по плану имеют только `n=1`. - Предварительный dual-stack gate новых профилей: **19/19**. - Qeli: **12/12** профилей дали runtime-маркер `PACKET_MUX_V1 active ... policy=required`. - Среднее TCP `P=4` по всем 12 Qeli-профилям: **1220 Mbit/s**. Для каждого режима сначала взяты медианы повторов четырёх направлений, затем рассчитано среднее по режимам. - Максимальный средний TCP `P=4` всего набора: **WireGuard plain — 3161 Mbit/s**. - Максимальный средний TCP `P=4` среди masked-режимов: **AmneziaWG full 3.1 — 2820 Mbit/s**. - Из **100** направлений masked-режимов ставка `rep1` UDP ceiling подтвердилась с loss ≤1% во всех трёх повторах для **54** направлений; для **46** направлений получено меньше 3/3. По Qeli: **24/48** направлений с подтверждением 3/3, суммарно **113/144** чистых окон на ставке `rep1` ceiling. - Baseline drift после матрицы: upload **+1.48%**, download **-1.71%**. Автоматического порога отбраковки не применялось. ### 1.1. Сводные агрегаты | Группа | Режимов | TCP P=4, Mbit/s | UDP rep1 ceiling, Mbit/s | | --- | --- | --- | --- | | Qeli: быстрые TCP-профили | 5 | 1767 | 1365 | | Qeli: тяжёлые TCP-профили | 3 | 1274 | 1048 | | Qeli: нативные UDP-профили | 4 | 496 | 409 | | AmneziaWG full 3.1 | 1 | 2820 | 1256 | | Xray VLESS TLS/REALITY + Vision | 2 | 995 | 347 | | Hysteria 2 QUIC TLS/Salamander | 2 | 947 | 375 | | OpenVPN с обёртками | 6 | 310 | 289 | | WireGuard с обёртками | 2 | 452 | 403 | `TCP P=4` в этой таблице — среднее по входящим режимам, где значение режима является средним четырёх направлений из медиан повторов. `UDP rep1 ceiling` — среднее предложенных ставок, найденных в `rep1`, по IPv4/IPv6 и upload/download; это не средний фактический goodput. Группы не имеют одинаковой глубины H/B/T/A, поэтому таблица фиксирует производительность выбранных конфигураций, а не рейтинг скрытности. Состав Qeli-групп: быстрые TCP — `tcp-plain-raw`, `tcp-faketls`, `tcp-padding`, `tcp-frag`, `tcp-reality`; тяжёлые TCP — `tcp-obfs`, `tcp-reality-tls`, `tcp-obfs-awg`; нативные UDP — `udp-faketls`, `udp-padding`, `udp-quic`, `udp-faketls-awg`. OpenVPN с обёртками включает stunnel DTLS/TLS, XOR UDP/TCP и Cloak TCP/UDP; WireGuard с обёртками — wg-obfuscator STUN и Cloak experimental. ## 2. Лаборатория и чистота прогона - VM server: `10.66.116.10`; VM client: `10.66.116.11`. - Обе VM: Debian, kernel `6.12.105+deb13-amd64`, **2 vCPU**, **2 GiB RAM**. - Перед числовым проходом выполнен полный синхронный reboot обеих VM. Boot ID server: `cf04df08-770d-4ce9-a32a-222e5dd7c319`; client: `ffbf54d8-6c2d-46ed-89ba-36db7b2b24e7`. - До baseline остановлены фоновые VPN-службы и системные maintenance timers; runtime-маскированы автозапуски Qeli и Android emulator/ADB. - На обеих VM доказано отсутствие `qemu-system`, `adb` и `netem`; IPv6 policy INPUT/FORWARD/OUTPUT — `ACCEPT`. - После очистки оставалось более 21 GiB на каждой VM. Никакие исходники или пользовательские конфиги при очистке не удалялись. - Runtime sysctl одинаков на обеих сторонах: `rmem_max/wmem_max=16777216`, default buffers `1048576`, `netdev_max_backlog=5000`, UDP min buffers `16384`. - Egress qdisc внешних virtio-интерфейсов оставлен в штатном состоянии лаборатории: server `fq_codel`, client `fq`. Это состояние неизменно для всех режимов и совпадает с предыдущим циклом, но upload и download следует сравнивать внутри своего направления, а не трактовать их разницу только как свойство VPN. - Измерения выполнены внутри одного лабораторного Proxmox-стенда между двумя VM. Задержка, jitter и потери WAN не эмулировались; результаты характеризуют пропускную способность и стоимость обработки в этих условиях. Артефакт полной перезагрузки: `release\competitor_repeat_080_reboot_2026-09-01.json`. ## 3. Алгоритм измерений 1. На новых boot ID выполнен прямой baseline по внешнему адресу `10.66.116.10`: пять повторов upload/download, 12 секунд, TCP, один поток. 2. `rep1` — полный проход 34 режимов в прямом порядке. `rep2` — сокращённый проход 25 masked-режимов в обратном порядке; `rep3` — тот же сокращённый набор в детерминированно перемешанном порядке. Это снижает систематический эффект нагрева и кешей. 3. В каждом предусмотренном политикой повторе режим поднимался заново. Control-режимы выполнялись один раз; masked-режимы — три раза. Перед следующим режимом удалялись процессы, TUN/WG/AWG-интерфейсы, policy routing и XFRM state. 4. После поднятия обязательно проходили IPv4 и IPv6 ping. Для Qeli дополнительно проверялся обязательный runtime-маркер Recordizer. 5. TCP: IPv4/IPv6 × upload/download. В полном `rep1` измерялись `P=1` и `P=4`; в сокращённых `rep2/rep3` — только `P=4`. Окно 15 с, первые 3 с исключены `-O 3`. 6. UDP: payload 1200 bytes, окно 15 с и warm-up 3 с. В `rep1` обязательны 300/450/600 Mbit/s; затем offered load повышается вплоть до фактической границы (safety ceiling 30 Gbit/s), а граница loss ≤1% уточняется до шага 25 Mbit/s. В `rep2/rep3` проверяются ровно две точки каждого направления: найденный в `rep1` clean ceiling и первая не прошедшая ступень. 7. `UDP rep1 ceiling` — найденная в полном проходе offered rate. Формат `[pass/n; median loss]` показывает, сколько проверок этой же точки осталось в пределах loss ≤1%. Для controls это `n=1`, для masked — `n=3`. Если `pass1`; `—` у controls означает отсутствие повторов, а не нулевой разброс. ## 7. CPU, RSS и kernel drops | Продукт / режим | TCP P=4 CPU VM S/C, % | UDP ref CPU VM S/C, % | TCP P=4 VPN CPU S/C, % VM | UDP ref VPN CPU S/C, % VM | RSS max S/C, MiB | softnet drops S/C | | --- | --- | --- | --- | --- | --- | --- | | WireGuard plain | 80.1 / 82.3 | 76.7 / 78.9 | 0.0 / 0.0 | 0.0 / 0.0 | 0.0 / 0.0 | 0 / 0 | | WireGuard + wg-obfuscator STUN | 69.9 / 71.5 | 62.3 / 61.6 | 32.2 / 32.6 | 25.6 / 25.1 | 1.1 / 1.1 | 0 / 0 | | AmneziaWG mask-off | 78.7 / 81.7 | 78.9 / 78.4 | 0.0 / 0.0 | 0.0 / 0.0 | 0.0 / 0.0 | 0 / 0 | | AmneziaWG full 3.1 | 75.9 / 78.3 | 76.0 / 74.3 | 0.0 / 0.0 | 0.0 / 0.0 | 0.0 / 0.0 | 0 / 0 | | OpenVPN UDP userspace | 55.5 / 52.2 | 52.2 / 48.8 | 45.7 / 41.7 | 36.5 / 33.0 | 9.8 / 9.6 | 0 / 0 | | OpenVPN UDP + DCO | 57.6 / 54.9 | 38.3 / 38.6 | 0.0 / 0.0 | 0.0 / 0.0 | 9.8 / 9.6 | 0 / 0 | | OpenVPN UDP + stunnel DTLS | 77.7 / 55.9 | 72.4 / 53.8 | 71.3 / 48.7 | 62.9 / 42.3 | 19.9 / 19.5 | 0 / 0 | | OpenVPN TCP userspace | 55.7 / 57.8 | 57.8 / 58.8 | 45.0 / 43.4 | 37.7 / 38.0 | 9.9 / 9.7 | 0 / 0 | | OpenVPN TCP + stunnel TLS 1.3 | 85.0 / 85.2 | 69.9 / 69.6 | 73.5 / 74.3 | 56.3 / 54.3 | 20.0 / 19.6 | 0 / 0 | | IPsec strongSwan ESP | 64.2 / 60.8 | 39.5 / 39.3 | 0.0 / 0.0 | 0.0 / 0.0 | 10.3 / 10.4 | 0 / 0 | | IPsec strongSwan NAT-T | 64.9 / 60.5 | 37.0 / 36.1 | 0.0 / 0.0 | 0.0 / 0.0 | 10.3 / 10.4 | 0 / 0 | | Xray VLESS + TLS + Vision (TUN) | 22.1 / 75.8 | 57.4 / 62.3 | 15.2 / 65.7 | 42.1 / 46.5 | 51.3 / 97.9 | 0 / 0 | | Xray VLESS + REALITY + Vision (TUN) | 21.0 / 76.1 | 59.8 / 62.9 | 15.2 / 65.8 | 44.2 / 47.4 | 55.2 / 99.1 | 0 / 0 | | Hysteria 2 QUIC TLS (TUN) | 69.1 / 89.8 | 71.1 / 69.4 | 62.7 / 80.0 | 56.9 / 56.1 | 109.9 / 116.7 | 0 / 0 | | Hysteria 2 QUIC + Salamander (TUN) | 68.1 / 86.4 | 71.5 / 70.0 | 58.7 / 76.6 | 57.2 / 57.3 | 43.0 / 59.6 | 0 / 0 | | OpenVPN-XOR build UDP, scramble off | 56.3 / 50.8 | 51.6 / 46.4 | 46.6 / 41.6 | 33.7 / 30.5 | 9.8 / 9.6 | 0 / 0 | | OpenVPN UDP + XOR | 54.5 / 53.2 | 52.9 / 51.9 | 46.1 / 43.4 | 40.2 / 35.3 | 9.8 / 9.6 | 0 / 0 | | OpenVPN-XOR build TCP, scramble off | 55.2 / 55.8 | 60.9 / 61.3 | 44.3 / 43.7 | 39.5 / 42.1 | 9.9 / 9.7 | 0 / 0 | | OpenVPN TCP + XOR | 53.4 / 54.9 | 58.4 / 58.8 | 43.2 / 44.7 | 41.5 / 41.3 | 10.0 / 9.6 | 0 / 0 | | OpenVPN TCP + Cloak | 77.3 / 78.0 | 71.5 / 69.8 | 71.5 / 72.6 | 58.4 / 56.6 | 123.7 / 90.6 | 0 / 0 | | OpenVPN UDP + Cloak (experimental) | 81.4 / 82.0 | 77.6 / 77.4 | 76.3 / 76.6 | 64.9 / 64.0 | 37.4 / 33.7 | 0 / 0 | | WireGuard + Cloak (experimental) | 81.9 / 83.2 | 73.7 / 75.9 | 47.6 / 51.0 | 36.8 / 41.1 | 25.2 / 61.5 | 0 / 0 | | Qeli 0.8.0 tcp-plain-raw + Recordizer | 72.7 / 81.6 | 70.8 / 72.5 | 62.8 / 70.6 | 47.5 / 49.5 | 117.5 / 93.6 | 0 / 0 | | Qeli 0.8.0 tcp-faketls + Recordizer | 74.1 / 82.1 | 69.6 / 70.9 | 64.1 / 70.4 | 46.0 / 48.5 | 118.5 / 94.1 | 0 / 0 | | Qeli 0.8.0 tcp-padding + Recordizer | 73.8 / 83.1 | 70.2 / 71.1 | 63.6 / 70.6 | 46.2 / 48.6 | 116.7 / 93.9 | 0 / 0 | | Qeli 0.8.0 tcp-frag + Recordizer | 76.0 / 82.7 | 71.3 / 71.0 | 65.6 / 71.2 | 47.8 / 49.2 | 117.4 / 94.1 | 0 / 0 | | Qeli 0.8.0 tcp-obfs + Recordizer | 71.5 / 80.1 | 67.5 / 71.8 | 61.9 / 70.5 | 48.3 / 52.3 | 120.4 / 97.7 | 0 / 0 | | Qeli 0.8.0 tcp-reality + Recordizer | 74.7 / 82.3 | 69.5 / 70.7 | 64.4 / 70.3 | 46.2 / 49.1 | 115.3 / 95.3 | 0 / 0 | | Qeli 0.8.0 tcp-reality-tls + Recordizer | 62.7 / 70.9 | 70.4 / 71.8 | 54.9 / 61.8 | 50.1 / 52.0 | 123.5 / 106.8 | 0 / 0 | | Qeli 0.8.0 udp-faketls + Recordizer | 71.7 / 78.5 | 65.7 / 67.5 | 64.8 / 70.3 | 49.7 / 52.2 | 160.9 / 53.0 | 0 / 0 | | Qeli 0.8.0 udp-padding + Recordizer | 72.1 / 79.4 | 68.0 / 70.2 | 65.3 / 71.1 | 51.4 / 54.6 | 170.9 / 51.8 | 0 / 0 | | Qeli 0.8.0 udp-quic + Recordizer | 71.8 / 79.6 | 66.6 / 68.4 | 64.7 / 70.9 | 50.1 / 52.6 | 168.7 / 51.5 | 0 / 0 | | Qeli 0.8.0 tcp-obfs-awg + Recordizer | 70.5 / 80.5 | 66.2 / 70.6 | 62.4 / 71.4 | 47.2 / 50.6 | 122.2 / 97.7 | 0 / 0 | | Qeli 0.8.0 udp-faketls-awg + Recordizer | 72.2 / 80.8 | 67.5 / 69.0 | 63.9 / 71.7 | 50.8 / 53.5 | 165.2 / 51.8 | 0 / 0 | CPU VM — общая загрузка двухъядерной VM. Таблица агрегирует повторяемые TCP `P=4` и UDP-окна на `rep1 ceiling`. VPN userspace CPU не отражает kernel datapath WireGuard/AWG; для них основная метрика — CPU VM. RSS суммирует underlying VPN и оболочку. `softnet drops` суммированы по всем TCP-окнам и UDP ceiling; ноль не исключает потерь внутри tunnel protocol, отражённых iperf. ## 8. Парная цена маскировки | Парное сравнение | Контроль TCP P=1 rep1 avg | Маскированный TCP P=1 rep1 avg | Изменение | | --- | --- | --- | --- | | WireGuard: plain → wg-obfuscator STUN | 2888 | 515 | -82.2% | | AmneziaWG: mask-off → full 3.1 | 2988 | 2664 | -10.8% | | OpenVPN XOR UDP: patched control → XOR | 342 | 284 | -17.0% | | OpenVPN XOR TCP: patched control → XOR | 351 | 269 | -23.3% | | OpenVPN TCP: userspace → stunnel TLS | 358 | 415 | +15.9% | | Xray: VLESS TLS Vision → REALITY Vision | 1062 | 1053 | -0.9% | | Hysteria 2: QUIC TLS → Salamander | 1244 | 734 | -41.0% | Парное сравнение использует только одинаковые окна `rep1`, TCP `P=1`, IPv4/IPv6 и upload/download. Это сохраняет равный `n=1` для controls и masked-профилей; для устойчивости masked-режимов отдельно приведён CV повторяемого TCP `P=4`. ## 9. Конфигурации режимов ### 9.1. Общая криптография - OpenVPN userspace/XOR/Cloak: TLS 1.3, X25519, data cipher `CHACHA20-POLY1305`, `tun-mtu 1400`, `mssfix 1360`. XOR выполняется поверх нормальной AEAD-защиты; `cipher none` не использовался. - OpenVPN DCO: тот же согласованный набор cipher/TLS, datapath kernel DCO. - strongSwan: ChaCha20-Poly1305; режим DTLS исключён после доказанного preflight-дефекта IPv4, а не заменён фиктивным числом. - Xray: VLESS Vision через TUN; TLS-вариант с TLS 1.3/browser fingerprint, REALITY-вариант с `www.cloudflare.com:443`, одинаковый TUN MTU 1400. - Hysteria 2: QUIC/TLS и QUIC+Salamander; bandwidth limit поднят до **10 Gbit/s**, то есть выше фактической tunnel capacity стенда. ### 9.2. OpenVPN-XOR и Cloak - XOR: OpenVPN 2.7.6 с пятью патчами Tunnelblick commit `c9c73dca6c99afbba14b53e291b18f044210a1b5`; `scramble obfuscate`; DCO выключен. Каждая XOR-строка имеет парный контроль на том же patched binary без `scramble`. - Cloak 2.12.0: `Transport=direct`, `BrowserSig=chrome`, `NumConn=4`, `EncryptionMethod=chacha20-poly1305`, `ServerName=RedirAddr=www.cloudflare.com`, `KeepAlive=0`, внешний TCP/443. - OpenVPN UDP+Cloak и WireGuard+Cloak помечены experimental. PCAP preflight доказал отсутствие прямого UDP bypass: между `.11` и `.10` были только четыре Cloak TCP-соединения к 443. - Неавторизованный HTTPS probe всех Cloak-схем получил HTTP 200 от `RedirAddr`, не upstream VPN. ### 9.3. Qeli 0.8.0 и обязательный Recordizer Во всех 12 Qeli-профилях `obf.recordizer.policy=required`. Если согласование Recordizer не произошло, соединение не должно перейти к измерениям. Preflight подтвердил активацию во всех 12 случаях. - `obf.recordizer.policy = required` - `obf.recordizer.batch.delay_min_ms = 2` - `obf.recordizer.batch.delay_max_ms = 8` - `obf.recordizer.batch.max_packets = 16` - `obf.recordizer.batch.max_queue_bytes = 262144` - `obf.recordizer.record.max_payload_bytes = 0` - `obf.recordizer.record.small_min_ratio = 0.25` - `obf.recordizer.record.small_max_ratio = 0.875` - `obf.recordizer.record.full_probability = 0.72` - `obf.recordizer.fragment.enabled = true` - `obf.recordizer.fragment.reassembly_timeout_ms = 3000` - `obf.recordizer.fragment.max_inflight_packets = 64` - `obf.recordizer.fragment.max_reassembly_bytes = 4194304` - `obf.recordizer.fragment.max_fragments_per_packet = 64` Дополнительные параметры профиля: отдельный padding 32–256 bytes с probability 0.8, если он включён; heartbeat 15 s; AWG `jc=4`, `jmin=40`, `jmax=200`; dual-stack pools `10.9.0.0/24 + fd42:206:1::/64` для TCP и `10.10.0.0/24 + fd42:206:2::/64` для UDP; TUN MTU 1400. Test credentials, identity keys, XOR/Cloak secrets и Qeli obfs key в отчёт не экспортируются. ### 9.4. WireGuard, AmneziaWG, strongSwan, Xray и Hysteria 2 - WireGuard plain: MTU 1400, `PersistentKeepalive=25`. В профиле wg-obfuscator внутренний WireGuard имеет MTU 1380 и локальный endpoint; внешний обфускатор использует UDP/443, client `masking=STUN`, server `masking=AUTO`, `allow-clean=false`, `max-dummy=4`, `idle-timeout=300`. - AmneziaWG mask-off: MTU 1380, `Jc/Jmin/Jmax=0`, `S1..S4=0`, фиксированные `H1..H4=1..4`, `RandomTrailers=off`, `AdvancedSecurity=off`. Full 3.1: MTU 1360, `Jc=8`, `Jmin=40`, `Jmax=70`, `S1/S2/S3/S4=86/73/64/32`, заданные нестандартные `H1..H4`, `HeaderProtectionKey`, `ContentPaddingAddition=16-64`, `RandomTrailers=on`, `AdvancedSecurity=on`. - strongSwan: IKEv2, PSK, tunnel mode, `mobike=no`, без reauth/rekey во время теста. Использованы `chacha20poly1305-prfsha256-curve25519` для IKE и `chacha20poly1305-curve25519` для ESP; ESP и NAT-T различаются `encap=no/yes`. - Xray: VLESS с `xtls-rprx-vision`, transport `raw`, TUN MTU 1400, dual-stack routes. TLS-профиль использует TLS 1.3 и fingerprint Chrome; REALITY — fingerprint Chrome, target/SNI `www.cloudflare.com:443`, short ID и X25519 keypair. Порты стенда: 24443 для TLS и 24444 для REALITY. - Hysteria 2: TUN MTU 1400, QUIC, окна stream 8 MiB и connection 20 MiB, `maxIncomingStreams=1024`, PMTUD включён, keepalive 10 s на клиенте. Профили различаются наличием Salamander; порты 24445/24446. Во время preflight лимиты `up/down` увеличены с 1 до 10 Gbit/s, чтобы конфигурационный предел не ограничивал измерение. TLS-клиент использовал лабораторный сертификат с `insecure=true`; это параметр тестового стенда, а не рекомендация для production. - Все WG/AWG, Xray, Hysteria и Qeli конфигурации маршрутизировали одинаковые контрольные IPv4/IPv6 назначения. Секретные ключи и пароли в отчёт не включены. ## 10. PCAP/preflight и ограничения DPI-вывода - Все 19 новых/изменённых профилей прошли IPv4/IPv6 TCP/UDP smoke: OpenVPN-XOR (4), Cloak (3), Qeli Recordizer (12). - PCAP Cloak содержал только TCP/443; прямых UDP/11965 или UDP/51850 между VM не было. - Первые OpenVPN payload bytes в patched-control содержали узнаваемую исходную структуру, а `scramble obfuscate` изменял их; при этом аутентификация и `CHACHA20-POLY1305` оставались включены. - H/B/T/A — техническая оценка включённых механизмов, а не вероятность обнаружения. Для публикационного утверждения «не определяется DPI» нужны независимые классификаторы, разные сети, длительные потоки и active-probe corpus. Здесь корректно утверждать только, какие поверхности маскируются и какой ценой throughput/CPU. ### 10.1. Ограничения интерпретации - Control-режимы имеют `n=1`; их межпрогонный разброс не измерен. Masked-режимы имеют `n=3` только для TCP `P=4` и проверочных UDP-точек; TCP `P=1` и UDP 600 относятся к `rep1`. - Для UDP сокращённые повторы проверяли найденную ставку и первую не прошедшую ступень, но не искали заново более низкий устойчивый потолок. Поэтому `pass, Tunnelblick XOR warning , Cloak , Xray , Hysteria , strongSwan .