Описаны три способа превращения своей удаленной машины в прокси-сервер. Все это в разное время я узнал от hombit. Свой удаленный сервер можно получить, к примеру, за 200₽/месяц у vscale (ссылка с моим промокодом). На момент написания записи через vscale можно выходить в мир. Обновлено в июле 2018.
Не требуется установка программ. Подойдет как временное быстрое решение для компьютера. Чтобы проложить туннель через удаленную машину, выполните на своем компьютере:
user | ssh -D 2222 username@hostname.com -N |
-D
позволяет использовать порт 2222,
-N
запрещает выполнять команды на сервере.
Если пароль введен или не требуется, то должно сложиться впечатление, что команда находится в процессе выполнения. Оставляйте терминал в этом состоянии и в мессенджере или браузере выставляйте настройки Proxy. Надо указать:
Host:
localhostPort:
2222Type:
SOCKS5Имя пользователя и пароль указывать не надо.
В браузере Firefox, например, это можно сделать так: Настройки →
Дополнительные → Сеть; в пункте «Соединение» нажимаете «Настроить», «Ручные
настройки прокси», HTTP Прокси:
localhost, Порт:
2222. Также надо
поставить галочку «Использовать этот прокси-сервер для всех протоколов».
В браузере Chrome нужно выбрать Настройки → Дополнительно → Сеть → Прокси. В Linux браузер может показать такое сообщение:
When running Google Chrome under a supported desktop environment, the system proxy settings will be used. However, either your system is not supported or there was a problem launching your system configuration.
But you can still configure via the command line. Please see man google-chrome-stable for more information on flags and environment variables.
Если в самом браузере настройку выполнить нельзя, то можно запустить его таким образом (это должна быть новая сессия, то есть до выполнения команды браузер должен быть закрыт):
user $ | google-chrome --proxy-server="socks://localhost:2222" |
Аналогично можно запустить и браузер Opera:
user $ | opera --proxy-server="socks://localhost:2222" |
Если хочется запустить команду в фоне, достаточно добавить ключ -f
:
user $ | ssh -f -D 2222 username@hostname.com -N |
После выполнения этой команды терминал можно будет закрыть.
На удаленную машину устанавливается прокси-сервер, и вы подключаетесь к желаемому пункту назначения через этот сервер.
Следуйте, например,
инструкции
по установке и настройке прокси-сервера 3proxy. Обратите внимание на
последнюю строку в файле /etc/3proxy/3proxy.cfg
(шаг 4 в инструкции).
Указано proxy -n -p3128 -a
, то есть использоваться будет HTTP-прокси на
порту 3128, а не SOCKS5-прокси. Чтобы изменить тип прокси и порт, можно в
последней строке указать, например, socks -p1111
.
Существуют и другие прокси-серверы, например, Squid, tinyproxy. Все они позволяют использовать SOCKS5 прокси, подключаясь к своей удаленной машине. Общий недостаток всех этих методов — логин и пароль передаются в незашифрованном виде, то есть при перехвате трафика они доступны злоумышленнику.
На всякий случай максимально кратко скопирую выжимку по установке 3proxy в Ubuntu из инструкции по ссылке выше.
root # | apt-get install -y build-essential nano wget tar gzip |
На июль 2018 последний релиз версии 0.8.12, проверьте.
user | cd ~ wget --no-check-certificate https://github.com/z3APA3A/3proxy/archive/0.8.12.tar.gz tar xzf 0.8.12.tar.gz cd ~/3proxy-0.8.12 |
root # | make -f Makefile.Linux mkdir /etc/3proxy cp ~/3proxy-0.8.12/src/3proxy /usr/bin/ adduser --system --no-create-home --disabled-login --group proxy3 |
Редактируйте файл /etc/3proxy/3proxy.cfg
.
Значения setgid
и setuid
можно узнать командой id proxy3
.
Значения nserver
можно посмотреть в /etc/resolv.conf
.
Последняя строка указывает тип прокси socks
и порт 5780
.
1 | setgid 115 |
Создайте файл /etc/3proxy/.proxyauth
, указав нужные username
и password
(пользователь — это не user на машине linux, это для подключения к proxy, так
что имя и пароль могут быть любые).
1 | username:CL:password |
root # | chown proxy3:proxy3 -R /etc/3proxy chown proxy3:proxy3 /usr/bin/3proxy chmod 444 /etc/3proxy/3proxy.cfg chmod 400 /etc/3proxy/.proxyauth mkdir /var/log/3proxy chown proxy3:proxy3 /var/log/3proxy |
Запустить можно так:
root # | /usr/bin/3proxy /etc/3proxy/3proxy.cfg |
Для автозагрузки в systemd можно сделать такой корявый сервис в
/etc/systemd/system/3proxy
:
1 | [Unit] |
Перезагрузите daemons:
root # | systemctl daemon-reload |
Запустите сервис и проверьте статус:
root # | systemctl restart 3proxy.service systemctl status 3proxy.service |
Последняя команда должна возвращать active
. Если все в порядке, то добавьте
в автозагрузку:
root # | systemctl enable 3proxy.service |
Протокол MTProto для Telegram позволяет использование шифрования при передаче логина и пароля. Приложение надо обновить до версии 4.8.8 и новее. Можно либо собрать из исходников (очень просто, по ссылке подробная инструкция), либо установить с помощью официального Docker контейнера. На всякий случай скопирую команды для Debian/Ubuntu + systemd, но лучше смотрите официальную инструкцию.
root # | apt install git curl build-essential libssl-dev zlib1g-dev |
user $ | git clone https://github.com/TelegramMessenger/MTProxy cd MTProxy make && cd objs/bin curl -s https://core.telegram.org/getProxySecret -o proxy-secret curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf head -c 16 /dev/urandom | xxd -ps ./mtproto-proxy -u nobody -p 8888 -H 443 -S <secret> --aes-pwd proxy-secret proxy-multi.conf -M 1 |
В последней команде замените <secret>
на вывод предыдщей команды
(head...
), а 443
на другой порт (если на этом сервере 443 уже
используется).
Для автозапуска после перезагрузки можно создать сервис в systemd, создав
файл /etc/systemd/system/MTProxy.service
. Вот пример моего файла (использую
порт 5780, не забудьте поменять /home/user/MTProxy
и <secret>
).
1 | [Unit] |
Перезагрузите daemons:
root # | systemctl daemon-reload |
Запустите сервис и проверьте статус:
root # | systemctl restart MTProxy.service systemctl status MTProxy.service |
Последняя команда должна возвращать active
. Если все в порядке, то добавьте
в автозагрузку:
root # | systemctl enable MTProxy.service |