October 17

SOCKS5 что это и как его подключить в Telegram, браузере и curl

SOCKS5 что это, в одном предложении: протокол, по которому программа просит прокси открыть соединение с нужным адресом и портом, а потом гоняет через это соединение свои данные. Прокси их не разбирает и пересылает как есть, поэтому через SOCKS5 работают браузеры, Telegram, боты и скрипты. Сайт на другом конце видит IP прокси. Стандарт лежит в RFC 1928 (март 1996), логин и пароль к нему добавил отдельный RFC 1929.

Что такое прокси SOCKS5 и на каком уровне он работает

Прокси SOCKS5 это посредник, с которым программа разговаривает по пятой версии протокола SOCKS. В RFC 1928 его место названо прослойкой между прикладным и транспортным уровнями. Что течёт внутри, страница сайта или сообщения мессенджера, ему всё равно: он знает адрес назначения, порт и поток байтов.

Пятая версия выросла из четвёртой и, по тексту RFC, добавила к ней UDP, способы авторизации и адреса в виде доменного имени или IPv6. В английских интерфейсах тот же протокол подписан SOCKS5 proxy или SOCKS v5, в Firefox переключатель называется «SOCKS 5». Соединение открывается за пять шагов, третий нужен только при входе по паролю.

  1. Программа подключается по TCP к IP и порту прокси, сообщает версию 5 и перечисляет поддерживаемые способы входа.
  2. Из этого перечня прокси берёт один. Код 00 означает вход без пароля, 02 логин и пароль, FF значит, что ни один вариант не подошёл, и тогда программа закрывает соединение.
  3. При коде 02 программа отправляет логин и пароль, каждый длиной от 1 до 255 байт.
  4. Дальше идут команда и цель. CONNECT открывает обычное соединение, BIND ждёт входящее, как в FTP, UDP ASSOCIATE нужен для UDP. Цель задают через IPv4, имя сайта или IPv6.
  5. Прокси отвечает байтом статуса. 00 значит, что соединение открыто, коды с 01 по 08 называют причину отказа.

Какой порт у SOCKS5, если в строке стоит другой

Стандартный порт SOCKS 1080: так записано в RFC 1928, и этот же номер Chrome и libcurl подставляют сами, когда порт в адресе не указан. Продавцы прокси выдают свои порты. В строке формата IP:PORT:LOGIN:PASS порт стоит вторым, сразу после адреса. Берите его оттуда и не меняйте на 1080 по привычке: на чужом порту прокси просто не ответит.

Чем отличается прокси HTTP от SOCKS5

HTTP-прокси понимает веб-запросы, SOCKS5 пересылает соединение любого протокола и в его содержимое не вникает. Разницу видно по тому, что программа сообщает прокси. HTTP-прокси получает текстовый запрос с адресом страницы и заголовками, для HTTPS это строка вида CONNECT www.example.com:443 HTTP/1.1, после которой он держит двусторонний туннель. SOCKS5 получает короткое двоичное сообщение: команду, тип адреса, сам адрес и порт.

Вторая разница касается имён сайтов. Имя HTTP-прокси получает всегда и сам находит по нему IP. В SOCKS5 выбирает программа: отдать готовый IP или само имя. Во втором случае DNS-запросы с вашего компьютера не уходят, их делает прокси. В curl для этого есть схема socks5h, в Firefox флажок про DNS-запросы через прокси, а Chrome с SOCKS5, по документации Chromium, всегда отдаёт имена на сторону прокси.

У WinGate выбирать между двумя типами при покупке не нужно. Туннель принимает оба протокола на одном порту, поэтому одна строка встаёт и в поле SOCKS5, и в поле HTTP. Если программа капризничает с одним из них, тип меняют в её настройках, строка остаётся прежней.

HTTP или SOCKS5: что лучше для вашей программы

Лучше тот протокол, который программа поддерживает целиком, вместе с вашим способом входа. Браузеру и парсеру веб-страниц подходят оба. Ботам и программам со своим протоколом обмена нужен SOCKS5. В мобильном Telegram выбор из SOCKS5 и MTProto, строка из кабинета встаёт в первый.

