Skip to content

Руководство по настройке SOCKS5: браузеры, SSH, curl, git и Python

Практическое руководство по настройке SOCKS5 для Firefox, macOS, Linux, динамического перенаправления SSH, curl, git и Python — включая различие между socks5 и socks5h, которое становится причиной большинства утечек геолокации и DNS.

Поиск конфигуратора SOCKS5 обычно означает, что у вас уже есть хост, порт и, возможно, имя пользователя и пароль — и вы хотите, чтобы браузер, оболочка или скрипт направляли трафик через него. Не существует единого универсального конфигуратора, но в каждом месте, где вы настраиваете SOCKS5, нужны одни и те же несколько значений, а особенности предсказуемы. Это руководство охватывает конфигурации, которые люди действительно используют.

Что такое SOCKS5, примерно за 60 секунд

SOCKS5 (RFC 1928) — это прокси-протокол транспортного уровня. Ваш клиент открывает соединение с прокси, просит его достичь пункта назначения, а затем передаёт байты в обоих направлениях. Из такого дизайна следуют два последствия:

  • Прокси не разбирает и не переписывает прикладные протоколы, поэтому он передаёт HTTPS, SSH и произвольный TCP-трафик без специальной настройки.
  • SOCKS5 ничего не шифрует. Конфиденциальность обеспечивается целевым протоколом (HTTPS, SSH) или запуском туннеля поверх шифрованного транспорта, такого как SSH.

Аутентификация по имени пользователя и паролю для SOCKS5 — это отдельная спецификация, RFC 1929. Поддержка её клиентами различается, и это различие вызывает большую часть проблем с настройкой.

Необходимые значения до начала работы

  1. Хост — имя хоста или IP-адрес прокси.
  2. Порт — порт прослушивания, предоставленный провайдером или туннелем.
  3. Аутентификация — имя пользователя и пароль, список разрешённых IP или отсутствие таковой.
  4. Схема — ожидает ли ваш инструмент socks5:// или socks5h://.

socks5:// против socks5h:// и почему DNS определяет вашу геолокацию

Схема Кто разрешает DNS Шифрует трафик Когда использовать
socks5:// ваша машина нет локальное разрешение DNS приемлемо
socks5h:// прокси нет вы хотите, чтобы запросы и геолокация соответствовали прокси
префикс http:// ваша машина нет вы используете HTTP-прокси, а не SOCKS
префикс https:// ваша машина TLS до прокси провайдер предлагает прокси-эндпоинт, обёрнутый в TLS

h означает, что имя хоста разрешается прокси. Использование socks5://, когда вам нужен socks5h://, — самая распространённая причина ситуации, когда прокси работает, но всё равно показывает неверный регион; это также может раскрыть посещаемые вами имена хостов вашему локальному резолверу. Только некоторые инструменты — curl, git через libcurl и определённые библиотеки Python — соблюдают соглашение socks5h; GUI-приложения обычно предоставляют это в виде флажка.

Настройка SOCKS5 в Firefox

Firefox — самый простой из распространённых браузеров для указания SOCKS5-прокси, потому что он хранит собственные настройки прокси, а не наследует настройки операционной системы.

  1. Откройте Настройки и найдите Настройки сети, или перейдите в Настройки, затем Общие, затем Настройки сети.
  2. Выберите Ручная настройка прокси.
  3. Введите хост и порт в поле SOCKS-хост и выберите SOCKS v5.
  4. Отметьте Проксировать DNS при использовании SOCKS v5, если прокси должен разрешать имена хостов.
  5. Оставьте поля HTTP-прокси пустыми, если у вас нет также HTTP-прокси.
  6. Нажмите ОК, затем загрузите страницу, которая показывает ваш IP-адрес, чтобы подтвердить изменение.

Chrome, Edge и другие браузеры на Chromium

Браузеры на основе Chromium читают настройки прокси операционной системы. Для изолированного тестирования запустите один из них с флагом и одноразовым профилем:

# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
  --proxy-server="socks5://127.0.0.1:1080" \
  --user-data-dir=/tmp/chrome-socks-test
# Linux
google-chrome --proxy-server="socks5://127.0.0.1:1080" --user-data-dir=/tmp/chrome-socks-test

Два предостережения. Отдельный --user-data-dir изолирует тест от вашего обычного профиля, а флаг — ненадёжное место для учётных данных. Если ваш прокси требует аутентификации, настройте её в параметрах операционной системы или направьте трафик через локальный перенаправляющий прокси вместо того, чтобы встраивать имя пользователя и пароль во флаг.

macOS: настройка SOCKS5 из терминала

Утилита networksetup записывает ровно ту же настройку, которую предоставляет панель Сетевые настройки.

# Список доступных сетевых сервисов, если вы не уверены в названии
networksetup -listallnetworkservices

