SOCKS4a Проксі
Що таке SOCKS4a
SOCKS4a — це розширення протоколу SOCKS4, запропоноване Ін-Да Лі (Ying-Da Lee). Ключова відмінність від оригінального SOCKS4 полягає в тому, що клієнт може надсилати доменне ім'я замість IP-адреси, а розділення DNS відбувається на стороні проксі-сервера.
У стандартному SOCKS4 клієнт повинен сам розділити доменне ім'я в IP-адресу перед надсиланням запиту. Це створює проблему: DNS-запит йде безпосередньо від клієнта, розкриваючи інформацію про відвідувані веб-сайти. SOCKS4a вирішує цю проблему.
Проблема DNS у SOCKS4
Як працює SOCKS4
- Клієнт хоче підключитися до example.com
- Клієнт робить DNS-запит безпосередньо (не через проксі)
- Отримує IP 93.184.216.34
- Надсилає команду проксі: "підключитися до 93.184.216.34:80"
- Проксі встановлює TCP-з'єднання
Проблема: DNS-запит на кроці 2 є видимим для інтернет-провайдера, DNS-сервера та будь-кого, хто моніторить трафік. Це витік DNS.
Як працює SOCKS4a
- Клієнт хоче підключитися до example.com
- Клієнт надсилає команду проксі: "підключитися до example.com:80"
- Проксі сам розділяє example.com в IP
- Проксі встановлює TCP-з'єднання
DNS-запит повністю прихований за проксі.
Технічна реалізація
Формат запиту SOCKS4
| Поле | Розмір | Опис |
|---|---|---|
| VER | 1 байт | Версія (0x04) |
| CMD | 1 байт | Команда (0x01 = CONNECT) |
| DSTPORT | 2 байти | Порт призначення |
| DSTIP | 4 байти | IP призначення |
| USERID | змінний | Рядок ідентифікатора |
| NULL | 1 байт | 0x00 (завершення) |
Формат запиту SOCKS4a
Формат той самий, але з хитрістю: поле DSTIP містить недійсну IP-адресу форми 0.0.0.x (де x > 0). Після нульового термінатора USERID додається доменне ім'я:
| Поле | Розмір | Опис |
|---|---|---|
| VER | 1 байт | 0x04 |
| CMD | 1 байт | 0x01 |
| DSTPORT | 2 байти | Порт призначення |
| DSTIP | 4 байти | 0.0.0.1 (маркер SOCKS4a) |
| USERID | змінний | Рядок ідентифікатора |
| NULL | 1 байт | 0x00 |
| DOMAIN | змінний | Доменне ім'я (example.com) |
| NULL | 1 байт | 0x00 |
Проксі бачить IP-адресу форми 0.0.0.x і розуміє, що після USERID слідує доменне ім'я для розділення.
SOCKS4 проти SOCKS4a проти SOCKS5
| Параметр | SOCKS4 | SOCKS4a | SOCKS5 |
|---|---|---|---|
| DNS на стороні проксі | Ні | Так | Так |
| Аутентифікація | Ні | Ні | Так |
| UDP | Ні | Ні | Так |
| IPv6 | Ні | Ні | Так |
| Команда BIND | Так | Так | Так |
| Команда ASSOCIATE | Ні | Ні | Так |
Переваги SOCKS4a
1. Усуває витік DNS
Головна перевага полягає в тому, що клієнт не робить DNS-запитів безпосередньо. Вся DNS-активність прихована за проксі.
2. Простота протоколу
SOCKS4a простіший у реалізації, ніж SOCKS5. Немає фази аутентифікації, підтримки UDP — лише TCP CONNECT.
3. Зворотна сумісність
Клієнт SOCKS4a може працювати з проксі SOCKS4a, а формат запиту є зворотно сумісним з SOCKS4.
4. Доступ до .onion та внутрішніх доменів
Оскільки DNS розділяється на стороні проксі, SOCKS4a може використовуватися для доступу до доменів, які не розділяються публічними DNS (наприклад, .onion через Tor).
Обмеження
1. Без аутентифікації
SOCKS4a не підтримує аутентифікацію. Будь-хто, хто знає адресу проксі, може ним скористатися.
2. Без UDP
Підтримуються лише TCP-з'єднання. DNS-запити, VoIP та ігровий трафік через UDP не підтримуються.
3. Без IPv6
Поле DSTIP має 4 байти, лише для IPv4.
4. Застарілий протокол
SOCKS5 замінив SOCKS4a, надаючи всі його можливості плюс аутентифікацію, UDP та IPv6.
Коли використовувати SOCKS4a
- Застарілі системи — старіше програмне забезпечення, яке не підтримує SOCKS5
- Прості сценарії — коли аутентифікація та UDP не потрібні
- Tor-з'єднання — Tor підтримує SOCKS4a для розділення .onion
- Мінімальні накладні витрати — коли важлива мінімальна затримка протоколу
Підтримка програмного забезпечення
| Програма | SOCKS4a |
|---|---|
| curl | Так (--socks4a) |
| Tor | Так (основний протокол) |
| ProxyChains | Так |
| Firefox | Через network.proxy.socks_remote_dns |
| PuTTY | Так |
Висновок
SOCKS4a був важливим еволюційним кроком від SOCKS4, вирішивши проблему витоків DNS. Хоча SOCKS5 є стандартом сьогодні, розуміння SOCKS4a корисне для роботи зі застарілими системами та для розуміння еволюції проксі-протоколів.