С Chrome выходит наоборот. По документации Chromium логин и пароль для SOCKS5 он не поддерживает, зато HTTP-прокси с паролем принимает. Если доступ у вас по логину, в Chrome ставят тип HTTP, и со строкой WinGate это та же строка на том же порту.

Чем отличается прокси SOCKS5 от MTProto в Telegram

MTProto-прокси работает только с Telegram, SOCKS5 подходит любой программе. По справке Telegram для SOCKS5 достаточно адреса и порта, логин и пароль необязательны. MTProto всегда требует третий параметр, secret: ключ, записанный в шестнадцатеричном виде.

Строку SOCKS5 из кабинета можно прописать в Telegram, в антидетекте и в скрипте одновременно, MTProto-ссылка пригодится только мессенджеру. В справке Telegram есть и предупреждение про сторонние MTProto-узлы: после подключения среди чатов иногда всплывает незнакомый канал, его продвигает владелец прокси, чтобы окупить расходы.

Как подключить SOCKS5 прокси: какие поля заполнять

Подключить SOCKS5 прокси значит заполнить в программе четыре поля: тип, адрес, порт и, если вход по паролю, логин с паролем. На вопрос, какой сервер у прокси SOCKS5, отвечает сама строка: это IP из её первой части, до первого двоеточия. В Telegram поле так и называется «Сервер», в документации о нём сказано коротко: IP-адрес или хост прокси. При привязке IP поля логина и пароля оставляют пустыми. Набор полей одинаков, у кого бы вы ни брали сокс прокси: меняются только их названия и место в меню.

Как настроить прокси SOCKS5 в Телеграм

Telegram добавляет SOCKS5 в собственных настройках, отдельная программа ему ни к чему. Пути по справке Telegram такие.

  • Android: «Настройки», затем «Данные и память», там внизу «Настройки прокси» и «Добавить прокси».
  • iPhone и iPad: «Настройки», «Данные и память», пункт «Прокси» в конце страницы.
  • Telegram Desktop: «Настройки», «Продвинутые настройки», «Тип соединения».
  • Telegram для macOS: «Настройки», «Данные и память», «Использовать прокси».

В форме выберите SOCKS5 и перенесите поля из строки. Чтобы не вбивать их на каждом телефоне, соберите ссылку по формату из документации Telegram: tg://socks?server=адрес&port=порт&user=логин&pass=пароль. Параметры user и pass необязательные, при входе по привязке IP их просто убирают. Такую ссылку открывают на каждом устройстве вместо ручного ввода.

Как настроить SOCKS5 в Firefox

В Firefox SOCKS5 задают в окне «Параметры соединения», и системные настройки при этом трогать не придётся. Откройте «Настройки», раздел «Основные», блок «Настройки прокси» и кнопку «Настроить прокси». Отметьте «Ручная настройка прокси», впишите IP в поле «Узел SOCKS», порт в соседнее поле «Порт» и выберите «SOCKS 5». Поле «HTTP прокси» для этой схемы не заполняют.

В том же окне есть флажок «Отправлять DNS-запросы через прокси при использовании SOCKS 5». Включите его, тогда имена сайтов будет искать прокси. Полей для логина в этом окне нет, поэтому Firefox удобнее подключать по привязке IP.

Прокси SOCKS5 в Chrome

Chrome подключает SOCKS5 только без логина и пароля: по документации Chromium способов авторизации для SOCKSv5 браузер не поддерживает. Поэтому вариантов два. Первый: привязать свой IP и запускать браузер с флагом --proxy-server=socks5://IP:порт, имена сайтов Chrome в этом режиме всегда отдаёт прокси. Второй: оставить вход по паролю и указать ту же строку как HTTP-прокси. Для HTTP Chrome понимает Basic, Digest, Negotiate и NTLM.

SOCKS5 proxy: как использовать в curl

Ключ -x задаёт прокси в curl, тип пишут схемой в начале адреса. Логин и пароль ставят перед адресом через @, как в обычной ссылке: curl -x socks5h://логин:пароль@IP:порт example.com.

