Как сделать прокси socks5

Обновлено: 04.07.2024

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

SOCKS5 прокси для Telegram

Инструкция как поднять свой прокси-сервер (не VPN) для обхода блокировки Telegram. Стоит 5$ в месяц.

Telegram умеет использовать socks5 проксирование на уровне приложения. На мой взгляд это удобнее чем VPN. При настройке VPN у вас обычно (если не плясать с бубном) весь ваш трафик начинает идти через VPN-сервер. Это неудобно, медленно и избыточно.

Результатом данной инструкции будет ссылка вида tg://socks?server=167.99.39.89&port=1080&user=proxy&pass=MyLongPass123 . Её достаточно открыть в любом приложении Telegram, чтобы оно снова заработал. Полученную ссылку можно переслать друзьям и родственникам.

*Данная инструкция предоставляется исключительно в исследовательских целях и не призывает нарушать никакие из принятых законов.

**Предполагается что у вас компьютер с MacOS или Linux и у вас есть пара (публичный и приватный) ключей для беспарольной авторизации по SSH.

1. Создаем виртуальный сервер на DigitalOcean

1.1. Идем на вкладку Droplets

01.apps

1.2. Переходим к разделу One-click apps

02.docker

1.3. Выбираем размер сервера

Нам достаточно самого маленького, который стоит 5$ в месяц.

03.size

1.4. Выбираем регион размещения сервера.

Мне нравится Амстердам, но можно выбрать любой другой.

После этого нажимаем на New SSH Key, чтобы добавить ваш ssh ключ.

04.region

1.5. Добавляем SSH ключ

В поле SSH key content нужно вставить содержимое публичной части SSH ключа. Обычно оно находится в файле ~/.ssh/id_rsa.pub.

Получить его можно набрав в консоли

Получим примерно следующее

Полученный результат вставляем в окно в браузере.

05.add

1.6. Создаем сервер

Жмем большую зеленую кнопку Create

06.create

Примерно через минуту новый сервер будет создан.

1.7. Получаем ip нового сервера

07.ip

Теперь у нас есть виртуальный сервер, на котором осталось настроить совсем немного.

2. Запускаем SOCKS5 сервер

2.1. Логинимся на сервер

В вашем случае ip будет другим.

2.2. Собираем контейнер и запускаем прокси-сервер

Клонируем этот репозиторий и запускаем сервис danted внутри контейнера. Вся необходимая настройка будет произведена автоматически при сборке контейнера.

Результатом это команды будет примерно 30 строк текста. Среди них нам интересен кусок примерно такого содержания.

В вашем случае она будет отличаться. Именно её нужно скопировать в любой telegram-чатик (например в избранное) и кликнуть. Или просто открыть в браузере.

Появляется вот такое окно:

08.teleg

Нажимаем ок и у нас снова работает Telegram.

При сборке контейнера будет создан случайный сложный пароль. Он фигурирует в ссылке. Это гарантия того, что вашим прокси сервером смогут пользоваться только те, кому вы отправили эту ссылку.


SOCKS - сетевой протокол, который позволяет клиент-серверным приложениям прозрачно использовать сервисы за межсетевыми экранами (фаерволами). SOCKS — это сокращение от "SOCKet Secure". SOCKS не зависит от конкретных протоколов уровня приложений (7-го уровня модели OSI) и базируется на стандарте TCP/IP — протоколе 4-го уровня.

Поскольку SOCKS передает все данные от клиента серверу, ничего не добавляя от себя, то с точки зрения web-сервера socks proxy является клиентом. Поэтому анонимность этого типа proxy-серверов всегда является действительно полной.

Как обойти блокировку Telegram

Универсальный способ обхода блокировки Telegram, сервисов Яндекс и любых блокировок в интернете - это настроить собственный socks прокси на выделенном сервере или купить VPN. Отличие VPN от прокси в том, что он работает для всего устройства в целом, а не только для Телеграма.

В приложении для ПК также может помочь включение IPv6:

Как включить прокси? Для подключения просто нажмите на одну из кнопок ниже, а затем в приложении Telegram согласитесь на включение прокси.

Вы можете добавить сразу несколько прокси – Telegram сам выберет среди них самый быстрый и стабильный и подключится к нему.

Настройка SOCKS5 через Настройка и использование SSH. Создать SOCKS5- прокси довольно просто. Достаточно выполнить команду по следующей схеме:

-C Включит сжатие всех данных (включая stdin, stdout, stderr и данные для перенаправленных Х11 и TCP/IP соединений).

-n Перенаправляет стандартный ввод из /dev/null (фактически, предотвращает чтение из стандартного ввода).