# Замените "Wi-Fi" на имя вашего активного сервиса
sudo networksetup -setsocksfirewallproxy "Wi-Fi" 127.0.0.1 1080
sudo networksetup -setsocksfirewallproxystate "Wi-Fi" on

# Выключить обратно
sudo networksetup -setsocksfirewallproxystate "Wi-Fi" off

Многие инструменты командной строки полностью игнорируют системные настройки прокси macOS и требуют собственной настройки, поэтому не предполагайте, что терминал будет охвачен после успешного выполнения этой команды.

Linux и инструменты CLI: переменные окружения

export ALL_PROXY="socks5h://user:[email protected]:1080"
export all_proxy="$ALL_PROXY"

Большое количество инструментов командной строки читают ALL_PROXY или его вариант в нижнем регистре. Проверьте текущие значения с помощью env | grep -i proxy. Графические приложения в Linux обычно следуют настройкам прокси окружения рабочего стола, а не этим переменным, поэтому настройте оба пути или используйте обёртку, такую как proxychains, для упрямых бинарников.

SSH: превратите контролируемый сервер в SOCKS5-прокси

# -D включает динамическое (SOCKS) перенаправление, -N не выполняет удалённую команду, -C сжимает
ssh -N -C -D 1080 [email protected]

# Добавьте -f, чтобы отправить его в фоновый режим
ssh -f -N -C -D 1080 [email protected]

Часто это самый быстрый способ получить работающий SOCKS5-эндпоинт. На удалённом сервере ничего не нужно устанавливать, не требуются повышенные привилегии, а переход между вашей машиной и сервером шифруется SSH — что устраняет один из недостатков SOCKS5. Направьте браузер или CLI на 127.0.0.1:1080, когда туннель будет поднят.

curl, git и Python

# Разрешить DNS локально
curl --socks5 127.0.0.1:1080 https://api.ipify.org

# Разрешить DNS на прокси
curl --socks5-hostname 127.0.0.1:1080 https://api.ipify.org

# С аутентификацией по имени пользователя и паролю
curl --socks5-hostname 127.0.0.1:1080 \
  --proxy-user "USER:PASS" \
  https://api.ipify.org
# Направьте git через SOCKS5-прокси; git использует libcurl под капотом
git config --global http.proxy  socks5h://127.0.0.1:1080
git config --global https.proxy socks5h://127.0.0.1:1080

# Отмените, когда закончите
git config --global --unset http.proxy
git config --global --unset https.proxy
# Требуется: pip install "requests[socks]"
import requests

proxies = {
    "http": "socks5h://user:[email protected]:1080",
    "https": "socks5h://user:[email protected]:1080",
}

response = requests.get("https://api.ipify.org", proxies=proxies, timeout=15)
print(response.status_code, response.text)

Библиотеке requests нужна зависимость PySocks, чтобы понимать SOCKS-прокси. Без неё вы получите ошибку об отсутствующих зависимостях, возникающую до попытки любого соединения, что легко принять за сбой прокси.

Устранение неполадок, с которыми вы действительно столкнётесь

Симптом Вероятная причина Исправление
В соединении отказано На этом порту ничего не прослушивается Проверьте порт и что прокси или SSH-туннель запущен
Ошибка аутентификации SOCKS5 Неверные учётные данные или прокси ожидает IP из списка разрешённых Перепроверьте учётные данные; уберите их, если ваш IP в списке разрешённых
Сайт по-прежнему показывает неверный регион DNS разрешён локально, потому что вы использовали socks5:// Переключитесь на socks5h:// или включите удалённый DNS
407 Proxy Authentication Required Вы направлены на порт HTTP-прокси, а не SOCKS Проверьте список портов провайдера
Работает в curl, но не работает в браузере Браузер использует системные настройки, или расширение переопределяет их Отключите расширения для прокси и проверьте системные настройки
UDP-приложения не работают UDP-ассоциация SOCKS5 редко реализована на стороне клиента Используйте VPN для UDP-трафика

Проверьте, прежде чем доверять

# Сравните сообщаемый IP с прокси и без него
curl -sS https://api.ipify.org; echo
curl -sS --socks5-hostname 127.0.0.1:1080 https://api.ipify.org; echo

Если оба адреса идентичны, трафик не идёт через прокси. Когда важна точность геолокации, также запустите тест на утечку DNS в браузере, чтобы убедиться, что запросы уходят через прокси, а не через ваш локальный резолвер.

Вывод

Конфигуратор SOCKS5 — это на самом деле всего четыре значения, применённые в нужном месте: хост, порт, учётные данные и решение о том, где разрешается DNS. Настройте браузер или инструмент CLI, которым вы действительно пользуетесь, подтвердите выходной IP с помощью сравнения в curl выше и по умолчанию используйте socks5h://, когда важна точность геолокации или приватность DNS.