Единая точка выхода в web, I2P, TOR и обход блокировок

Единая точка выхода в web, I2P, TOR и обход блокировок

Коварный план

Преамбула… Даная статья была написана ещё летом но, по независящим от автора причинам, немножко подзадержалась.

Однажды, жарким летним вечером, после очередной введённой в консоли браузера команды вида :set content.proxy socks://localhost:9050 , автор сего опуса понял, что дальше так жить нельзя и пора приводить выход во всякие скрытосети, а заодно и обход блокировок имени известной организации к какому-то единому, для любого софта вообще и браузера в частности, «общему знаменателю». А как приводить? Разумеется так, чтобы прокси сервер сам «понимал», через какой вышестоящий прокси отправлять и принимать трафик в зависимости от введённого адреса. Вторая цель, вытекающая из первой, вышестоящие прокси могут работать либо как http, либо как socks и оба протокола должны поддерживаться входным прокси. Ну и сам софт должен быть более менее актуальным, что б в случае ошибок или «хотения фич», не приходилось грустно смотреть на одинокую репу на гитхабе, а то и вообще на каком-нибудь сорсфорже.
Итак цели поставлены!

Муки выбора

На самом деле особых мук не было. Ибо, по большому счёту, из имеющихся известных прокси серверов поставленным требованиям удовлетворяли два. Это privoxy и tinyproxy . Но tinyproxy оказался более живым, более легковесным и более простым, поэтому и был выбран и немедленно установлен (в качестве примера используется текущая версия Manjaro Linux).

Само собой, до этого, уже были установлены настроены пакеты tor и i2pd . ( sudo pacman -Syu tor i2pd ).

Базовая настройка tinyproxy

Итак, настроим базовые перенаправления, чтобы в обычный web ходило напрямую, а в *.i2p и *.onion через соответствующие вышестоящие (parent) proxy.

Для начала практически все параметры в конфиге остаются по умолчанию.

  • Сохраняем
  • Запускаем: sudo systemctl enable --now tinyproxy
  • Проверяем: journalctl -f -u tinyproxy , параллельно пытаемся зайти на i2p и onion ресурсы (настроив браузер на использование http proxy http://localhost:8888 ) и видим в лог файле сообщения о перенаправлениях на parent proxy's:

Список «zapret.info»

Ну что ж, связка прокси базово работает, теперь начинается самое интересное — обход блокировок роскомнадзора. К сожалению, tinyproxy не поддерживает внешние файлы со списком parent proxy, но это не должно быть препятствием. Ведь мы можем сгенерировать монолитный конфиг «on the fly».

Копируем имеющийся конфиг tinyproxy под новым именем:

Слегка правим новый /etc/tinyproxy/tinyproxy.conf.static : LogLevel Info → LogLevel Error

Создаём юнит который будет клонировать репозиторий проекта zapret.info — sudo systemctl edit --full --force z-i-prepare.service :

Создаём юнит который будет генерировать конфиг tinyproxy, в рантайме — sudo systemctl edit --full --force tinyproxy-cfg-generator.service :

… и собственно скрипт /usr/local/bin/tinyproxy-cfg-gen.sh к нему:

Таймер и сервис, который раз в сутки будет выкачивать обновления списка и рестартовать основной сервис: sudo systemctl edit --full --force z-i-update-daily.timer :

И сервис к нему sudo systemctl edit --full --force z-i-update-daily.service :

Наконец вишенка на торте, редактируем tinyproxy.service под наши нужды — sudo systemctl edit tinyproxy.service :

А теперь, со всем этим безобразием мы попытаемся взлететь ©

How it works?

Вдумчивый читатель безусловно поинтересуется, Для чего такие танцы с бубном? Что ж, в заключении не мешает прояснить некоторые моменты. Пойдём прямо по пунктам предыдущего раздела.

  1. Тут всё просто. Мы сохраняем в отдельный файл ту часть конфигурации, которая не должна меняться автоматически.
  2. Очень важный параметр, сокращающий время загрузки основного сервиса с часа(SIC!) до, примерно, полутора минут (нетбучный AMD проц года 2009-го и HDD на 5400 об./мин.). Разумеется это не единственный способ повышения производительности.
  3. «bootstrap» юнит, который запускается всегда, но отрабатывает только в том случае если отсутствует директория /usr/local/lib/z-i/ либо пуст файл /usr/local/lib/z-i/dump.csv (Директивы Condition* ). Ключик --depth 1 позволяет склонировать только последний коммит, а не все 8 Гб.
  4. Основная генерация конфига и ещё один лайвхак для повышения производительности. Из csv
    awk -ом вырезается поле с доменом, очищается от лишних символов. Удаляются строки с пустым доменом, далее cat отправляет результат на stdout . а уже юнит, благодаря директиве StandardOutput= записывает весь вывод в конфиг файл в /run на tmpfs ! По зависимостям запускается после того как отработает «bootstrap» юнит из предыдущего пункта.
  5. Раз в сутки, начиная с нуля часов, с джиттером в час, обновляем репозиторий и перегенерим конфиг, с рестартом сервиса. Точнее рестартуем сервис с перегенерацией конфига.
  6. (и 7.) Ну тут всё понятно, запуск вспомогательных юнитов и основного.

Данная связка работает уже неделю 2,5 месяца. Глюкобагов, пока, вроде бы не замечено. готовые конфиги и скрипты живут на гитхабе, PR приветствуются!

Пожалуйста, войдите для комментирования
Ваш ответ
Код защиты:
captcha
Ваш комментарий будет опубликован после модерации администратором
Описание
Auto Opium Feminised
  • Ваш список
    “Список желаний” пуст
Нет просмотренных товаров
Найдено 5 Показать
Удалить список?
Для того, что бы добавить товар в список желаний, Вам нужно