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». Соединение открывается за пять шагов, третий нужен только при входе по паролю.
- Программа подключается по TCP к IP и порту прокси, сообщает версию 5 и перечисляет поддерживаемые способы входа.
- Из этого перечня прокси берёт один. Код 00 означает вход без пароля, 02 логин и пароль, FF значит, что ни один вариант не подошёл, и тогда программа закрывает соединение.
- При коде 02 программа отправляет логин и пароль, каждый длиной от 1 до 255 байт.
- Дальше идут команда и цель. CONNECT открывает обычное соединение, BIND ждёт входящее, как в FTP, UDP ASSOCIATE нужен для UDP. Цель задают через IPv4, имя сайта или IPv6.
- Прокси отвечает байтом статуса. 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.
- Отправьте запрос со схемой socks5h к сервису, который возвращает ваш IP. В ответе должен стоять адрес прокси. Если там ваш домашний IP, запрос прошёл мимо.
- Повторите тот же запрос без схемы, то есть по HTTP. Со строкой WinGate он тоже пройдёт, порт у обоих протоколов общий.
- Если соединение рвётся сразу после подключения, сверьте логин с паролем или привязанный IP: так выглядит отказ во входе.
Когда программа пишет в ошибке код ответа SOCKS5, расшифровка по RFC 1928 такая: 01 общий сбой прокси, 02 соединение запрещено правилами, 03 сеть недоступна, 04 узел недоступен, 05 цель отказала в соединении, 06 истёк TTL, 07 команда не поддерживается, 08 тип адреса не поддерживается. Коды с 03 по 06 говорят о пути к сайту назначения, 01, 02, 07 и 08 о самом прокси.
Прогнать все проверки до оплаты можно на бесплатном тесте WinGate, доступ дают до 2 часов. Сохраните рабочую команду curl с socks5h в заметки: после смены пароля или домашнего IP одного запроса хватит, чтобы понять, жива ли связка.