Skip to content

Instantly share code, notes, and snippets.

@5HT
Created January 29, 2026 12:39
Show Gist options
  • Select an option

  • Save 5HT/d230186b753552b86081f563ff86bca6 to your computer and use it in GitHub Desktop.

Select an option

Save 5HT/d230186b753552b86081f563ff86bca6 to your computer and use it in GitHub Desktop.
dpi.txt
Так, питання досить цікаве й актуальне — особливо в контексті сучасних DPI-систем, які активно використовують сигнатурний аналіз, машинне навчання та активне пробінг для виявлення навіть добре зашифрованого трафіку.
### Основні способи обходу DPI для потокового шифрування каналів (stream ciphers, наприклад ChaCha20, AES-CTR тощо)
Потокове шифрування саме по собі не дає автоматичного захисту від DPI, бо сигнатура може бути в handshake, розмірах пакетів, таймінгах, entropy, SNI, JA3 fingerprint тощо. Ось перевірені підходи:
1. **Протокольна обфускація та mimicry**
Роблять трафік схожим на звичайний HTTPS/HTTP/3, WebRTC, відеострімінг тощо.
- uTLS (або utls) — імітація TLS-фінгерпринтів реальних браузерів (Chrome, Firefox, Safari). Змінює порядок розширень, ciphersuites, curves тощо.
- REALITY (в Xray/V2Ray) — усуває серверний TLS-фінгерпринт, використовує shortId (короткі випадкові ідентифікатори) та fallback на реальний сайт. Сервер аналізує вхідний трафік і динамічно адаптується, щоб виглядати як звичайний HTTPS навіть під пробінгом DPI.<grok:render card_id="6bf8ae" card_type="citation_card" type="render_inline_citation">
<argument name="citation_id">36</argument>
</grok:render><grok:render card_id="87a8fc" card_type="citation_card" type="render_inline_citation">
<argument name="citation_id">39</argument>
</grok:render>
- Hysteria2 (на базі QUIC) — маскування під HTTP/3, Salamander-obfuscation (перетворює пакети на випадкові байти без патернів), padding і congestion control, що ускладнює виявлення за розмірами/таймінгами.<grok:render card_id="595c83" card_type="citation_card" type="render_inline_citation">
<argument name="citation_id">41</argument>
</grok:render>
2. **Додавання шуму та randomization**
- Random padding (змінні розміри пакетів).
- Traffic shaping: випадкові затримки, bursty patterns.
- Split tunneling або multipath — розбиття трафіку на кілька шляхів.
Це робить сигнатуру менш стабільною для ML-моделей DPI.
3. **Pluggable transports / додаткові шари**
- obfs4, meek, snowflake (Tor).
- Shadowsocks + v2ray-plugin (websocket, http-obfs).
- Obfsproxy, udp2raw, kcptun тощо для WireGuard.
### Як змінити сигнатуру «на льоту» без зміни параметрів шифрованого каналу (ключ, nonce/IV, алгоритм шифрування)
Це найскладніша частина, бо класичні DPI-сигнатури «забиваються» саме в handshake або перших пакетах. Якщо канал уже встановлений і DPI його розпізнав — змінити сигнатуру без переривання практично неможливо. Але є бачення та реалізації, як зробити систему стійкою до оновлення бази сигнатур:
1. **Polymorphic / programmable obfuscation**
Концепція Marionette (2015, але актуальна): трафік генерується через probabilistic automata + DSL. Дозволяє динамічно змінювати формат повідомлень, статистику, таймінги, навіть під час сесії, без зміни ключів шифрування. Плагіни (наприклад FTE) дозволяють runtime-адаптацію. Підходить для stream cipher (можна інтеграція з obfs4-подібними).<grok:render card_id="bfee97" card_type="citation_card" type="render_inline_citation">
<argument name="citation_id">45</argument>
</grok:render>
Це найближче до «на льоту» — модель може мати кілька варіантів поведінки й переходити між ними.
2. **Dynamic negotiation або multi-mode**
- У REALITY + Vision (XTLS) клієнт і сервер можуть мати кілька shortId або fingerprint-профілів. Сервер динамічно обирає поведінку залежно від вхідного трафіку (наприклад, імітує різні сайти або браузери). Якщо один fingerprint заблокували — конфіг оновлюється швидко, але для існуючої сесії це не завжди seamless.<grok:render card_id="d12fb6" card_type="citation_card" type="render_inline_citation">
<argument name="citation_id">30</argument>
</grok:render>
- Frequent protocol switching: клієнт автоматично перемикається між VLESS-Reality → Hysteria2 → TUIC → Shadowsocks-obfs, якщо виявлено блокування (наприклад, за RTT або packet loss).
3. **Adaptive та reactive методи**
- Додавання adaptive padding / timing randomization під час сесії (Hysteria2 це частково робить через QUIC congestion control).
- Inject fake packets або dummy data для «розмивання» патернів.
- Якщо є side-channel (наприклад, окремий control-канал) — можна домовитися про новий obfuscation seed або mode mid-session.
4. **Найпростіший практичний підхід у 2026**
- Використовувати Xray-core з VLESS + REALITY + uTLS + Vision — зараз це один з найстійкіших варіантів проти DPI (включаючи GFW-подібні).
- Додати кілька fallback-конфігів і автоматичний перемикач (наприклад, через sing-box або clash-meta).
- Якщо сигнатура потрапила в базу — швидко оновити shortId, serverName, public key або fingerprint, і клієнти перез’єднуються (зазвичай за секунди).
Якщо коротко: повноцінна зміна сигнатури «на льоту» без жодного переривання каналу — це поки більше research (Marionette, Geneva тощо), але комбінація REALITY + dynamic ports + randomization + multi-protocol fallback дає дуже високу стійкість. Якщо в тебе конкретний протокол/інструмент (наприклад WireGuard, Xray, Hysteria), скажи — підкажу конфіг або нюанси. Можна в групу кинути — там точно хтось уже тестував під ваші DPI.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment