Была поставлена задача пустить трафик Телеграма через сеть 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