http_proxy#12.md 17 KB

Удобный доступ в I2P, Tor, Yggdrasil и другие сети через единый HTTP-прокси

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

Когда клиент сети установлен, необходимо настроить браузер или другое программное обеспечение. Чаще всего программные клиенты скрытых сетей предоставляют для конечного пользователя HTTP или SOCKS прокси. Это стандартные протоколы, которые поддерживаются всеми веб-браузерами, многими мессенджерами и даже некоторыми играми. Благодаря прокси программного клиента скрытой сети, можно направить трафик практически любого приложения в скрытую сеть.

Исключения вроде Tor-браузера, которые не требуют настройки, по своей сути являются всего лишь пакетом, который включает в себя не только программный клиент скрытой сети, но и настроенный браузер.

Путешествуя по обычному интернету мы не задумываемся над доменными зонами: ru, com, org и так далее, потому что все они открываются одинаково. Однако, настроив браузер для открытия сайта в сети I2P, вы не откроете onion-домен из сети Tor. Для этого нужно будет сменить настройки прокси-сервера. Поковырявшись с различными настройками, вы можете упростить эту задачу, но, если добавить сюда еще сеть Yggdrasil, тема сильно усложнится. Таким образом настройки вашего браузера будут неизменно усложняться, тем самым создавая поле для потенциальных утечек запросов с вашего настоящего IP-адреса на сомнительные ресурсы. И это при условии, что программы для доступа во все названные сети должны быть установлены на каждое из ваших устройств, где вы хотите ими пользоваться.

В этом видео рассмотрим настройку межсетевого прокси-сервера, который нужно настроить всего лишь один раз и затем использовать с любых устройств, переходя от сайта в одной сети на ресурс в другой скрытой сети вообще не задумываясь о дополнительных настройках браузера или чего-то еще. Будет использован tinyproxy - легковесный HTTP-прокси сервер для unix-подобных операционных систем. Для реализации показанного подойдет любой слабый сервер на базе Debian или другого дистрибутива GNU/Linux на ваш вкус.

Ликбез по безопасности

Для подключения к прокси-серверу будем использовать Yggdrasil - легкую транспортную сеть со сквозным шифрованием. Можете думать об этом, как о VPN. Это решение связано с тем, что трафик скрытых сетей передается в зашифрованном виде только внутри скрытой сети, а от локального программного клиента, который вы установите на свое устройство, до веб-браузера или другого приложения данные идут в открытом виде. Нормально, когда незашифрованные данные передаются локально, однако передавать их через интернет, где множество желающих будут мониторить проходящие пакеты, крайне нежелательно. Это же ваш трафик прямиком из даркнета.

Обычные сайты используют протокол HTTPS, который шифрует передаваемые данные. Подобное решение влечет за собой дополнительные настройки и слабые места в виде централизованных центров сертификации со всеми вытекающими, поэтому будет делать по-хардкору, без доверия третьим лицам - на перспективной и легковесной меш-сети Yggdrasil.

Установка и настройка

Не буду занимать время демонстрацией установки Tor, I2P и Yggdrasil. Более того, список скрытых сетей может быть дополнен на ваше усмотрение. Несколько полезных ссылок я оставлю в описании, а недостающую справочную информацию на тему установки вы без труда найдете в интернете. Итак, имеем свежий слабенький сервер с установленными клиентами сетей Yggdrasil, I2P и Tor.

Переходим в гит-репозиторий tinyproxy. Копируем ссылку. Чтобы клонировать репозиторий на сервер, устанавливаю git. Пишу git clone и указываю адрес. Инструкция по компиляции исходных кодов находится на главной странице репозитория. Скрипт autogen.sh завершается с ошибкой: устанавливаю стандартный набор для сборки программ. Ошибка повторяется. Хорошо, что в интернете меня не забанили. Устанавливаю набор инструментов autotools-dev и automake. Теперь autogen.sh отрабатывает корректно. При сборке версии прямиком из репозитория, после выполнения autogen.sh сразу переходим к команде make, а затем make install. Релизы tinyproxy на GitHub распространяются также в виде исходного кода и собираются аналогичным образом. Уже сейчас можно запустить прокси-сервер, однако все файлы установились в текущую директорию, а файл сервиса для systemd вовсе отсутствует.

