Судя во всему, скоро заблокируют месседжер Telegram на территории РФ, и поэтому друзья попросили поднять им socks прокси. Telegram как раз недавно запилил поддержку socks протокола.
Я решил, что подниму socks5 сервер с авторизацией. Выбор пал на dante как простой в настройке и с поддержкой авторизации.
Первая проблема была с установкой актуальной версии dante на мой дистрибутив. На
сервере на момент написания статьи стоял Debian 7 (wheezy) i386.
Дело в том, что версия dante-server
, доступная для него, сильно устарела и не поддерживала
авторизацию. Минимальная рабочая версия с авторизацией - 1.4.1
.
Была найдена статья
с описанием установки подходящей версии, но в статье были пакеты для архитектуры amd64.
Я решил пересобрать пакеты из исходников под нужную мне архитектуру, используя
свой же проект: https://github.com/kshcherban/yadeb
Сначала скачал deb src пакет и исходники программы и распаковал их:
mkdir dante-server
cd dante-server
wget http://ppa.launchpad.net/dajhorn/dante/ubuntu/pool/main/d/dante/dante_1.4.1-1.dsc
wget http://ppa.launchpad.net/dajhorn/dante/ubuntu/pool/main/d/dante/dante_1.4.1-1.diff.gz
wget http://ppa.launchpad.net/dajhorn/dante/ubuntu/pool/main/d/dante/dante_1.4.1.orig.tar.gz
dpkg-source -x dante_1.4.1-1.dsc
Потом поменял Dockerfile
и build.sh
скрипты в yadeb, с указанием нужной архитектуры
и дистрибутива:
diff --git a/Dockerfile b/Dockerfile
index 11dea21..88509d6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM debian:jessie
+FROM i386/debian:7
ENV DEBEMAIL="test@example.com" \
DEBFULLNAME="John Doe" \
diff --git a/build.sh b/build.sh
index 10e04e2..90ea2a5 100644
--- a/build.sh
+++ b/build.sh
@@ -45,7 +45,7 @@ if [ $BUILD == "true" ]; then
apt-get -f -y install
rm *.deb
echo "** Building package"
- dpkg-buildpackage -us -uc -F
+ dpkg-buildpackage -us -uc -F -ai386
fi
if [ $COPY == "true" ]; then
echo "** Copying result files into $SOURCE_PATH"
Теперь собираем пакет:
docker build -t yadeb .
docker run --rm -ti -v `pwd`/dante-src/:/opt/buildroot yadeb build.sh
Получившиеся артефакты установим на сервер:
dpkg -i dante-server_1.4.1-1_i386.deb
dpkg -i libdsocksd0_1.4.1-1_i386.deb
dpkg -i libsocksd0_1.4.1-1_i386.deb
Настроим конфиг dante в /etc/danted.conf
logoutput: syslog
user.privileged: root
user.unprivileged: nobody
# The listening network interface or address.
internal: eth0
# The proxying network interface or address.
external: eth0
# socks-rules determine what is proxied through the external interface.
# The default of "none" permits anonymous access.
socksmethod: username
# client-rules determine who can connect to the internal interface.
# The default of "none" permits anonymous access.
clientmethod: none
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect error
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect error
}
Обратите внимание на настройки internal
и external
, там нужно указать внешний
интерфейс или ip адрес, а также можно сконфигурировать порт, например:
internal: 129.12.11.10 port = 1081
internal
используется для входящих соединений и рассчитывается на использование
в локальных сетях, отсюда и название. В нашем случае обе настройки ведут на внешний
сетевой интерфейс.
external
— для исходящих соединений.
Также я изменил user.privileged
и client|socks pass
и socksmethod: username
,
который нужен для авторизации.
Далеe создадим пользователя, с которым будем авторизоваться:
useradd -s /usr/sbin/nologin -r proxyuser
passwd proxyuser
Запустим dante
:
service danted start
Не забудьте проверить, что iptables
разрешает входящий трафик на порт прокси.
Проверим настройки с локального компьютера, команда должна показать подробный лог подключения и ip вашего proxy сервера.
curl -v -x socks5://proxyuser:password@example.com:1080 https://ifconfig.co/
Сервер настроен, теперь можно настроить Telegram и передать привет роскомпозору.