В прошлой статье я рассказал, какие выкрутасы можно сделать одним только браузером. Нам потребуются эти знания далее
Жаркий август 2020 показал, что базовые меры — это слишком мало и неэффективно. Нужно что-то большее
Выбирая решение, я ставил перед собой несколько целей:
Решение должно быть открытым
Решение должно быть бесплатным — только так оно может стать массовым
Решение должно быть децентрализованным — не должно быть единой точки отказа
Бомж-VPN. Хотелось иметь возможность соединиться с любым узлом сети забесплатно
Бомж-хостинг. Следствие предыдущего пункта. Возможность выкатить тестовый ресурс забесплатно
VPN отвалился сразу: даже рабочий VPN умер. VPN требует централизованного внешнего сервера — единая точка отказа. Наконец, VPN платный — не назвал бы лично себя нищебродом, но это точно не массовый вариант
TOR я пока что не рассматривал. Это вполне жизнеспособное решение, но у меня отсутствует экспертиза. В комментарии вызываю пояснительную бригаду о сильных и слабых сторонах реальной эксплуатации TOR. Сравнение сетей I2P и TOR
Я начал осваивать I2P. Идея мне показалась симпатичной. Особенно интересно, что сеть не просто выдержит резкий рост числа пользователей — она от этого станет работать лишь надёжнее (но это не точно). На лурке очень вдохновляющее описание возможностей, а wiki спускает с небес на Землю и даёт понять, что I2P — не серебряная пуля, и атаки по деанонимизации — реальность. Сложно и дорого, но реально. Для сравнения, без I2P — это как по паспорту представиться и приготовиться к обыску
Возможности, ограничения и болячки
Точно так же, как и в сети TOR, в сети I2P есть выходные ноды. Это значит, что через сеть I2P можно пролезть в обычный интернет. Однако следует понимать, что скорость работы оставляет желать лучшего — потоковое видео через I2P смотреть так себе идея
Интересно, что из сети I2P можно достучаться до нод TOR. Это мы обязательно настроим
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» / «Выключить» находятся на скриншоте в нижнем левом углу Кнопки «Restart» / «Перезапуск» и «Shutdown» / «Выключить» находятся на скриншоте в нижнем левом углу](https://habrastorage.org/getpro/habr/upload_files/fa5/b16/370/fa5b1637081a11d88743d4711d6ab1bf.jpg)
Установка на desktop
Состоит из двух обязательных частей — установки шлюза (inproxy) и настройки браузера (лайт или пожёстче — выбираем сами на свой вкус). Важно выполнить оба этапа, по отдельности они не имеют смысла
Установка шлюза
На оффициальном сайте проекта есть список загрузок — можно взять оттуда
В этом же списке присутствует секция «Пакеты для Debian/Ubuntu»
После установки пытаемся открыть http://localhost:7657/ — web-консоль роутера. Настоятельно рекомендую добавить страницу в закладки или даже закрепить (Pin Tab). Если страница открылась — вы всё сделали правильно
Настройка браузера. Лайт
В данном случае мы исходим из предположения, что вы не делаете ничего плохого, и просто желаете получить доступ к информации, которая огорчила ваше правительство. А правительство, словно плаксивая девочка, склонно обижаться на любую информацию. Например, в России заблокирован linkedin. Жутко опасный и экстремистский ресурс, ага
В данном случае нас не пугают утечки информации. Например, сайт в сети i2p может запрашивать какой-нибудь jquery с CDN. Что такого в js-библиотеке, которую запрашивают миллионы, если не миллиарды раз в день?
![Мы предполагаем, что не делаем ничего плохого, и нас не интересует сайт-приманка товарища майора Василия Мусорова с какой-то жестью, который загружает ресурсы напрямую в обход I2P или TOR по абсолютным ссылкам, выдавая ваш реальный IP-адрес. Оригинал изображения искать где-то тут: http://vasya-lozhkin.ru/pictures/. Я не нашёл =( Мы предполагаем, что не делаем ничего плохого, и нас не интересует сайт-приманка товарища майора Василия Мусорова с какой-то жестью, который загружает ресурсы напрямую в обход I2P или TOR по абсолютным ссылкам, выдавая ваш реальный IP-адрес. Оригинал изображения искать где-то тут: http://vasya-lozhkin.ru/pictures/. Я не нашёл =(](https://habrastorage.org/getpro/habr/upload_files/6c8/0db/1f0/6c80db1f00f3577ba6dc9d7daa1cf513.jpg)
Для настройки нам потребуется дополнение SmartProxy. Настройка производится в 2 простых шага — необходимо добавить входной шлюз I2P в список proxy-серверов и создать правила проксирования
![Добавляем входной шлюз I2P в список proxy-серверов Добавляем входной шлюз I2P в список proxy-серверов](https://habrastorage.org/getpro/habr/upload_files/81c/f86/00b/81cf8600bf146cca255aec9218975ce1.jpg)
![Создаём правила проксирования для i2p-сайтов Создаём правила проксирования для i2p-сайтов](https://habrastorage.org/getpro/habr/upload_files/c8c/f7d/f98/c8cf7df981b22db77cb653d9adfdd2e7.jpg)
![Создаём правила проксирования для onion-сайтов Создаём правила проксирования для onion-сайтов](https://habrastorage.org/getpro/habr/upload_files/56a/908/459/56a908459f5d9e3da6259156b87f5bea.png)
Настройка браузера. Для любителей пожёстче
Паранойя может затребовать гарантий отсутствия утечек. Из наличия паранойи не следует, что мы кинемся смотреть упомянутый ранее сайт товарища майора Василия Мусорова. Настройка проводится в несколько простых шагов
У меня нет лишнего браузера в системе, чтобы полностью выделить его под 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» / «Настройки Сети» Открываем настройки и находим «Network Settings» / «Настройки Сети»](https://habrastorage.org/getpro/habr/upload_files/6bf/a1f/85a/6bfa1f85a02620b712653173e6bc58dd.png)
![И указываем входной шлюз I2P И указываем входной шлюз I2P](https://habrastorage.org/getpro/habr/upload_files/0e0/67e/e0d/0e067ee0d5e3cc0b6a6bc0ba26e3e211.png)
Установка на Android
Суть ровно та же, но инструменты немного другие
Установка шлюза
На всё той же странице загрузок есть секция «Android»
![Секция загрузок для Android Секция загрузок для Android](https://habrastorage.org/getpro/habr/upload_files/c98/18e/194/c9818e194339e266a058eed70333b920.png)
Настройка браузера. Лайт
![Находим в менеджере дополнений FoxyProxy и устанавливаем Находим в менеджере дополнений FoxyProxy и устанавливаем](https://habrastorage.org/getpro/habr/upload_files/118/12c/5ec/11812c5ec5aa09ec776afebe0f4d788a.jpg)
![Переходим в его настройки, нажимаем «Добавить» Переходим в его настройки, нажимаем «Добавить»](https://habrastorage.org/getpro/habr/upload_files/6c6/b82/eef/6c6b82eef58bd585fee0b0f7df86d33e.jpg)
![Указываем адрес шлюза, листаем вниз и жмём «Сохранить» Указываем адрес шлюза, листаем вниз и жмём «Сохранить»](https://habrastorage.org/getpro/habr/upload_files/428/e55/b19/428e55b1962e7d2e12e9e84446dcb838.jpg)
![И добавляем шаблоны для всего домена i2p и onion И добавляем шаблоны для всего домена i2p и onion](https://habrastorage.org/getpro/habr/upload_files/a7b/67b/75c/a7b67b75c83667845f271bfa529008bf.jpg)
![В настройках FoxyProxy убеждаемся, что он включен В настройках FoxyProxy убеждаемся, что он включен](https://habrastorage.org/getpro/habr/upload_files/619/d7a/fe1/619d7afe16e684d44d66e2508f2d6d76.jpg)
Рецепты по настройке
Я расскажу про несколько опциональных шагов
DNS-over-HTTPS
Для тех, что не читал предыдущую статью: необходимо добавить i2p и onion в исключения. Иначе браузер будет пытаться резолвить эти домены на Cloudflare с предсказуемым результатом
I2P + uBlock Origin
Мы умеем учиться на ошибках, поэтому добавим в исключения зоны i2p и onion, таким образом полностью отключив блокировщик рекламы для всех ресурсов i2p и onion
![Открываем настройки uBlock Origin Открываем настройки uBlock Origin](https://habrastorage.org/getpro/habr/upload_files/1da/106/ac0/1da106ac072200bb6366a1e7f5685149.jpg)
![Добавляем в uBlock Origin исключения для доменов i2p и onion Добавляем в uBlock Origin исключения для доменов i2p и onion](https://habrastorage.org/getpro/habr/upload_files/d5f/2b3/36a/d5f2b336a6954d896064657ddc1262d5.jpg)
Стало лучше, чем было, но не идеально — теряется контроль над загрузкой стороннего контента (3rd party). Хотелось бы только отключить резолв имён i2p и onion
Дополнительные подписки
В список подписок есть смысл добавить адреса:
http://stats.i2p/cgi-bin/newhosts.txt
http://identiguy.i2p/hosts.txt
http://isitup.i2p/alive-hosts.txt
http://inr.i2p/export/alive-hosts.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 или isitup. А ещё есть поисковик
![Внезапно web-версия telegram. Правда, я понятия не имею, знает ли про это зеркало администрация telegram. Впрочем, через выходную ноду можно достучаться и до оригинала Внезапно web-версия telegram. Правда, я понятия не имею, знает ли про это зеркало администрация telegram. Впрочем, через выходную ноду можно достучаться и до оригинала](https://habrastorage.org/getpro/habr/upload_files/f97/7fe/d42/f977fed428257f95f9f5fafc086d6a76.jpg)
А ещё есть телеграмовские MTProto прокси. Идея сводится к созданию туннелей на указанные i2p-хосты. Инструкция на сайте
Ещё есть торренты и почта. Ничего из этого я ещё не пробовал использовать
Находил флибусту и ebooks.i2p — последний выглядит вообще дорого-богато
Вместо заключения
Следует понимать, что I2P — не самостоятельный ресурс, а в первую очередь фидер — среда передачи данных. Поэтому область применимости технологии достаточно широка и упирается, скорее, в воображение
Я ни слова не сказал про i2pd. Проект достоин внимания: он производительнее при меньшем потреблении ресурсов. Пока что у меня нет экспертизы
KasperGreen
Можете рассказать о плюсах/минусах интеграции IPFS с I2P?
kai3341 Автор
Ну только то, что это разные вещи. Ключевая разница в том, что IPFS — это про статику. Но экспертизы в этом вопросе у меня нет