Буква h решает, кто ищет IP сайта: при схеме socks5 это делает ваш компьютер, при socks5h прокси. По документации libcurl адрес без схемы curl считает HTTP-прокси, а без порта подставляет 1080. На строке WinGate первая оплошность запрос не сломает, тот же порт отвечает и по HTTP. Только запомните, какой протокол реально сработал, если программа потом потребует именно SOCKS5.

Логин и пароль для прокси SOCKS5 или привязка IP

Логин и пароль вводят, когда прокси пускает по паролю, при привязке IP их не вводят совсем. Протокол предусматривает обе схемы. Вход по паролю это способ 02, его порядок расписан в RFC 1929, и правило там жёсткое: если статус ответа не 00, прокси обязан закрыть соединение. Поэтому опечатка в пароле выглядит как обрыв сразу после подключения, без внятной ошибки.

Привязка IP работает через способ 00, вход без пароля. Пускать ли клиента, прокси решает по адресу, с которого пришло подключение: в RFC 1928 так и написано, что сервер оценивает запрос по адресам источника и назначения.

В WinGate доступны оба варианта. В личном кабинете можно привязать свои IP, не больше двух, и тогда строка короткая, только адрес и порт. Или взять строку с логином и паролем в формате IP:PORT:LOGIN:PASS, она работает с любого вашего подключения. Выбирают по программам: Chrome и Firefox с SOCKS5 удобнее вести по привязке, Telegram и curl спокойно принимают логин.

Как сделать SOCKS5: свой узел или готовый пул

Сделать SOCKS5 можно двумя путями: поднять его на своём сервере или взять готовые адреса у сервиса. Короткий вариант первого пути описан в документации OpenSSH. Команда ssh -D 1080 пользователь@сервер открывает на вашем компьютере порт 1080, и ssh работает на нём как SOCKS-сервер версий 4 и 5. Программа подключается к 127.0.0.1:1080, соединения идут через шифрованный канал, и сайты видят адрес удалённой машины.

У этого пути простой предел: один сервер даёт один адрес. Десяти профилям нужно десять IP, парсеру сотни, и держать под каждый адрес отдельную машину долго и дорого. Бесплатные списки SOCKS5 эту задачу не решают. Адреса туда собирают с чужих открытых узлов, владельца никто не знает, и одним IP одновременно пользуется толпа незнакомых людей.

Пул WinGate собран из приватных IPv4 и отвечает по HTTP, HTTPS и SOCKS5. Им пользуется ограниченный круг клиентов сервиса, в открытые подборки адреса не попадают. Под десятки профилей и потоков проще прокси socks5 купить в таком пуле, чем поднимать по серверу на каждый адрес.

Как проверить SOCKS5 после настройки

Проверяют три вещи: пускает ли прокси, идёт ли через него трафик и кто ищет IP сайтов. Удобнее всего это делать в curl.

  1. Отправьте запрос со схемой socks5h к сервису, который возвращает ваш IP. В ответе должен стоять адрес прокси. Если там ваш домашний IP, запрос прошёл мимо.
  2. Повторите тот же запрос без схемы, то есть по HTTP. Со строкой WinGate он тоже пройдёт, порт у обоих протоколов общий.
  3. Если соединение рвётся сразу после подключения, сверьте логин с паролем или привязанный IP: так выглядит отказ во входе.

Когда программа пишет в ошибке код ответа SOCKS5, расшифровка по RFC 1928 такая: 01 общий сбой прокси, 02 соединение запрещено правилами, 03 сеть недоступна, 04 узел недоступен, 05 цель отказала в соединении, 06 истёк TTL, 07 команда не поддерживается, 08 тип адреса не поддерживается. Коды с 03 по 06 говорят о пути к сайту назначения, 01, 02, 07 и 08 о самом прокси.

Прогнать все проверки до оплаты можно на бесплатном тесте WinGate, доступ дают до 2 часов. Сохраните рабочую команду curl с socks5h в заметки: после смены пароля или домашнего IP одного запроса хватит, чтобы понять, жива ли связка.