Розбір протоколу · 1 хв читання

UDP через SOCKS5: як це працює (ігри, VoIP, QUIC)

Більшість знає, що SOCKS5 передає TCP. Менше хто знає, що він уміє і UDP — трафік ігор, VoIP та QUIC. Розбираємо, як працює команда UDP ASSOCIATE і чому важлива підтримка і з боку клієнта, і з боку сервера.

SOCKS5 — це не лише TCP-ретранслятор

Звичне уявлення про проксі — це TCP-ретранслятор: відкрив з'єднання, прогнав байти, закрив. Так працюють HTTP, HTTPS і SSH. Але величезна частка трафіку реального часу — онлайн-ігри, голосові й відеодзвінки, а дедалі більше й сам веб через QUIC — іде поверх UDP, який не має з'єднань і працює пакетами. SOCKS5 — один із небагатьох проксі-протоколів, здатних його нести, через окрему команду UDP ASSOCIATE. SOCKS4 і звичайні HTTP-проксі так не вміють узагалі.

Якщо розібратися в механізмі, стає зрозуміло і чому це потужна річ, і чому вона так часто не працює через випадковий проксі.

Як насправді працює UDP ASSOCIATE

Ретрансляція UDP у SOCKS5 складається з керуючого каналу й окремого шляху для даних. Спершу клієнт відкриває звичайне TCP-з'єднання до проксі й надсилає запит UDP ASSOCIATE. Проксі відповідає IP-адресою і портом — це UDP-точка ретрансляції, яку він щойно відкрив для цієї сесії. Далі клієнт шле свої UDP-датаграми на цю точку, загортаючи кожну в невеликий заголовок SOCKS із кінцевим призначенням, а проксі пересилає їх далі й повертає відповіді назад.

Ключове: керуюче TCP-з'єднання має лишатися відкритим усю сесію — щойно воно закривається, проксі розбирає UDP-ретрансляцію. Тобто UDP-сесія в SOCKS5 — це насправді два пов'язані з'єднання: TCP, що тримає сесію живою, і потік даних по UDP. Саме тому наївні клієнти, які відкривають лише UDP-бік, падають. Це і є механіка, на якій через SOCKS5-проксі ганяють QUIC, VoIP (RTP), DNS-запити та ігрові протоколи.

Чому воно часто не працює і що підтримує s4m

Два чесні застереження. Перше: UDP мають підтримувати обидва боки — ваша клієнтська бібліотека має реалізовувати UDP ASSOCIATE (багато хто цього не робить: звичайні стеки для HTTP-скрапінгу цього не торкаються взагалі), а сервер проксі має дозволяти ретрансляцію UDP. Друге: UDP через проксі додає затримку, а NAT чи файрволи між вами й точкою ретрансляції можуть його різати, тож продуктивність у реальному часі ніхто не гарантує. Для ігор, чутливих до затримки, зазвичай краще підходить VPN з повним тунелем на WireGuard, ніж UDP поверх SOCKS.

Проксі s4m — це SOCKS5 з автентифікацією на proxy.s4m.online:1080: для TCP-навантажень вони підходять напряму, а там, де вашому клієнту й задачі справді потрібна ретрансляція UDP, саме SOCKS5 робить її можливою. Але якщо справжня мета — пустити гру чи дзвінок цілком, разом з UDP, через один вихід, беріть VPN. Поведінку протоколів перевіряйте через API та інструменти.

FAQ

Відповіді на питання

Чи може SOCKS5-проксі нести ігровий трафік або VoIP?

У принципі так — через команду UDP ASSOCIATE, яка ретранслює UDP-датаграми. Але ретрансляцію UDP мають підтримувати і ваш клієнт, і проксі, а зайвий хоп додає затримку. Для ігор і дзвінків, критичних до затримки, зазвичай краще підходить VPN з повним тунелем на WireGuard, ніж UDP поверх SOCKS5.

Чому UDP не працює через мій SOCKS5-проксі?

Зазвичай тому, що один із боків цього не вміє. Багато клієнтських бібліотек реалізують лише TCP, а частина проксі-серверів забороняє ретрансляцію UDP. До того ж UDP ASSOCIATE вимагає, щоб керуюче TCP-з'єднання лишалося відкритим усю сесію: закрилося воно — і UDP-ретрансляцію розібрано.

SOCKS5 — для TCP, VPN — для всього

SOCKS5 з автентифікацією на proxy.s4m.online:1080 для TCP-навантажень — і повний тунель WireGuard/OpenVPN, коли через один вихід має пройти кожен пакет, разом з UDP.

Цю сторінку знаходять за запитами

Реальні пошукові фрази, на які відповідає ця сторінка — за посиланнями відкриються матеріали, що розкривають тему глибше.