Как поднять прокси для тележеньки. (Спойлер - просто!)
Однажды настал момент когда я устал от нестабильного соединения в Telegram. Я никогда не был сторонником бесплатных и публичных решений и поэтому решил быстренько купить себе VPS и поднять мне и друзьям прокси.
15 минут и машина с Ubuntu 16.04 LTS на борту готова. В качестве прокси будем использовать Dante Server 1.4.2, эта версия поддерживает работу с авторизованными пользователями и в ней исправлены многие ошибки.
SOCKS — сетевой протокол, который позволяет клиент-серверным приложениям прозрачно использовать сервисы за фаерволами. SOCKS базируется на стандарте TCP/IP и позволяет работать с любыми протоколами (версия Socks 4 – с TCP, Socks 5 – с TCP и UDP). SOCKS proxy просто передает данные от клиента к серверу, не вникая в содержимое самих данных (поэтому он может работать с HTTP, FTP, SMTP, POP3, NNTP, etc.).
1. Установка Dante Server
Скачаем и разархивируем исходники сервера:
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/
Установим необходимые утилиты и зависимости:
apt-get install gcc libwrap0 libwrap0-dev libpam0g-dev make checkinstall
Подготовим файлы dante для компиляции:
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
Упаковываем в пакет и устанавливаем:
checkinstall
Проверяем работу:
/opt/dante/sbin/sockd -v Dante v1.4.2. Copyright (c) 1997 - 2014 Inferno Nettverk A/S, Norway
2. Настройка сервера
Создадим пользователи и установим пароль:
useradd -s /bin/nologin telegram passwd telegram
Узнаем название сетевого интерфейса:
ifconfig eth0 Link encap:Ethernet HWaddr 00:50:56:bd:74:65 lo Link encap:Local Loopback
В моем случае он называется eth0
. Пропишем его в конфигурационном файле:
nano /etc/sockd.conf
Содержимое файла:
#logoutput: /var/log/socks.log logoutput: stderr # На каком сетевом интерфейсе и порту обслуживаем socks клиентов internal: eth0 port = 1080 # С какого IP или интерфейса выходим во внешний мир external: eth0 #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 }
Ещё один вариант настройки конфигурации:
logoutput: syslog stdout /var/log/sockd.log internal: x.x.x.x port = 1080 external: x.x.x.x socksmethod: username user.privileged: root user.unprivileged: nobody user.libwrap: nobody client pass { from: 0.0.0.0/0 to: 0.0.0.0/0 log: error } client block { from: 0.0.0.0/0 to: 127.0.0.0/8 log: connect error } socks pass { from: 0.0.0.0/0 to: 0.0.0.0/0 command: connect log: error socksmethod: username }
3. Автоматический запуск сервера
Для того, чтобы запуск сервера происходил при старте системы, соберём модуль запуска. Для этого необходимо создать файл /etc/init.d/sockd
с таким содержимым:
#! /bin/sh ### BEGIN INIT INFO # Provides: sockd # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start the dante SOCKS server. # Description: SOCKS (v4 and v5) proxy server daemon (sockd). # This server allows clients to connect to it and # request proxying of TCP or UDP network traffic # with extensive configuration possibilities. ### END INIT INFO # # dante SOCKS server init.d file. Based on /etc/init.d/skeleton: # Version: @(#)skeleton 1.8 03-Mar-1998 [email protected] # Via: https://gitorious.org/dante/pkg-debian PATH=/sbin:/usr/sbin:/bin:/usr/bin NAME=sockd DAEMON=/opt/dante/sbin/$NAME DAEMON_ARGS="-D" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME DESC="Dante SOCKS daemon" CONFFILE=/etc/$NAME.conf # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.2-14) to ensure that this file is present # and status_of_proc is working. . /lib/lsb/init-functions set -e # This function makes sure that the Dante server can write to the pid-file. touch_pidfile () { if [ -r $CONFFILE ]; then uid="`sed -n -e 's/[[:space:]]//g' -e 's/#.*//' -e '/^user\.privileged/{s/[^:]*://p;q;}' $CONFFILE`" if [ -n "$uid" ]; then touch $PIDFILE chown $uid $PIDFILE fi fi } case "$1" in start) if ! egrep -cve '^ *(#|$)' \ -e '^(logoutput|user\.((not)?privileged|libwrap)):' \ $CONFFILE > /dev/null then echo "Not starting $DESC: not configured." exit 0 fi echo -n "Starting $DESC: " touch_pidfile start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 echo "$NAME." ;; reload|force-reload) # # If the daemon can reload its config files on the fly # for example by sending it SIGHUP, do it here. # # Make this a do-nothing entry, if the daemon responds to changes in its config file # directly anyway. # echo "Reloading $DESC configuration files." start-stop-daemon --stop --signal 1 --quiet --pidfile \ $PIDFILE --exec $DAEMON -- -D ;; restart) # # If the "reload" option is implemented, move the "force-reload" # option to the "reload" entry above. If not, "force-reload" is # just the same as "restart". # echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON sleep 1 touch_pidfile start-stop-daemon --start --quiet --pidfile $PIDFILE \ --exec $DAEMON -- -D echo "$NAME." ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; *) N=/etc/init.d/$NAME # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $N {start|stop|restart|status|force-reload}" >&2 exit 1 ;; esac exit 0
Сделаем скрипт запуска исполняемым:
chmod +x /etc/init.d/sockd
Обновим конфигурацию демонов:
systemctl daemon-reload
И включим модуль:
systemctl enable sockd
Запустим Dante server:
systemctl start sockd
Перезагрузим конфигурацию:
systemctl enable danted && systemctl restart danted
4. Формируем ссылку для Telegram
https://t.me/socks?server=example.com&port=9999&user=username&pass=password
Оригинальная статья https://levashove.ru/kak-podnyat-svoj-socks5-server-dlya-telegram/amp/