После введения пароля к удаленному серверу, SSH перейдёт в фоновый режим.

Далее вам следует открыть любой браузер, в котором прописать адрес SOCKS5 прокси в параметрах соединения.


В случае Ubuntu 18.04.4 LTS и Ubuntu 20.04.1 LTS Focal Dante Server ставится стандартно из репозитория. Предварительно обновим пакеты:

Посмотрим версию пакета Dante SOCKS сервера dante-server/bionic 1.4.2+dfsg-2build1 amd64

В моем случае после установки dante Отказался запускаться. Для того чтобы увидеть подробно причину ошибки нужно запустить демона вручную, командой danted. В моем случае ошибка сразу понятна - не настроен метод аутентификации

Правим конфигурационный файл /etc/danted.conf. Прописываем параметры в явном виде. Ниже полностью рабочий конфигурационный файл Dante Servera с доступом клиента по логину и паролю.

Создадим пользователя, который будет использовать наш SOCKS сервер и добавим его в группу proxy или в ту груупу которая указана в параметре user.privileged: конфига Dante.

Разрешим в фаерволе, я использую UFW (Uncomplicated Firewall) настройка, порт TCP 1080 для подключения клиентов

Часть функционала в виде дополнительных модулей платная, например модуль Bandwidth control стоит 400 EUR (евро).

В репозиториях Ubuntu 14.04.5 LTS Trusty и Ubuntu 16.04.2 LTS установлена старая версия Dante Server 1.1.19 и к тому же она не может работать с логином и паролем (доступ к прокси можно регулировать только Правила iptables). Баг этот известен давно, но так и не был исправлен(how to set up danted (dante-server) SOCKS proxy on Ubuntu 14.04 with authentication).

Инсталляция и настройка SOCKS сервера Dante Server из исходных кодов в Хостинг VPS/VDS на Ubuntu 14.04.5 LTS Trusty в контейнере OpenVZ.

Компиляция Dante Server. Вначале установим необходимые утилиты и зависимости Dante для компиляции Ubuntu:

К конце будет выведен статус конфигурации

Проверим запускается ли собранный файл, посмотрим версию сервера:

Запуск сервера Dante как сервиса

Всё! Наслаждаемся работой.

Добавим пользователя, который будет пользоваться нашим SOCKS сервером

Вывести все правила ufw можно командой

SOCKS сервер 3proxy - это маленький многоплатформенный набор прокси-серверов (под Linux/Unix и Windows, включая 64-битные версии).

Анонимность в сети - тема не новая. И вы наверняка устанавливали к себе на комп прогу типа A4Proxy, SocksChain
и им подобные. Лично я не люблю, когда для работы с проксями нужна какая-то отдельная прога. Во-первых
некрасиво, когда много окон на панели задач или значков в трее, во-вторых проги эти требуют кряков, а их
искать лень 🙂 Поэтому я и написал классы для поддержки SOCKS5-серверов, которые я теперь могу заюзать
в какой-нибудь своей проге. И вот теперь хочу всем рассказать, как это делать.

Описание протокола

Сконнектившись с сервером, клиент шлет пакет, в котором указана версия протокола и поддерживаемые
методы аутентификации. Этот пакет имеет следующий формат:

BYTE Version;
BYTE nMethods;
BYTE methods[nMethods]

Версия должна быть 5. Каждый элемент methods определяет не только метод аутентификации, но и способ шифрования данных,
если оно используется. Из этих методов сервер выбирает один. Можно указывать любое количество методов, но, если сервер не требует аутентификации, то никакие методы,
кроме 0x00 (не использовать ни аутентификацию, ни шифрование) не потребуются. В ответ сервер шлет пакет следующего содержания:

BYTE Version
BYTE method,

где method - выбранный сервером метод или 0xFF (ни один из предложенных методов не поддерживается). Если метод 0x00, то можно сразу посылать команду.

Пакет команды имеет следующий формат:

BYTE Version; // 5
BYTE Cmd ; // 1 - CONNECT
BYTE Reserved; // 0
BYTE AType; // 1 - IPv4; 3 - domain name; 4 - IPv6
BYTE addr[];
WORD port; // Байты в сетевом порядке, т. е. htons(Port);

Если используется доменное имя, то сначала идет байт длины, а затем строка без завершающего нуля.

Сервер посылает ответ:

BYTE Version; // 5
BYTE Rep ; // 0 - Ok
BYTE Reserved; // 0
BYTE AType; // 1 - IPv4; 3 - domain name; 4 - IPv6
BYTE addr[];
WORD port;

