Как работает механизм TCP/IP стека при сокрытии реального IP через SOCKS5
Содержание
- Как SOCKS5 прячет ваш IP: куда девается TCP/IP стек
- Уровни сокрытия: что видит сервер
- Как работает SOCKS5 на уровне TCP
- Шаг 1: соединение с прокси
- Шаг 2: рукопожатие SOCKS5
- Шаг 3: запрос на соединение
- Шаг 4: теперь шлём HTTP-запрос
- Почему это не скрывает вас полностью
- DNS через SOCKS5: типичная ошибка
- TCP-стек при сокрытии: что происходит на самом деле
- Как проверить, что IP скрыт
- Узнать свой IP через SOCKS5
- Сравнить с прямым запросом
- Когда SOCKS5 не спасает
- Практический пример с curl
- Полный запрос через SOCKS5 с проксированием DNS
- Первый флаг — проксирует IP
- Второй — проксирует DNS-запросы
- Итог: что происходит с вашим IP
Как SOCKS5 прячет ваш IP: куда девается TCP/IP стек
SOCKS5 — не магия. Это просто прокси-протокол, который перекладывает пакеты через чужую машину. Ваш реальный IP не исчезает бесследно — он просто перестаёт быть видимым для конечного сервера.
Уровни сокрытия: что видит сервер
Когда вы шлёте запрос напрямую, сервер видит ваш IP в заголовках IP-пакетов. Через SOCKS5 — видит IP прокси. Весь TCP-стек на вашей машине продолжает работать как обычно. Просто пакеты уходят не на конечный сервер, а на прокси.
Вот что происходит на каждом уровне OSI:
| Уровень OSI | Прямое соединение | Через SOCKS5 |
|------------|------------------|--------------|
| Прикладной | Ваши данные | Ваши данные |
| Транспортный | TCP/UDP | TCP/UDP (туннель) |
| Сетевой | Ваш IP | IP прокси |
| Канальный | Ваш MAC | MAC прокси |
Сервер видит только IP прокси. Всё остальное — ваши данные, протоколы прикладного уровня — остаётся нетронутым.
Как работает SOCKS5 на уровне TCP
SOCKS5 не шифрует трафик. Он просто проксирует. Разберём на примере HTTP-запроса:
Ваш клиент → SOCKS5-прокси → Целевой сервер
1. Клиент устанавливает TCP-соединение с прокси (обычно порт 1080)
2. Отправляет запрос на соединение с целевым сервером
3. Прокси устанавливает TCP-соединение с целевым сервером
4. Прокси пересылает данные между двумя TCP-соединениями
Код на Python для понимания:
```python
import socket
Шаг 1: соединение с прокси
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('proxy_ip', 1080))
Шаг 2: рукопожатие SOCKS5
sock.send(b'\x05\x01\x00') # Версия 5, 1 метод, без аутентификации
response = sock.recv(2) # \x05\x00 - успех
Шаг 3: запрос на соединение
sock.send(b'\x05\x01\x00\x01' + socket.inet_aton('target_ip') + (80).to_bytes(2, 'big'))
response = sock.recv(10) # \x05\x00\x00\x01... - успех
Шаг 4: теперь шлём HTTP-запрос
sock.send(b'GET / HTTP/1.1\r\nHost: target.com\r\n\r\n')
data = sock.recv(4096)
```
Ваш IP остаётся внутри вашей локальной сети. Прокси видит ваш IP, но целевой сервер — нет.
Почему это не скрывает вас полностью
SOCKS5 — это как курьер. Вы передаёте письмо курьеру, он несёт его адресату. Адресат видит курьера, не вас. Но:
- Прокси знает ваш IP
- DNS-запросы могут утекать (если не настроить)
- Ваш интернет-провайдер видит, что вы соединяетесь с прокси
- Содержимое трафика не шифруется (если не использовать TLS поверх)
DNS через SOCKS5: типичная ошибка
По умолчанию SOCKS5 не проксирует DNS. Ваш клиент резолвит доменные имена локально. Это значит:
1. Вы запрашиваете DNS у своего провайдера
2. Узнаёте IP target.com
3. Соединяетесь с прокси
4. Прокси соединяется с IP target.com
Провайдер видит DNS-запрос к target.com. Это дыра. Решение — SOCKS5 с DNS-over-SOCKS или DoH/DoT поверх прокси.
На lexic.ml эта проблема решена — прокси сам резолвит DNS, не отправляя запросы от вашего имени.
TCP-стек при сокрытии: что происходит на самом деле
Ваш TCP-стек не знает, что работает через прокси. Он просто устанавливает TCP-соединение с IP прокси. Всё остальное — прикладной уровень.
Ситуация | Что видит TCP-стек на вашей машине | Что видит TCP-стек на сервере
---------|------------------------------------|-------------------------------
Прямое соединение | SYN → сервер, SYN-ACK ← сервер | SYN ← клиент, SYN-ACK → клиент
Через SOCKS5 | SYN → прокси, SYN-ACK ← прокси | SYN ← прокси, SYN-ACK → прокси
Ваш TCP-стек даже не знает о существовании конечного сервера. Он общается только с прокси.
Как проверить, что IP скрыт
```bash
Узнать свой IP через SOCKS5
curl --socks5 proxy_ip:1080 https://api.ipify.org
Сравнить с прямым запросом
curl https://api.ipify.org
```
Если IP различаются — SOCKS5 работает. Если нет — где-то косяк.
Когда SOCKS5 не спасает
SOCKS5 скрывает ваш IP от конечного сервера. Но не от:
- Вашего провайдера (видит соединение с прокси)
- Самого прокси (видит ваш IP и весь трафик)
- Систем мониторинга на уровне сети (если они анализируют паттерны трафика)
WebRTC, например, может утекать реальный IP независимо от прокси. Это особенность браузеров, а не протокола.
Практический пример с curl
```bash
Полный запрос через SOCKS5 с проксированием DNS
curl --socks5 proxy_ip:1080 \
--socks5-hostname proxy_ip:1080 \
https://example.com
Первый флаг — проксирует IP
Второй — проксирует DNS-запросы
```
Без `--socks5-hostname` DNS запросы уходят локально. С ним — через прокси.
Итог: что происходит с вашим IP
Ваш IP не исчезает. Он просто перестаёт быть видимым для конечного сервера. TCP-стек работает как обычно — устанавливает соединение, шлёт пакеты, получает подтверждения. Только адресатом становится прокси, а не конечный сервер.
SOCKS5 — это костыль для сокрытия IP, а не серебряная пуля. Он решает одну задачу: скрыть ваш IP от сервера. Всё остальное — шифрование, анонимность, защита от провайдера — требует дополнительных инструментов.
Если вам нужно именно скрыть IP — SOCKS5 работает. Если нужно что-то большее — смотрите в сторону VPN или Tor. Но помните: каждый слой защиты добавляет задержку и complexity.