Въедливый зритель наверняка возмутится: почему бы просто не установить tinyproxy из стандартного репозитория Debian, ведь tinyproxy там присутствует! Чтобы ясно ответить этот вопрос, давайте выполним команду apt install tinyproxy. В системе появился привычный сервис systemd, а также конфигурационный файл в /etc/tinyproxy. Открываем конфигурационный файл и указываем адрес, на который прокси-сервер будет принимать подключения пользователей. Это делается через параметр Listen. Адрес IPv6 Yggdrasil можно легко посмотреть через утилиту ifconfig. Теперь самое интересное: указываем апстримы, то есть адреса прокси-серверов, на которые будут передаваться те или иные подсети или домены. В нашем случае - это прокси i2pd для доменов ".i2p" и Tor - для доменов ".onion". Для i2pd рекомендую указать именно http-прокси, так как этот режим работы более удобен для управления адресной книгой и добавления новых коротких i2p-адресов прямо через браузер. Также возможно указание параметра "upstream none", который отвечает за прямое соединение прокси-сервера с конкретными адресами и доменами вне зависимости от других правил. Опускаемся ниже по файлу и комментируем строку "Allow" с локальным адресом, так как подключаться мы будем не с локальной машины. Если в конфигурационном файле нет ни одного значения "Allow", tinyproxy принимает подключения с любых адресов. Для комфортного использования необходимо закомментировать все параметры "ConnectPort", так как нет нужды ограничивать себя и наших пользователей при подключении к нестандартным портам. Сохраняем изменения и перезапускаем tinyproxy.

В настройках браузера назначаю HTTP-прокси. Естественно, на хостовой машине должен быть установлен Yggdrasil. Порт по умолчанию 8888. Кажется, всё работает корректно: проверка IP-адреса показала адрес сервера, на котором только что был установлен tinyproxy. Снова открываю конфигурационный файл прокси-сервера и удаляю домен ".onion" у прокси сети Tor. Этот параметр означает, что все соединения кроме Yggdrasil (отмечен в upstream none) и ".i2p" должны направляться в Tor. Перезапускаю tinyproxy и проверяю поведение через браузер. Не работает! Я по прежнему выхожу в сеть с IP-адреса моего сервера. Если убрать подсеть Yggdrasil и попробовать снова, tinyproxy наконец начнет работать корректно.

Возвращаемся к теме об использовании актуальной версии программного обеспечения, а не устаревших пакетов из репозиториев вашего любимого дистрибутива. Начиная с версии 1.12 tinyproxy будет корректно работать с обозначениями IPv6-подсетей, однако на момент съемки последний релиз 1.11, а тем более устаревший пакет из репозитория Debian этого делать не умеют.

Заменим устаревший бинарный файл tinyproxy на новый, который мы скомпилировали несколько минут назад: удалим /usr/bin/tinyproxy и скопируем туда новый одноименный файл. Казалось бы, что все хорошо, но теперь служба постоянно зависает при запуске. Люди мы взрослые и льстим себе, что умные, поэтому попробуем разобраться в причине. Явным образом передаю исполняемому файлу конфигурационный файл. Видим номера строк, на которые ругается tinyproxy. Как говорится, истина где-то рядом. Открываю конфигурационный файл через редактор nano с флагом -l, чтобы отображались номера строк, и комментирую проблемные строчки. Это устаревшие параметры, которые новая версия программы не хочет воспринимать. Пробую запустить tinyproxy, но опять зависание. Открываю файл сервиса, который расположен в /lib/systemd/system и немного упрощаю алгоритм запуска. Возможно, это не самое православное решение, но лишь бы работало. Комментирую параметр EnvironmentFile и меняю строку "ExecStart", явно указывая путь до конфигурационного файла. Делаю daemon-reload, чтобы изменения в сервисном файле вступили в силу и запускаю tinyproxy. Работает!

Проверка IP-адреса показывает адрес сервера. Проверим работоспособность перенаправления всего трафика через сеть Tor. Для этого удаляем в конфигурационном файле приписку ".onion" рядом с прокси Tor. Работает! Кстати, tinyproxy имеет веб-страницу мониторинга, доступную по умолчанию по адресу tinyproxy.stats. Естественно, открыть эту страницу можно только через сам прокси-сервер. Проверка адреса Yggdrasil также показывает, что мы сидим не со своего адреса, а с адреса сервера, где установлен tinyproxy. Смена адреса Yggdrasil через наш прокси также работает. Попробуем открыть домен из I2P. А теперь луковичный сайт ".onion". Всё работает корректно. Между делом говоря, мой публичный прокси-сервер настроен фактически аналогичным образом, только с дополнительным доступом из I2P помимо Yggdrasil. О настройке I2P-роутера смотрите другие мои видео и статьи.

Если вам не нужен выход в IPv6-сети через прокси-сервер, по сути дела вы можете использовать исключительно устаревший пакет из репозитория вашей операционной системы. Также кто-то сочтет лайфхаком предварительную установку полноценного пакета, чтобы создался файл службы tinyproxy, а затем обновит исполняемый файл, как это сделал я в примере. Ваш сервер - вам и решать, как вы будете его администрировать.

На этом конфигурацию мультисетевого сервера можно считать завершенной. По аналогии с показанным вы можете добавлять любые апстримы для других скрытых сетей или отдельных доменов и использовать единственный прокси-сервер на всех ваших устройствах для любых приложений, при этом не утруждая себя установкой дополнительно ПО на каждый девайс.