Здесь адрес и порт - это адрес и порт, видимые хосту. Возвращается, как правило, IP-адрес, а не доменное
имя. Этот адрес может отличаться от того, по которому мы обращаемся к серверу, особенно, если сервер
используется по назначению, т. е. для выхода из локалки в инет. Если Rep не ноль, т. е. ошибка, то закрываем соединение, в
противном случае работаем с хостом. Мы не используем шифрование, поэтому просто передаем и принимаем данные, как при обычном соединении. Если одна из сторон закроет соединение с socks-сервером, то он сразу же закроет соединение с другой
стороной. Одно socks-соединение инкапсулирует одно TCP-соединение или попытку его установления,
так что если использовать socks для анонимного сканирования портов, то эта
процедура может занять пол дня.

Поскольку socks инкапсулирует TCP, целесообразно сделать класс socks-соединения производным от
класса сокета, но MFCшный CSocket не подходит, т.к. у него все методы
не виртуальные. Напишем свой класс сокета и назовем его, скажем, CTSocket

class CTSocket
public:
virtual BOOL CreateSocket();
virtual BOOL Connect(unsigned long ip, unsigned short port);
virtual BOOL Connect(LPCSTR name, unsigned short port);
virtual int Send(const char* str, int len);
virtual int Recv(char* buf, int max);
virtual void Close();
virtual unsigned long GetHost(); // Узнать свой адрес. Это тоже может понадобиться.

private:
SOCKET sock;
>;

Реализацию этого класса каждый сможет написать сам (кто не знает как, RTFM MSDN), так что не буду ее
рассматривать. Теперь напишем класс socks-соединения. Он будет поддерживать только самый необходимый набор
функций: поддерживается только команда CONNECT, не поддерживается аутентификация и SOCKS-сервер
задается только IP-адресом, а не доменным именем. Больше в одной статье не поместится.

class CSocksSocket : public CTSocket
public:
virtual BOOL CreateSocket();
virtual BOOL Connect(unsigned long ip, unsigned short port);
virtual BOOL Connect(LPCSTR name, unsigned short port);
virtual int Send(const char* str, int len);
virtual int Recv(char* buf, int max);
virtual BOOL Close();
virtual unsigned long GetHost();

CTSocket* pSocket;
unsigned long socks_ip;
unsigned short socks_port;

private:
char buffer[512]; // Такого размера точно хватит
unsigned long l_ip; // Адрес, возвращаемый функцией
GetHost()
>;

// Реализация
BOOL CSocksSocket::CreateSocket()
if (!pSocket->CreateSocket()) return FALSE;
if (!pSocket->Connect(socks_ip, socks_port)) return FALSE;
buffer[0] = 5; // Ver
buffer[1] = 1; // 1 method
buffer[2] = 0; // no auth
pSocket->Send(buffer, 3);
int n = pSocket->Recv(buffer, 2);
if (n != 2) return FALSE;
if (buffer[1] != 0) return FALSE; // method 0 not supported
return TRUE;
>

BOOL CSocksSocket::Connect(unsigned long ip, unsigned short port)
buffer[0] = 5; // Ver
buffer[1] = 1; // CONNECT
buffer[2] = 0; // Reserved
buffer[3] = 1; // IPv4
*((unsigned long*)(buffer + 4)) = ip;
*((unsigned short*)(buffer + 8)) = port;
pSocket->Send(buffer, 10);
int n = pSocket->Recv(buffer, 10);
if (n != 10) return FALSE;
if (buffer[1] != 0) return FALSE; // Can't connect
if (buffer[3] != 1) return FALSE; // Будем требовать, чтобы нам сказали IP, а не что-нибудь другое.
l_ip = *((unsigned long*)(buffer + 4));
return TRUE;
>

BOOL CSocksSocket::Connect(LPCSTR name, unsigned short port)
buffer[0] = 5;
buffer[1] = 1;
buffer[2] = 0;
buffer[3] = 3; // Domain name
int m = strlen(name);
buffer[4] = m; // Length byte
memcpy(buffer+5, name, m); // Копируем строку без завершающего нуля
*((unsigned short*)(buffer + 5 + m)) = port;
pSocket->Send(buffer, m + 7);
int n = pSocket->Recv(buffer, 10);
if (n != 10) return FALSE;
if (buffer[1] != 0) return FALSE;
if (buffer[3] != 1) return FALSE; // Будем требовать, чтобы нам сказали IP, а не что-нибудь другое.
l_ip = *((unsigned long*)(buffer + 4));
return TRUE;
>

int CSocksSocket::Send(const char* str, int len)
return pSocket->Send(str, len);
>

