Цензура в интернете. Когда базовых мер недостаточно — I2P
В прошлой статье я рассказал, какие выкрутасы можно сделать одним только браузером. Нам потребуются эти знания далее
Жаркий август 2020 показал, что базовые меры — это слишком мало и неэффективно. Нужно что-то большее
Выбирая решение, я ставил перед собой несколько целей:
Решение должно быть открытым
Решение должно быть бесплатным — только так оно может стать массовым
Решение должно быть децентрализованным — не должно быть единой точки отказа
Бомж-VPN. Хотелось иметь возможность соединиться с любым узлом сети забесплатно
Бомж-хостинг. Следствие предыдущего пункта. Возможность выкатить тестовый ресурс забесплатно
VPN отвалился сразу: даже рабочий VPN умер. VPN требует централизованного внешнего сервера — единая точка отказа. Наконец, VPN платный — не назвал бы лично себя нищебродом, но это точно не массовый вариант
TOR я пока что не рассматривал. Это вполне жизнеспособное решение, но у меня отсутствует экспертиза. В комментарии вызываю пояснительную бригаду о сильных и слабых сторонах реальной эксплуатации TOR
Я начал осваивать I2P. Идея мне показалась симпатичной. Особенно интересно, что сеть не просто выдержит резкий рост числа пользователей — она от этого станет работать лишь надёжнее (но это не точно). На лурке очень вдохновляющее описание возможностей, а wiki спускает с небес на Землю и даёт понять, что I2P — не серебряная пуля, и атаки по деанонимизации — реальность. Сложно и дорого, но реально. Для сравнения, без I2P — это как по паспорту представиться и приготовиться к обыску
Возможности, ограничения и болячки
Точно так же, как и в сети TOR, в сети I2P есть выходные ноды. Это значит, что через сеть I2P можно пролезть в обычный интернет. Однако следует понимать, что скорость работы оставляет желать лучшего — потоковое видео через I2P смотреть так себе идея
I2P не ограничивает себя каким-то протоколом. Вместо этого сеть предоставляет среду передачи данных. Я пробрасывал через сеть I2P соединение с базой данных. Туннели I2P позволяют пробросить любой ресурс, таким образом сделав его доступным для использования любыми программами. Если кто-то не знаком с туннелями — идея проста и состоит в том, чтобы для некоторого открытого порта на удалённом сервере открыть порт на своей машине, и в дальнейшем любой локальной программой подключаться к локальному порту, что точно умеет любая программа, а тонкостями переноса байтов на тот порт удалённой машины и обратно занимается уже туннелирующая программа (частный случай туннеля).
Следствия туннелей — бомж-VPN и бомж-хостинг. Я счастлив — я могу выкатить ресурс бесплатно. Я могу соединить 2 машины бесплатно. Любой другой участник сети может сделать всё то же самое бесплатно. Вкусно
Функционировать сеть сможет, даже если шаловливые ручки вновь потянутся к Большому Рубильнику — белорусские реалии именно такие, он существует
Больным местом является изменение маршрутов (следовательно, dest hash). Но я надеюсь, что проблема решаема — существует версия для Android, которая подразумевает переход между сетью оператора и разными точками доступа wifi, а в настройках роутера появился экспериментальный «Laptop Mode»
Ошибки и заблуждения
Я заметил несколько шаблонов заблуждений
Ой, мне по телевизору сказали, что в этом вашем i2p такое показывают! Это вообще законно?
Больше верьте слухам. Ничего там нет такого, чего нет в обычном интернете. I2P ставит своей целью среду передачи данных. Протоколы TCP и UDP, передают более чем 99% информации в интернете, включая незаконный контент. Давайте бороться с контентом, а не транспортом его доставки
Как интернет отключат — обязательно установлю
И будешь куковать, пока сеть не восстановится. I2P — не магия для обхода цензуры, а вполне реальная оверлейная сеть из плоти и крови, которая получает информацию о других участниках сети только во время своей работы
Хорошо, я установил, запустил, что-то потыкал — и выключил. Как только интернет выключат — ух держите меня семеро! Включу I2P — и всё у меня станет расчудесно!
Та же проблема. С высокой вероятностью, тебе не удастся найти вообще никого из тех, с кем ты ранее устанавливал соединение. Запусти I2P как службу — пусть висит себе в фоне. Она есть не просит (ну кроме памяти). Только так ты встретишь час Ч в готовности
Я на минуточку. Туда и назад
Узлы, часто разрывающие соединения с другими участниками сети, по сложившейся традиции получают в жбан попадают в бан-листы. Не стоит возводить это правило в абсолют, просто желательно, чтобы служба работала в фоне. Не дёргайте её на каждый чих — она не кусает и есть не просит
Ну и совсем кошерная остановка службы I2P — это в консоли роутера нажать кнопочку «Shutdown» / «Выключить». Демон I2P остановися сам в худшем случае через 10 минут — как только истекут уже установленные соединения с другими участниками сети i2p
Кнопки «Restart» / «Перезапуск» и «Shutdown» / «Выключить» находятся на скриншоте в нижнем правом углуУстановка на desktop
Состоит из двух обязательных частей — установки шлюза (inproxy) и настройки браузера (лайт или пожёстче — выбираем сами на свой вкус). Важно выполнить оба этапа, по отдельности они не имеют смысла
Установка шлюза
На оффициальном сайте проекта есть список загрузок — можно взять оттуда
В этом же списке присутствует секция «Пакеты для Debian/Ubuntu»
После установки пытаемся открыть http://localhost:7657/ — web-консоль роутера. Настоятельно рекомендую добавить страницу в закладки или даже закрепить (Pin Tab). Если страница открылась — вы всё сделали правильно
Настройка браузера. Лайт
В данном случае мы исходим из предположения, что вы не делаете ничего плохого, и просто желаете получить доступ к информации, которая огорчила ваше правительство. А правительство, словно плаксивая девочка, склонно обижаться на любую информацию. Например, в России заблокирован linkedin. Жутко опасный и экстремистский ресурс, ага
В данном случае нас не пугают утечки информации. Например, сайт в сети i2p может запрашивать какой-нибудь jquery с CDN. Что такого в js-библиотеке, которую запрашивают миллионы, если не миллиарды раз в день?
Мы предполагаем, что не делаем ничего плохого, и нас не интересует сайт-приманка товарища майора Василия Мусорова с какой-то жестью, который загружает ресурсы напрямую в обход I2P или TOR по абсолютным ссылкам, выдавая ваш реальный IP-адрес. Оригинал изображения искать где-то тут: http://vasya-lozhkin.ru/pictures/. Я не нашёл =(Для настройки нам потребуется дополнение SmartProxy. Настройка производится в 2 простых шага — необходимо добавить входной шлюз I2P в список proxy-серверов и создать правило проксирования
Добавляем входной шлюз I2P в список proxy-серверовСоздаём правила проксирования для i2p-сайтовНастройка браузера. Для любителей пожёстче
Паранойя может затребовать гарантий отсутствия утечек. Из наличия паранойи не следует, что мы кинемся смотреть упомянутый ранее сайт товарища майора Василия Мусорова. Настройка проводится в несколько простых шагов
У меня нет лишнего браузера в системе, чтобы полностью выделить его под I2P. Воспользуюсь уже установленным firefox. Следующий вариант работает в Linux:
FIREFOX_PROFILE="firefox-i2p"
FIREFOX_HOME="${HOME}/${FIREFOX_PROFILE}"
mkdir -p "$FIREFOX_HOME"
env HOME="$FIREFOX_HOME" firefox
То есть идея проста: заставить firefox работать с полностью чистым профилем, который никак не повлияет на основной, и который мы сможем снести при первых же намёках на проблемы, как дедушке яичко. Какие бы мы туда дополнения ни ставили, какие бы настройки там не делали — основным профилем можно будет продолжать пользоваться
У меня нет ни одной машины с Windows и MacOS. В комментариях, пожалуйста, расскажите, как сделать похожий финт ушами в Windows. А в MacOS этот фокус должен сработать, но я не тестировал
Открываем настройки и находим «Network Settings» / «Настройки Сети»И указываем входной шлюз I2PУстановка на Android
Суть ровно та же, но инструменты немного другие
Установка шлюза
На всё той же странице загрузок есть секция «Android»
Секция загрузок для AndroidНастройка браузера. Лайт
Находим в менеджере дополнений FoxyProxy и устанавливаемПереходим в его настройки, нажимаем «Добавить»Указываем адрес шлюза, листаем вниз и жмём «Сохранить»И добавляем шаблон для всего домена i2pВ настройках FoxyProxy убеждаемся, что он включенРецепты по настройке
Я расскажу про несколько опциональных шагов
DNS-over-HTTPS
Для тех, что не читал предыдущую статью: необходимо добавить i2p и onion в исключения. Иначе браузер будет пытаться резолвить эти домены на Cloudflare с предсказуемым результатом
I2P + uBlock Origin
Мы умеем учиться на ошибках, поэтому добавим в исключения зоны i2p и onion, таким образом полностью отключив блокировщик рекламы для всех ресурсов i2p и onion
Открываем настройки uBlock OriginДобавляем в uBlock Origin исключения для доменов i2p и onionСтало лучше, чем было, но не идеально — теряется контроль над загрузкой стороннего контента (3rd party). Хотелось бы только отключить резолв имён i2p и onion
Дополнительные подписки
В список подписок есть смысл добавить адреса:
http://identiguy.i2p/hosts.txt
http://inr.i2p/export/alive-hosts.txt
http://stats.i2p/cgi-bin/newhosts.txt
Покорми java памятью
Входной шлюз I2P написан на языке java. По умолчанию он стартует с ограничением в 128M. Этого хватит для знакомства и неспешного погружения в дивный новый мир невидимого интернета. Больше всего памяти потребляет компонент NetDB — база данных о других хостах сети I2P. Чем их больше известно, тем выше надёжность и тем выше вероятность, что в час Ч, когда интернет снова сдохнет, Вам таки удастся найти лазейку — доступный хост из списка известных. Правда, гарантий никаких
В случае Ubuntu/Debian:
sudo dpkg-reconfigure i2p
Как это сделать для Windows — я не знаю и очень надеюсь на комментарии
Когда нельзя открыть порт меньше 1024, но очень хочется, то можно
Очень спорный рецепт. В общем случае, так делать не надо. Но если очень хочется, то можно. Я проделал это для прощупывания возможностей I2P. То есть just for fun
Приключения начались с вопроса «так где же java?»
which java | xargs file --mime-type
/usr/bin/java: inode/symlink
Окей
which java | xargs readlink | xargs file --mime-type
/etc/alternatives/java: inode/symlink
Больше симлинков богу симлинков!
which java | xargs readlink | xargs readlink | xargs file --mime-type
/usr/lib/jvm/java-11-openjdk-amd64/bin/java: application/x-pie-executable
Следует понимать, что конфигурация у меня может не совпадать с конфигурацией у Вас. Идея проста — добавлять в середину секцию xargs readlink
до наступления просветления — пока file
не скажет application/x-pie-executable
. Как только java нашлась — из получившейся команды удаляем 2 последних слова file --mime-type
, например, нажав ^W
дважды, и вместо этого добавляем setcap 'cap_net_bind_service=+ep'
:
which java | xargs readlink | xargs readlink | xargs setcap 'cap_net_bind_service=+ep'
Возможно, потребуется добавить также возможность открытия сырого сокета setcap 'cap_net_raw=+ep'
:
which java | xargs readlink | xargs readlink | xargs setcap 'cap_net_raw=+ep'
Но в следующий раз я просто разверну docker с nginx
А что ещё там есть?
Очень рекомендую почитать русскоязычную wiki и полистать списки identiguy
Внезапно web-версия telegram. Правда, я понятия не имею, знает ли про это зеркало администрация telegram. Впрочем, через выходную ноду можно достучатсья и до оригиналаА ещё есть телеграмовские MTProto прокси. Идея сводится к созданию туннелей на указанные i2p-хосты. Инструкция на сайте
Ещё есть торренты и почта. Ничего из этого я ещё не пробовал использовать
Находил флибусту и ebooks.i2p — последний выглядит вообще дорого-богато
Вместо заключения
Следует понимать, что I2P — не самостоятельный ресурс, а в первую очередь фидер — среда передачи данных. Поэтому область применимости технологии достаточно широка и упирается, скорее, в воображение
Я ни слова не сказал про i2pd. Проект достоин внимания: он производительнее и при меньшем потреблении ресурсов. Пока что у меня нет экспертизы