UweStrich Posted May 16, 2018 Share Posted May 16, 2018 (edited) Подводка простая: для обхода блокировок понадобился выход через Tor в приложении на мобильном, причём не только в домашней локалке через Socks5 от самого тора, но и через подключение от сотового оператора. VPN отпал, т.к. телефон требует включать его вручную, подключение сбрасывается через пять минут простоя, и оно очень быстро расходует батарейку. Проброс портов в NAT – тоже: открывать полный доступ к Tor из внешней сети без какой-либо авторизации мне показалось неразумным. Оставался один вариант: установить прокси-привратник и настроить его на проверку логина с паролем, с дальнейшей переадресацией соединения на Tor. Выбор пал на 3proxy. (Убью интригу сразу: после упорных вкуриваний мануалов вместе с выдачей гугла у меня всё завелось, и дальнейший текст больше похож на ещё один мануал, нежели на просьбу о помощи. Однако ж, для темы в "Каталоге готовых решений" материал годится слабо, и в лучшем случае скорее является наброском: конфигурация наверняка неидеальная, работает она менее недели, кейсы вроде "серого провайдерского ip" или "упаковки логов в архив" она не предусматривает, да и объяснений где-то будет слишком мало, а где-то – слишком много.) Подготовительный шаг: создаём правило в файерволе роутера, открывающее порт в интерфейсе для доступа в интернет (PPPoE в моём случае) – именно его прокси-привратник и будет слушать. Для себя я открыл порт 63128 на ip-адресе назначения, который роутер получает при подключению к провайдеру: Устанавливаем нужные пакеты: opkg install 3proxy tor tor-geoip curl Если с 3proxy и tor всё ясно, то tor-geoip нужен для ограничения выходных нод в файле конфигурации по пути "/opt/etc/tor/torrc". Собственно, выглядит он примерно таким образом: Скрытый текст SOCKSPort 9055 #не помню из-за чего, но когда-то мне пришлось поменять на этот, с порта по умолчанию 9050 Log notice file /opt/var/log/tor/notices.log RunAsDaemon 1 DataDirectory /opt/var/lib/tor ## Списки нод, разрешённых для выхода (ExitNodes) ## И явно запрещённых для выхода (ExcludeExitNodes) ExitNodes {at},{be},{ch},{cz},{de},{dk},{es},{eu},{fi},{fr},{gb},{ie},{in},{it},{nl},{no},{pl},{ro},{se} ExcludeExitNodes {by},{ru},{kz} Проверить же, что Tor работает как надо, можно при помощи команды curl: curl --socks5 localhost:9055 --socks5-hostname localhost:9055 -k https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs Если в ответ мы получим "Congratulations. This browser is configured to use Tor." – значит, всё окей; curl потом можно удалить, т.к. для работы прокси он нам не понадобится: opkg remove curl Теперь настраиваем файл конфигурации 3proxy – "/opt/etc/3proxy/3proxy.cfg". Важно помнить, что доступ к нашему "привратнику" будет идти из внешнего интернета, а значит "внутренний интерфейс" будет на ip-адресе от провайдера, а "внешний" – локалхостом, на котором работает Tor. Минимальная рабочая конфигурация выглядит примерно так: Скрытый текст daemon pidfile /opt/var/run/3proxy.pid nscache 65536 nserver 127.0.0.1 timeouts 30 30 60 60 180 1800 60 120 #Таймауты по умолчанию могут быть слишком быстрыми для Tor, и потому #они были увеличены, согласно рекомендации его разработчиков: #https://trac.torproject.org/projects/tor/wiki/doc/TorifyHOWTO/WebBrowsers#CircumventingTorblocksusingopenHTTPproxies 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 counter /opt/etc/3proxy/3proxy.3cf #users $/opt/etc/3proxy/passwd #в этом файле возможно хранить логины и пароли пользователей; #данные добавляются при помощи скрипта add3proxyuser.sh include /opt/etc/3proxy/counters include /opt/etc/3proxy/bandlimiters #настройки sock5-привратника flush auth strong users <логин1>:CL:<пароль1> #возможно добавить несколько пользователей, отбивка по пробелу fakeresolve #для заворачивания DNS-запросов внутрь Тора allow * parent 1000 socks5+ 127.0.0.1 9055 #переправляем запросы на порт Tor maxconn 50 #проксик поднят для себя и друзей, максимум в 500 соединений по умолчанию не нужен socks -a -n -p63128 -i<ip слушающего интерфейса> -e127.0.0.1 #флаг -a делает прокси анонимным, -n - отключает несовместимую с Unix (?) аутентификацию по NTLM, #параметр -p63128 указывает на порт для прослушивания, -i - на интерфейс для прослушивания запросов, #-e - на интерфейс для отправки запросов #доступ к админке (адрес - 192.168.1.1:8080) по паролю из Home-LAN подсети 192.168.1.0 flush auth strong users <логинадмина>:CL:<парольадмина> allow <логинадмина> 192.168.1.0/24 * 8080 * deny * admin -n -p8080 Запускаем прокси /opt/etc/init.d/S23proxy start Указываем в настройках прокси приложения на телефоне адрес, порт, логин, и пароль: Скрытый текст После этого телефон подключается к роутеру по сотовому интернету и отправляет данные по Tor. При настройке в основном оглядывался на инструкции с официального сайта проекта, и в частности – .rtf-документ "Настройка 3proxy для чайников" (копию дополнительно добавлю в приложения к посту на случай недоступности по ссылке). Также довольно сильно выручил небольшой топик на linux.org.ru – пускай объяснения для конфига оттуда и пришлось искать в той же документации. Как уже упоминал, текст выше может содержать ошибки – любые исправления и уточнения приветствуются. 3proxy_for_dummies.rtf Edited April 9, 2019 by UweStrich исправлена команда в шаге 3 по замечанию пользователя @G5ast Quote Link to comment Share on other sites More sharing options...
plagioklaz Posted May 18, 2018 Share Posted May 18, 2018 Цитата Проверить же, что Tor работает как надо, можно при помощи команды curl: Ну вот, третий шаг ничего не выдаёт. ~ # /opt/etc/init.d/S35tor restart Shutting down tor... done. Starting tor... done. ~ # curl --socks5 localhost:9055 --socks5-hostname localhost:9055 -s https://che ck.torproject.org/ | cat | grep -m 1 Congratulations | xargs ~ # Может быть вы что-то упустили во втором шаге? Quote Link to comment Share on other sites More sharing options...
UweStrich Posted May 18, 2018 Author Share Posted May 18, 2018 (edited) 57 минут назад, plagioklaz сказал: Ну вот, третий шаг ничего не выдаёт. ~ # /opt/etc/init.d/S35tor restart Shutting down tor... done. Starting tor... done. ~ # curl --socks5 localhost:9055 --socks5-hostname localhost:9055 -s https://che ck.torproject.org/ | cat | grep -m 1 Congratulations | xargs ~ # Может быть вы что-то упустили во втором шаге? Не удивлюсь, если дело и правда в каких-то ранее установленных пакетах, не упомянутых в шаге два из-за неочевидности, но чтобы просто удостовериться: порт тора в запросе curl такой же, как в файле конфигурации? Просто, как уже упоминал в комментариях к примеру файла torrc, мне когда-то пришлось поменять значение "SOCKSPort" со значения по умолчанию 9050 на 9055; если у вас тор работает на 9050, то и запрос к curl придётся подправить. P.S.: всё ещё пытаюсь нормализовать конфиг 3proxy, и уже внёс в него кое-какие изменения согласно документации. Возможность редактировать шапку темы потерял, поэтому добавлю его в отдельном посте. Edited May 18, 2018 by UweStrich форматирование, корректура, уточнения Quote Link to comment Share on other sites More sharing options...
plagioklaz Posted May 18, 2018 Share Posted May 18, 2018 1 час назад, UweStrich сказал: но чтобы просто удостовериться: порт тора в запросе curl такой же, как в файле конфигурации? Конечно, точно следовал вашим инструкциям и раскоментировал нужные строки, поменял порт. И добавил пару строк в конец кода ExitNodes {at},{be},{ch},{cz},{de},{dk},{es},{eu},{fi},{fr},{gb},{ie},{in},{it},{nl},{no},{pl},{ro},{se} ExcludeExitNodes {by},{ru},{kz} Quote Link to comment Share on other sites More sharing options...
UweStrich Posted May 18, 2018 Author Share Posted May 18, 2018 (edited) Что ж, тогда продолжим выяснять. Для начала - что tor пишет в лог-файле /opt/var/log/tor/notices.log? Что пишет журнал в веб-интерфейсе роутера? Далее - время: тор может быть весьма чувствительным к серьёзным расхождениям по времени, а значит - может понадобиться синхронизация (можно настроить в веб-интерфейсе роутера). Ну, и ещё одна догадка: могут дополнительно потребоваться пакеты ca-bundle и ca-certificates. Ну, и ещё один вопрос разряда "вы пробовали выключить и потом заново включить": правки в файл конфигурации вносились через родные для роутера текстовые редакторы (vi, nano, или mcedit), не через виндовский "Блокнот"? Edited May 18, 2018 by UweStrich дополнительный вопрос Quote Link to comment Share on other sites More sharing options...
plagioklaz Posted May 21, 2018 Share Posted May 21, 2018 Да я уже всё снёс )) Попробовал, не заработало и ладно ) Quote Link to comment Share on other sites More sharing options...
UweStrich Posted May 21, 2018 Author Share Posted May 21, 2018 (edited) 2 часа назад, plagioklaz сказал: Да я уже всё снёс )) Попробовал, не заработало и ладно ) Ну, всё равно было полезно - что мне, что вам Жаль, правда, что так и не выяснили, что барахлило - tor или curl... *** Как и обещал на прошлой неделе - текущий конфиг; как я заметил, 3proxy почему-то не любит комментарии в той же строке, что и работающий параметр (или отбивку этих комментариев табуляцией), поэтому в этом конфиге строк будет больше: Скрытый текст daemon pidfile /opt/var/run/3proxy.pid #external 0.0.0.0 #internal 0.0.0.0 nscache 65536 nserver 127.0.0.1 #nserver 8.8.8.8 #Таймауты по умолчанию могут быть слишком быстрыми для Tor, и потому #они были увеличены, согласно рекомендациям его разработчиков: #https://trac.torproject.org/projects/tor/wiki/doc/TorifyHOWTO/WebBrowser#CircumventingTorblocksusingopenHTTPproxies timeouts 30 30 60 60 180 1800 60 120 config /opt/etc/3proxy/3proxy.cfg #список файлов, при изменении которых 3proxy перезагружает конфигурацию monitor /opt/etc/3proxy/3proxy.cfg monitor /opt/etc/3proxy/counters monitor /opt/etc/3proxy/passwd monitor /opt/etc/3proxy/bandlimiters monitor /tmp/currentip log /opt/var/log/3proxy.log D rotate 60 counter /opt/etc/3proxy/3proxy.3cf users $/opt/etc/3proxy/passwd #в этом файле возможно хранить логины и пароли пользователей; #данные добавляются при помощи скрипта add3proxyuser.sh include /opt/etc/3proxy/counters include /opt/etc/3proxy/bandlimiters #настройки socks5-привратника flush auth strong #для работы тоннеля обязательно должен быть указан один из способов авторизации #users <логин1>:CL:<пароль1> #возможно добавить несколько пользователей, отбивка по пробелу fakeresolve #для заворачивания DNS-запросов внутрь Tor-а allow * #разрешающие правила parent 1000 socks5+ 127.0.0.1 9055 #тоннель для переправления запросов на порт Tor-а #deny * #запрещающие правила socks -4 -n -p63128 -i$/tmp/currentip -e127.0.0.1 -S8192 #флаг -4 указывает на использование ipv4, -n - отключает NTLM, #-p63128 указывает на порт для прослушивания, -i$/tmp/currentip - на файл с ip-адресом интерфейса для прослушивания, #-e - на интерфейс для отправки запросов, -S8192 - размер стека #доступ к админке по паролю из Home-Lan подсети flush auth strong allow admin 192.168.1.0/24 * 8080 * deny * admin -n -p8080 Особое внимание на строки "monitor /tmp/currentip" и "socks -4 -n -p63128 -i$/tmp/currentip -e127.0.0.1 -S8192" - в файле по пути /tmp/currentip хранится ip-адрес, принадлежащий интерфейсу для выхода в интернет. Этот файл можно создавать и модифицировать при помощи скрипта в папке /opt/etc/ndm/wan.d - Скрытый текст 01-current-ip.sh #!/bin/sh iface=ppp0 #интерфейс для выхода в интернет curip=/tmp/currentip #файл, в котором хранится ip-адрес интерфейса [ $interface = "$iface" ] if [ ! -e "$curip" ] || [ $(cat $curip) != $address ] #если файл не существует, или ip-адрес в файле отличается от фактического, то... then echo "$address" > "$curip" #...записываем фактический ip-адрес в файл fi exit 0 Выставляем исполняемые права скрипту, введя в консоли следующую команду: chmod +x /opt/etc/ndm/wan.d/01-current-ip.sh Благодаря такой связке можно конкретно указать программе, какой интерфейс она должна прослушивать. Для постоянного же подключения к роутеру, даже при изменении его белого ip (разумеется, если динамические ip от провайдера белые), можно использовать DynDNS (статья в базе знаний). Ну, и обязательный дисклеймер о том, что способ выше вполне можно считать "стрельбой по воробьям из пушки" - с тем же успехом вместо конкретного ip интерфейса можно указать прослушивать все интерфейсы, т.е. строка конфига, поднимающая socks-прокси, примет следующий вид: socks -4 -n -p63128 -i0.0.0.0 -e127.0.0.1 -S8192 Edited May 21, 2018 by UweStrich правка форматирования, дополнение 1 Quote Link to comment Share on other sites More sharing options...
G5ast Posted September 11, 2018 Share Posted September 11, 2018 Нужно в CURL отключить проверку SSL сертификата, правильно будет вот так: curl --socks5 localhost:9055 --socks5-hostname localhost:9055 -k https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs 1 Quote Link to comment Share on other sites More sharing options...
slava.trifonov Posted October 31, 2018 Share Posted October 31, 2018 А зачем эта пляска с текущим "внешним" ip если можно просто пробросить порт на внутренний интерфейс и прописать статичный 192.168.0.1? 1 Quote Link to comment Share on other sites More sharing options...
Rbuha Posted April 25, 2019 Share Posted April 25, 2019 Tor не запускается. curl --socks5 localhost:9055 --socks5-hostname localhost:9055 -k https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs Выдаёт ошибку: curl: error while loading shared libraries: libc.so.0: cannot open shared object file: No such file or directory. Как это исправить? Quote Link to comment Share on other sites More sharing options...
Михаил Лукьянов Posted April 25, 2019 Share Posted April 25, 2019 Так ошибку curl выдаёт а не tor. На libc больше никто не ругается? Попробовать curl из opkg переставить для начала. 1 Quote Link to comment Share on other sites More sharing options...
Rbuha Posted April 25, 2019 Share Posted April 25, 2019 Переустановка curl, tor, tor-geoip не помогла: ~ # /opt/etc/init.d/S35tor start Starting tor... failed. Quote Link to comment Share on other sites More sharing options...
Михаил Лукьянов Posted April 25, 2019 Share Posted April 25, 2019 В /opt/etc/tor/torrc раскомментируйте строку Log debug file /opt/var/log/tor/debug.log Создайте папку mkdir /opt/var/log/tor Запустите тор и покажите содержимое debug.log. 1 Quote Link to comment Share on other sites More sharing options...
Rbuha Posted April 25, 2019 Share Posted April 25, 2019 Папку создал, запускаю tor, а файл debug.log не создаётся. Quote Link to comment Share on other sites More sharing options...
Rbuha Posted April 25, 2019 Share Posted April 25, 2019 Переустановил Entware, вроде заработало. 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.