int CSocksSocket::Recv(char* buf, int max)
return pScoket->Recv(buf, max);
>

void CSocksSocket::Close()
pSocket->Close();
>

unsigned long CSocksSocket::GetHost()
return l_ip;
>

// Ну, а теперь тестовая прога
void main()
WSADATA wsadata;
CTSocket tsock;
CSocksSocket ssock(&tsock);

Звезда активна
Звезда активна
Звезда активна
Звезда активна
Звезда не активна

1. Представьте, что вы сидите в отеле или в кафе с бесплатным WiFi. Где гарантия, что WiFi не развёрнут мошенниками, которые ждут, пока какой-нибудь лох начнёт передавать через WiFi данные своей банковской карты или вводить логины и пароли к своим личным страницам. Здесь есть два пути, либо не пользоваться бесплатным WiFi для работы и покупок, либо пользоваться прокси, с помощью которого данные будут передаваться в зашифрованном виде.

2. Сокрытие своего настоящего IP-адреса. Иногда это бывает нужно для соблюдения анонимности.

3. Вы получили бан поисковой системы из-за частого обращения. Например, если Яндекс часто спрашивает, робот вы или человек.

Существует 2 варианта найти прокси-сервер: найти услугу (платную или бесплатную) или создать собственный прокси-сервер. Здесь не будем рассматривать первый вариант, т.к. нет гарантии, что на сервере не пишется лог (вероятность потери личных данных, данные банковских карт, логины и пароли). Ниже рассмотрим второй вариант: создание своего прокси-сервера.

1. Находим хостинг с поддержкой SSH

Если вы веб-мастер, то, возможно, у вас уже есть хостинг с поддержкой SSH. Если нет, то поищите в Интернете недорогой хостинг поддерживающий SSH. Встречаются хостинг-провайдеры, которые готовы предложить нужный нам хостинг за примерно за 1 доллар в месяц. Можно найти и заграничный хостинг, но это будет чуть дороже. Если поискать получше, то можно найти бесплатные варианты, но, думаю, платные будут работать надёжнее.

2. Запускаем программу PuTTY

3. Настраиваем программу PuTTY

После запуска программы вы увидите окно с настройками. В поле Host Name введите адрес домена или IP-адрес вашего сервера. В поле Port укажите порт, обычно это 22.


Теперь перейдите в категорию Connection->SSH->Tunnels. Здесь нужно добавить порт. Для этого в поле Source port введите порт для будущего локального прокси-сервера, например, 8888. Выберите опцию Dinamic и нажмите на кнопку Add. После этого порт появится в поле Forwarded ports - строка D8888.


Чтобы при каждом запуске не делать эту длительную процедуру, нужно сохранить текущие настройки. Для этого вернитесь в категорию Session, введите имя для своих настроек в поле Saved Sessions, например, "myhost.ru proxy" и нажмите на кнопку Save. После этого ваши настройки появятся в списке ниже. Теперь, при следующем запуске программы, вы сможете выбрать свои настройки в этом списке и нажать на кнопку Load.


4. Открываем сессию

После настройки программы можно открыть сессию. При этом будет создан локальный прокси-сервер. Для этого щёлкаем по кнопке Open.


Дальше программа попросит ваш логин и пароль в чёрном окне (при вводе пароля курсор не будет двигаться, и не будут появляться звёздочки, - это нормально).


5. Прокси-сервер готов!

После того как вы ввели логин и пароль, на экране появится информация о сервере, а ваш прокси будет доступен по адресу 127.0.0.1:8888 или localhost:8888. По окончании работы чёрное окно программы PuTTY можно закрыть, согласившись с предупреждением.

6. Настройка браузера и других программ

Чтобы воспользоваться созданным локальным прокси-сервером в браузере, нужно настроить подключение через SOCKS5 прокси-сервер, указав настройки 127.0.0.1:8888 или localhost:8888 . Другие программы настраиваются аналогичным образом. Для примера рассмотрим настройку браузера Internet Explorer 10.

В меню выберите пункт "Свойства браузера".


В появившемся окне выберите закладку "Подключения" и на ней нажмите на кнопку "Настройка сети".


В окне "Настройка параметров локальной сети" поставьте галку "Использовать прокси-сервер. " (в дальнейшем, чтобы быстро включать и выключать прокси, можно просто снимать или устанавливать эту галку ) и нажмите на кнопку "Дополнительно".


В окне "Параметры прокси-сервера" укажите только пункт 4. Остальные поля очистите, чтобы браузер не путался.


Теперь закройте все окна, нажимая на кнопки "ОК". Ваш браузер готов к работе через прокси.

Читайте также: