Настроить свой socks5 прокси сервер. Прозрачное Socks5 проксирование приложений в linux

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

На всех серверах стоит Ubuntu Server 14.04, может где-то и 12.04, но описание должно подойти и для всех остальных систем основанных на Debian.

Есть 2 известных мне способа организации работы SOKS5 сервера:

  1. SOCKS через SSH. Этот способ удобен своей простотой но неудобен при частом использовании, или использовании с разных машин;
  2. Установка SOCKS сервера. При использовании этого способа уйдет чуть больше времени на первоначальную настройку, но потом пользоваться прокси будет быстрее и удобнее.

SOCKS через SSH

Для того чтоб поднять SOCKS5 через SSH нужен только доступ к SSH сервера.

Вводим в терминале или SSH клиенте (PuTTY для Windows)

Ssh -D 1080 user@server

Если запросит пароль, то нужно ввести пароль от SSH сервера.

-D - указывает порт по которому будет доступен SOKS5 сервер

Все, после этого вы можете подключиться к SOKS5 серверу по адресу localhost:1080 или 127.0.0.1:1080

Такой способ удобен тем что не нужно ничего дополнительно устанавливать и настраивать. Но перед каждым подключением или после разрыва ssh соединения, например из-за проблем с интернетом придется заново вводить эту команду.

Установка SOCKS сервера

Установка старой версии Dante Server

sudo apt-get update sudo apt-get install dante-server

Sudo nano /etc/danted.conf

Приведя его к такому виду

Logoutput: syslog /var/log/danted.log internal: eth0 port = 1085 external: eth0 method: username user.privileged: root user.notprivileged: nobody client pass { from: 0.0.0.0/0 to: 0.0.0.0/0 log: error } pass { from: 0.0.0.0/0 to: 0.0.0.0/0 command: connect log: error method: username }

С vpnki вы можете иметь доступ к домашней сети через прокси сервер . Точнее говоря, мы используем два прокси сервера:

  • для HTTP соединений - http proxy
  • для любых соединений по протоколу TCP - SOCKS5 proxy

С помощью http прокси вы сможете иметь доступ из сети Интернет к веб-интерфейсу своего домашнего устройства (сервера, видеорегистратора, видеокамеры и т.д.), а с помощью SOCKS5 прокси вы сможете иметь доступ к домашним устройствам по таким протоколам как ssh и VNC (впрочем и по многим другим, которые используют протокол TCP).

Доступ через прокси сервер осуществляется при наличии:

  • подключенного к системе vpn туннеля от вашего устройства по любому из протоколов (PPTP, L2TP, L2TP/IPsec, OpenVPN)
  • наличия галочки (об использовании proxy) на вашей личной странице vpnki
  • настроенного клиентского программного обеспечения (браузер, ssh или VNC клиент)

Используемый логин/пароль, который вы будете вводить в момент подключения через прокси НЕ должен быть подключен через VPN Proxy-cоединения без авторизации приниматься не будут.

Перед использованием уточните может ли ваше клиентское программное обеспечение использовать proxy сервер с авторизацией.

Краткая инструкция по использованию HTTP и SOCKS5 proxy соединений

1. При установленной галочке на личной странице системы vpnki вам будут выделены два порта TCP:

  • один для http proxy
  • второй для SOCKS5 proxy

Запишите их и используйте при настройке своего клиентского ПО

2. Настройка браузера (в общем виде подходит для любого браузера)

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

2.2. Перейдите в настройки соединения с Интернет

2.3. Укажите в качестве http прокси - msk.сайт и порт, выданный вам на личной странице для http соединений (в данном примере 54505)

2.4. Наберите в строке браузера адрес веб-интерфейса в домашней сети

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

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

В такой ситуации есть два выхода:

  • Использовать два браузера (один с настройками прокси для доступа к домашней сети, второй - без настроек прокси для доступа к всем ресурсам Интернет), но это не очень удобно
  • Использовать дополнительный плагин для браузера, в котором правила использования прокси пишутся более гибко. Таким плагином может являться плагин AutoProxy для Firefox

2.6. Плагин AutoProxy для Firefox. В нем вам необходимо: а) указать прокси сервер - msk.... б) Создать группу правил и сами правила, указав только те адреса, соединения с которыми должны осуществляться через прокси сервер. Все остальные соединения будут осуществляться без использования прокси. Пример правил представлен на рисунке ниже. В данном случае, в группе правил vpnki есть три правила (адреса домашней сети) для которых будет использоваться прокси соедиение. Указание адресов в правилах начинается с символа ||

3. Настройки VNC клиента

3.2. Настройте VNC Viewer: укажите в настройках Proxy - msk.сайт и порт, выданный вам для SOCKS5 соединений на личной странице vpnki

3.3. Создайте соединение к своему устройству и запустите его

ДОПОЛНИТЕЛЬНО ПО ТЕМЕ

  • Немного более подробно про IP адреса можно прочитать на нашем сайте
  • Про выход в Интернет через VPN и центральный офис можно
  • Про удалённый доступ к компьютеру можно почитать на нашем сайте
  • Про VPN и протоколы можно почитать

Сетевой протокол SOCKS5 позволяет незаметно пересылать данные от клиента серверу. Функция уже есть в Telegram для Windows и macOS. В ближайшее время она появится и в мобильных версиях мессенджера.

Рекомендуется включить SOCKS5 до вступления блокировки в силу. После неё скачать приложение из Google Play и App Store, скорее всего, станет проблематично. Придётся пользоваться VPN-сервисами для входа в магазин «из другой страны».

Чтобы увеличить шансы получить актуальную версию Telegram, включите автоматическое обновление приложения. Если вы пользуетесь Android, то в настройках операционной системы разрешите скачивание обновлений из сторонних источников и загрузите апдейт с официального сайта мессенджера.

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

  1. Откройте настройки десктопной версии мессенджера и найдите «Расширенные настройки» (Advanced Settings).
  2. Смените тип соединения (Connection type) на «TCP с нестандартным socks5-прокси» (TCP with custom socks5-proxy).
  3. Введите адрес прокси-сервера и порт. Советуем использовать американский, немецкий, шведский или английский прокси.
  4. Осталось поставить галочку «Использовать IPv6» (Try connecting through IPv6) и сохранить настройки.

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

    Что такое SOCKS proxy server?

Хотя этот протокол разработан достаточно давно, он является относительно новым (по сравнению с proxy). SOCKS позволяет работать с любыми (версия Socks 4 - с TCP, Socks 5 - с Порты TCP и UDP) протоколами. SOCKS proxy просто передает данные от клиента к серверу, не вникая в содержимое самих данных (поэтому он может работать с Методы и структура протокола HTTP , Протокол FTP протокол передачи файлов , SMTP - простой протокол передачи почты , POP3 , NNTP, etc.).

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

HTTP прокси, в отличии от SOCKS прокси, умеет кэшировать данные и может более тщательно фильтровать содержимое передаваемых данных.

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

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

Что можно сделать прямо сейчас? Блокировку можно обойти с помощью прокси - специального сервера, через который ваши запросы к Telegram будут идти «в обход». Это абсолютно безопасно - прокси не смогут расшифровать или прослушать ваш трафик.

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

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

    Прокси от Vee

    Прокси от Airpush

    Прокси от TgVPN

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

Настройка SOCKS5 через SSH

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

Ssh -f -C2qTnN -D <порт> <удаленный_пользователь>@<удаленный_сервер>

    F Запросит ssh перейти в фоновый режим только перед выполнением команды.

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

    2 Принуждает ssh использовать только протокол версии 2.

    Q Тихий режим. Подавляет все предупреждения и диагностические сообщения. Будут отображены только фатальные ошибки.

    T Отменить переназначение терминала.

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

    N Не выполнять удаленную команду.

    D [локальный IP: ] порт

Например:

Sudo ssh -f -C2qTnN -D 1080 [email protected]

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

    Идём «Правка» → «Настройки» → вкладка «Дополнительно» → вкладка «Сеть» → раздел «Соединение» → кнопка «Настроить»

    Устанавливаем там пункт «Ручная настройка сервиса прокси», в поле «Узел SOCKS» пишем наш IP адрес (обычно 127.0.0.1), а в поле «Порт» - указанный порт (в примере 1080).

    Ставим ключ на пункт "SOCKS 5" и применяем настройки.

После чего идём на любой сайт для определение IP-адреса. Например: http://dieg.info и видим не свой IP, а IP удалённого сервера, к которому мы установили SSH - соединение.

SOCKS сервер Dante Server

Часть функционала в виде дополнительных модулей платная, например модуль 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).

cd / opt wget http:// www.inet.no/ dante/ files/ dante-1.4.2.tar.gz tar -xvf dante-1.4.2.tar.gz cd dante-1.4.2/

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

aptitude install gcc cc libwrap0 libwrap0-dev libpam0g-dev make yum install gcc pam-devel tcp_wrappers-devel mkdir / opt/ dante ./ configure --prefix =/ opt/ dante

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

Client: Enabled Server: Enabled Preloading: Enabled Libwrap: Enabled BSD Auth: Disabled, usable bsd_auth.h not found PAM: Enabled GSSAPI: Not found/disabled KRB5: Not found/disabled SASL: Not found/disabled UPNP: Not found/disabled Compatability: issetugid setproctitle strlcpy strvis Modules: redirect: Not found bandwidth: Not found ldap: Not found make make install

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

/ opt/ dante/ sbin/ sockd -v Dante v1.4.2. Copyright (c) 1997 - 2014 Inferno Nettverk A/ S, Norway

Рабочий конфигурационный файл (подставьте свой IP или название сетевого интерфейса). Скачать файл sockd.conf командой

wget -c http:// сайт/ _export/ code/ socks?codeblock =10 -O / etc/ sockd.conf sockd.conf #logoutput: /var/log/socks.log logoutput: stderr # На каком сетевом интерфейсе и порту обслуживаем socks клиентов internal: venet0:0 port = 1080 # С какого IP или интерфейса выходим во внешний мир external: venet0:0 #internal: x.x.x.x port = 1080 #external: x.x.x.x # Используемый метод авторизации клиентов. none - без авторизации. socksmethod: username #socksmethod: username none user.privileged: root user.notprivileged: nobody client pass { from: 0.0.0.0/ 0 to: 0.0.0.0/ 0 log: error connect disconnect } client block { from: 0.0.0.0/ 0 to: 0.0.0.0/ 0 log: connect error } socks pass { from: 0.0.0.0/ 0 to: 0.0.0.0/ 0 log: error connect disconnect } socks block { from: 0.0.0.0/ 0 to: 0.0.0.0/ 0 log: connect error }

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

/ opt/ dante/ sbin/ sockd -D

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

start.sh #!/bin/bash / opt/ dante/ sbin/ sockd -f / etc/ sockd.conf -D stop.sh #!/bin/bash / usr/ bin/ pkill sockd

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

sudo useradd -s / bin/ false proxyuser && sudo passwd proxyuser

Разрешим TCP порт 1080 в фаерволе ufw (Uncomplicated Firewall) настройка

sudo ufw allow proto tcp from any to any port 1080

Потребовалось мне как-то запустить игру, которая запускается под wine, через прокси. Поднял ssh-туннель, запустил игру через proxychains, и… игра не смогла соединиться с сервером, хотя chromium без проблем работал и показывал ip прокси. Попробовал tsocks - игра вообще не запустилась. Можно, конечно, было настроить VPN-туннель с помощью того же ssh, но сервер - VPS, под OpenVZ, у которого по умолчанию выключен TUN, что привело бы к письму в техподдержку и ожиданию.
Итак, пятиминутное гугление привело меня к заброшенному проекту Transocks, который, в отличие от proxychains и tsocks, которые подгружают свои библиотеки и перехватывают сетевые вызовы, слушает определенный порт и перенаправляет все, что в него пришло, через socks4 прокси. К сожалению, transocks у меня не собрался, и я начал гуглить дальше. Оказывается, у проекта есть два форка: transocks_ev на c и transocks_em на ruby. Первый поддерживает Socks5, не поддерживает авторизацию и UDP. Второй же поддерживает Socks5, UDP, *BSD, но тоже, вроде бы, не поддерживает авторизацию(не нашел в коде, а документации нет). Так как UDP мне не нужно, я остановился на transocks_ev.

Сборка

Собрать transocks_ev очень просто: достаточно скачать Makefile и transocks_ev.c со страницы проекта, установить libevent и выполнить
make
У нас появился бинарник transocks_ev
tranSOCKS-ev - libevent-based transparent SOCKS5-Proxy
Usage: ./transocks_ev [-f] [-p Port] [-H IP-Address] [-s port] [-S IP-Address]

F Do not fork into background upon execution
-p Bind our server-socket to this port
-H Listen on this IP-Address for incomming connections
-s Expect SOCKS5-Server on this Port
-S Expect SOCKS5-Server on this IP-Address

Так как я поднимал ssh-туннель на порту 4441, запускаю transocks_ev с такими параметрами:
./transocks_ev -p 4445 -H 127.0.0.1 -s 4441 -S 127.0.0.1
Теперь у нас на порту 4445 висит сервер, который будет пускать все запросы через наш socks5. Немного похоже на NAT, только на определенном порту.

Настройка

Перенаправлять пакеты будем с помощью iptables. Я решил сделать подобие proxychains, чтобы можно было запустить любое приложения через прокси, а не просто проксирование по адресу или порту(хотя для игры сгодится и оно).
Создаем новую группу proxified:
sudo groupadd proxified
Редактируем /etc/sudoers так, чтобы мы могли запускать приложения под этой группой. Должно быть что-то вроде этого:
valdikss ALL=(ALL:ALL) ALL

Теперь перейдем к настройкам iptables.
sudo iptables -t nat -I OUTPUT -m owner --gid-owner proxified -p tcp -j REDIRECT --to-ports 4445
Эта команда будет перенаправлять все пакеты от приложений с группой proxified на transocks сервер.

Запуск

Запускаем приложение с группой proxified
sudo -g proxified chromium-browser

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