Настройка SOCKS5 прокси-сервера через Tor на Zyxel Keenetic Extra II

02.05.2018

Была поставлена задача пустить трафик Телеграма через сеть tor средствами роутера.

В наличии имеется роутер Zyxel Keenetic Extra II (прошивка 2.11.C.1.0-3), с установленным менеджером пакетов Opkg и подключенным внешним USB-диском с файловой системой NTFS (хотя для использования репозитория Entware 3x на форуме рекомендуют файловую систету ext3/ext4, но у меня заработало и так).

Установка Entware по инструкции прошла без каких-либо проблем.

Подключаемся к роутеру по ssh (пользователь root, пароль keenetic). Приступаем к установке tor. Выполняем команды

opkg update
opkg install tor

В файле /etc/tor/torcc необходимо раскомментировать следующие строки:

SOCKSPort 9050 # Default: Bind to localhost:9050 for local connections.
SOCKSPort 192.168.1.1:9100 # Bind to this address:port too. 

192.168.1.1 - IP роутера в моей локальной сети.

Далее указываем, что tor нам нужен как daemon:

RunAsDaemon 1

И для того, чтобы исключить из цепочки tor некоторые страны в конец файла добавляем

ExcludeNodes {ru}, {ua}, {by} , {kz}, {ir} 
ExcludeExitNodes {ru}, {ua}, {by} , {kz}, {ir} 

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

Этих настроек должно быть достаточно, чтобы tor запустился. Выполняем команду:

/etc/init.d/S35tor start

В консоли будет сообщение, что tor запущен.

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

Но мне хотелось бы использовать этот прокси-сервер и вне домашней сети. Тем более, что провайдер предоставляет "белый" IP-адрес, да и Keenetic предоставляет весьма удобный сервис KeenDNS при "сером" IP. Можно, конечно, просто открыть порт на роутере и через NAT осуществить перенаправление трафика на SOCKS5-сервер tor, но тогда он будет общедоступным, чего не хотелось бы, мягко говоря.

Для решения этой проблемы посмотрел в сторону прокси-серверов в Entware. После попыток изобразить что-то приемлемое по разным инструкциям, выбор пал на простенький прокси-сервер отечественных разработчиков - 3proxy. На сайте весьма подробная и доходчивая документация. Устанавливаем пакет:

opkg install 3proxy

Файл конфигурации расположен по адресу \etc\3proxy\3proxy.cfg. У меня он имеет следующее содержание:

daemon
pidfile /opt/var/run/3proxy.pid
nscache 65536
nserver 127.0.0.1
config /opt/etc/3proxy/3proxy.cfg
monitor /opt/etc/3proxy/3proxy.cfg
monitor /opt/etc/3proxy/counters
monitor /opt/etc/3proxy/passwd
monitor /opt/etc/3proxy/bandlimiters
#Указываем файл лога и его параметры
log /opt/var/log/3proxy.log D
rotate 60
logformat "L%Y-%m-%d %H:%M:%S.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
counter /opt/etc/3proxy/3proxy.3cf
#Имена пользователей с паролями.
#Пароли можно хранить и в хэшированном виде.
#Пользователей можно хранить и в отдельном файле
#include /opt/etc/3proxy/passwd
users user_one:CL:password_one
users user_two:CL:password_two
include /opt/etc/3proxy/counters
include /opt/etc/3proxy/bandlimiters
#Настраиваем маршрутизацию через прокси-сервер tor-а
auth strong
allow * 
parent 1000 socks5 192.168.1.1 9100
#запускаем SOCKS-сервер на порту 9200
socks -p9200 
#указываем, что запускать будем от имени пользователя nobody

#id можно узнать командой "id nobody"

setgid 65534
setuid 65534

Запускаем 3proxy командой

/etc/init.d/S23proxy start

Теперь остается пробросить порт через NAT "наружу". После чего остается указать соответствующий адрес в настройках прокси телеграма.

P.S. Вот еще хорошая статья по настройке 3proxy на Ubuntu/Debian