I2P для многих весьма экзотический фрукт. Он не пользуется спросом по очевидным причинам:
- Имеет мало outproxy, что делает его почти неюзабельным для посещения клирнета (в отличие от Tor)
- Имеет низкую скорость внутри сети, даже при использовании неанонимных настроек, отчего сайты в I2P выглядят, как застрявшие в нулевых
- Долго запускается, особенно в первый раз (до часа)
- Иная "философия". Каждый является частью цепи, вне зависимости от устройства, расположения и прочих факторов.
- Более устойчивый к анализу. Отслеживание становится сложнее, как и блокировка (отчего I2P работает даже в Туркменистане, по слухам)
- Больше настроек для обеспечения анонимности: кол-во туннелей, хопов, рандомизация и тому подобное.
Вас может смутить определение "роутер", но I2P роутер делает по сути то же, что и ваш роутер в квартире: гоняет трафик туда сюда, только на программном уровне.
В качестве роутера будет использоваться i2pd (PurpleI2P/i2pd на гитхабе). По сравнению с официальным роутером I2P, написанным на Java, он более быстрый и компактный, менее требовательный, да и вообще от СНГшных ребят. Если вы боитесь баек о том, что это проделки условного ФСБ, то: а) можете идти юзать оригинальный роутер I2P или его форк I2P+ (но гайды тоже сами ищите
), б) Tor, которым вы возможно пользуетесь сейчас, преимущественно финансируется правительством США.
После того, как вы скачали i2pd и куда-то его распаковали, запустите его. (К слову, Windows Defender любит на него жаловаться. Если что - добавьте в исключения) В трее у вас появится соответствующий значок, тыкните по нему правой кнопкой и нажмите datadir. Datadir - место, где хранятся ваши данные и конфиги роутера. По умолчанию это %appdata%/i2pd (Windows) и ~/.i2pd/ (Linux). Если вы хотите изменить путь, то при запуске i2pd указывайте флаг --datadir с путём.
Также у i2pd есть небольшая веб-консоль, располагающаяся на localhost:7070, там же в случае чего можно узнать текущий datadir, а также прочую статистику.
А теперь, возвращаемся в datadir. В директории создаём (если нету) i2pd.conf, в нём мы и будем вертеть роутер, как нам угодно:
Теперь, когда I2P роутер полностью настроен под нас, можно приступать к настройке остального ПО под него.
Важное уточнение (которое я забыл делать на протяжении гайда), после изменения %datadir%/tunnels.conf (к которому мы будем часто обращаться) нужно, либо перезагружать конфиги, либо рестартать i2pd целиком. Перезагрузить конфиги можно так:
В качестве роутера будет использоваться i2pd (PurpleI2P/i2pd на гитхабе). По сравнению с официальным роутером I2P, написанным на Java, он более быстрый и компактный, менее требовательный, да и вообще от СНГшных ребят. Если вы боитесь баек о том, что это проделки условного ФСБ, то: а) можете идти юзать оригинальный роутер I2P или его форк I2P+ (но гайды тоже сами ищите
После того, как вы скачали i2pd и куда-то его распаковали, запустите его. (К слову, Windows Defender любит на него жаловаться. Если что - добавьте в исключения) В трее у вас появится соответствующий значок, тыкните по нему правой кнопкой и нажмите datadir. Datadir - место, где хранятся ваши данные и конфиги роутера. По умолчанию это %appdata%/i2pd (Windows) и ~/.i2pd/ (Linux). Если вы хотите изменить путь, то при запуске i2pd указывайте флаг --datadir с путём.
Также у i2pd есть небольшая веб-консоль, располагающаяся на localhost:7070, там же в случае чего можно узнать текущий datadir, а также прочую статистику.
А теперь, возвращаемся в datadir. В директории создаём (если нету) i2pd.conf, в нём мы и будем вертеть роутер, как нам угодно:
INI:
# Здесь описаны самые нужные, на мой взгляд, настройки
# Если вам нужно что-то ещё, то в папке с i2pd есть папка contrib, в которой есть i2pd.conf с описанием всех настроек.
# Также, параметры, указанные здесь, являются стандартными в конфигурации i2pd.
# Общие настройки
# Пропускная способность вашей сети
# Варианты: L - 32KB/sec, O - 256KB/sec, P - 2048KB/sec, X - без лимита. Также можно указывать в килобайтах.
# Чем выше пропускная способность, тем больше ваш роутер участвует в сети (следовательно, больше туннелей, выше скорость загрузки и т.д.)
bandwidth = 8192
# Процент от пропускной способности, который может использоваться для транзита (передачи чужих данных через себя)
share = 100
# Отключение транзита полностью
notransit = false
# Настройки HTTP прокси (используется для сайтов)
[httpproxy]
# Если этот порт чем-то занят, то вы можете его изменить, но не забудьте указывать его далее при настройке!
port = 4444
# outproxy нужен для доступа во внешний интернет, если у вас внезапно появилось желание использовать для этого I2P.
# Некоторые публичные прокси (использовать на свой страх и риск!): false.i2p; exit.stormycloud.i2p
outproxy = http://your-outproxy.i2p <по умолчанию не указан>
# Дальше идут настройки длины и количества туннелей. Кратко:
# Больше длина туннелей - выше анонимность и задержка, ниже скорость (больше трёх обычно не требуется)
# Больше количество туннелей - выше скорость и нагрузка на железо/сеть
# Входящие туннели
inbound.length = 3 (длина, макс. 8)
inbound.quantity = 5 (количество, макс. 16)
inbound.lengthVariance = 0 (насколько длина может отличаться, можно указать для затруднения анализа, ввиду случайности длины туннеля, диапазон -3 и 3)
# Исходящие туннели
outbound.length = 3
outbound.quantity = 5
outbound.lengthVariance = 0
# Настройки SOCKS прокси (используется для всего остального)
[socksproxy]
# Настройки у SOCKS идентичны HTTP прокси
# Кроме outproxy, не только IP, но и порт, а также параметр enabled. По умолчанию не указано
outproxy.enabled = true
outproxy = 1.2.3.4
outproxyport = 1080
Важное уточнение (которое я забыл делать на протяжении гайда), после изменения %datadir%/tunnels.conf (к которому мы будем часто обращаться) нужно, либо перезагружать конфиги, либо рестартать i2pd целиком. Перезагрузить конфиги можно так:
Bash:
kill -HUP $( cat %datadir%/i2pd.pid )
# Либо в вебконсоли: 127.0.0.1:7070 -> Router commands -> Reload tunnels configuration
# Либо в трее: ПКМ по значку i2pd -> Reload tunnels config
Теперь, пришло время настроить браузер, чтобы можно было лазить по форумам, бордам и т.п. Рекомендуется использовать Firefox, поскольку Chromium браузеры используют системные настройки прокси, что неудобно. Но и Chromium браузеры мы рассмотрим.
Заходим в Firefox, далее на about:config, затем вводим следующие значения:
media.peerConnection.ice.proxy_only - true (для предотвращения утечки IP через WebRTC)
media.peerConnection.ice.proxy_only - false (для отключения поисковика в строке)
В случае с Chromium браузерами, можно перейти на chrome://flags и выставить настройку "## Anonymize local IPs exposed by WebRTC." в Enabled.
Далее - настраиваем прокси. В Firefox заходим в настройки, ищем настройки прокси и устанавливаем следующие значения:
HTTP: 127.0.0.1:4444
SSL: 127.0.0.1:4444
Если используете Chromium браузер, то устанавливайте прокси в вашей системе (ну или найдите расширение для этого). Я же говорил, будет неудобно
На этом, настройка браузера закончена. К слову, если у вас проблемы с открытием .i2p ссылок, то поставьте после домена слэш (/) или перед доменом http://. В случае с Firefox можно докинуть следующий флаг в about:config:
browser.fixup.domainsuffixwhitelist.i2p - true
Проверить работоспособность можно на reg.i2p, о которым мы далее и поговорим.
Заходим в Firefox, далее на about:config, затем вводим следующие значения:
media.peerConnection.ice.proxy_only - true (для предотвращения утечки IP через WebRTC)
media.peerConnection.ice.proxy_only - false (для отключения поисковика в строке)
В случае с Chromium браузерами, можно перейти на chrome://flags и выставить настройку "## Anonymize local IPs exposed by WebRTC." в Enabled.
Далее - настраиваем прокси. В Firefox заходим в настройки, ищем настройки прокси и устанавливаем следующие значения:
HTTP: 127.0.0.1:4444
SSL: 127.0.0.1:4444
Если используете Chromium браузер, то устанавливайте прокси в вашей системе (ну или найдите расширение для этого). Я же говорил, будет неудобно
На этом, настройка браузера закончена. К слову, если у вас проблемы с открытием .i2p ссылок, то поставьте после домена слэш (/) или перед доменом http://. В случае с Firefox можно докинуть следующий флаг в about:config:
browser.fixup.domainsuffixwhitelist.i2p - true
Проверить работоспособность можно на reg.i2p, о которым мы далее и поговорим.
Для начала, нужно кое-что прояснить, ибо это вам пригодится при создании своего eepsite. У каждого роутера может быть "направление" на его конечную точку, будь то сайт, сервис, а иногда и просто входящие подключения. Грубо говоря, это и есть тот самый IP, только в мире I2P.
Первый тип адресов - .b32.i2p адреса, из 52 символов. Пользователям Tor они покажутся довольно знакомыми. Они представляют собой SHA-256 хеш направления, закодированный в Base32. Когда вы хотите перейти по такой ссылке, ваш роутер обращается к Leaseset (местная IP-маршрутизация, если вам так проще) и получает направление, в котором есть публичные ключи шифрования для установки соединения.
Однако, вы часто можете встретить более короткие и осмысленные ссылки .i2p. Тут вступает в игру addressbook. Адрес-бук - кэш DNS местного разлива, только вечно живучий и с возможностью им манипулировать. Адрес-бук хранит домен, b32 ссылку и направление. Но где же брать эти домены? Тут вступает в игру ранее упомянутый reg.i2p, который выступает в роли DNS. Помимо него есть и другие сервисы регистрации, на которые можно "подписаться", и при запуске с них будут получаться домены. По умолчанию в i2pd есть подписка на reg.i2p, identiguy.i2p и stats.i2p, при желании можете найти и поставить другие сервисы.
К слову, если домен не найден в адрес-буке, то роутер предложит получить его в одном из сервисов. Если он найдётся, то будет предложено добавить домен в адрес-бук.
Первый тип адресов - .b32.i2p адреса, из 52 символов. Пользователям Tor они покажутся довольно знакомыми. Они представляют собой SHA-256 хеш направления, закодированный в Base32. Когда вы хотите перейти по такой ссылке, ваш роутер обращается к Leaseset (местная IP-маршрутизация, если вам так проще) и получает направление, в котором есть публичные ключи шифрования для установки соединения.
Однако, вы часто можете встретить более короткие и осмысленные ссылки .i2p. Тут вступает в игру addressbook. Адрес-бук - кэш DNS местного разлива, только вечно живучий и с возможностью им манипулировать. Адрес-бук хранит домен, b32 ссылку и направление. Но где же брать эти домены? Тут вступает в игру ранее упомянутый reg.i2p, который выступает в роли DNS. Помимо него есть и другие сервисы регистрации, на которые можно "подписаться", и при запуске с них будут получаться домены. По умолчанию в i2pd есть подписка на reg.i2p, identiguy.i2p и stats.i2p, при желании можете найти и поставить другие сервисы.
К слову, если домен не найден в адрес-буке, то роутер предложит получить его в одном из сервисов. Если он найдётся, то будет предложено добавить домен в адрес-бук.
Когда браузер настроен, и мы разобрались, как вообще устроены здесь ссылки, можно прошвырнуться по интересным сайтам. Оставлю небольшой список интересных сайтов, обзор на каждый делать не буду:
stats.i2p - статистика сети
reg.i2p - крупный регистратор доменов
notbob.i2p - мониторинг сайтов
stormycloud.i2p - некто, кто держит кучу I2P сервисов (outproxy, reseed сервер, xmr нода)
333.i2p - сайт разрабов i2pd
ilita.i2p - "хаб" с кучей других сервисов для изучения
hq.postman.i2p - почта (о ней подробнее позже)
reg.i2p - крупный регистратор доменов
notbob.i2p - мониторинг сайтов
stormycloud.i2p - некто, кто держит кучу I2P сервисов (outproxy, reseed сервер, xmr нода)
333.i2p - сайт разрабов i2pd
ilita.i2p - "хаб" с кучей других сервисов для изучения
hq.postman.i2p - почта (о ней подробнее позже)
Самый популярный почтовый сервис здесь - hq.postman.i2p. Ничего не мешает вам поднять свой (об этом будет дальше), если не доверяете этому, но в рамках гайда будем рассматривать его.
Для начала, создаём почту. Для этого тыкаем на "1. Creating a mailbox", указываем желаемые креды и запоминаем их.
На этом аккаунт готов. Теперь нужно приступать к настройке почтового клиента.
Наш подопытный для этого - Thunderbird. Вам ничего не мешает использовать любой желаемый клиент, данные те же, найти куда их вводить - несложно.
Почта (очевидно) не работает по HTTP, следовательно, у нас есть два варианта подключения. Первый - указать SOCKS5 прокси в клиенте и использовать данные сервиса, "как есть". Второй - поднять клиентские туннели в i2pd и настроить почтовый клиент на работу с ними. Рассмотрим оба.
Первый вариант: переходим в настройки клиента, устанавливаем SOCKS прокси. По умолчанию это 127.0.0.1:4447. Далее, создаём почту, указываем в ней свои креды. Параметры сервера ставим такие:
POP3 - pop.postman.i2p:110
SMTP - smtp.postman.i2p:25
Защиту соединения для обоих не ставим, аутентификация - по обычному паролю.
Далее второй вариант: поднимаем клиентские туннели. Это может быть полезным, если почтовый клиент не поддерживает прокси или почта слишком медленная для вас. Каждый клиентский туннель создаёт отдельные туннели и не делит их с другими. Открываем файл по пути %datadir%/tunnels.conf (если нет - создаём) и вписываем:
Прокси, соответственно, не ставим, а сразу переходим к настройке почты. Данные там те же, только вместо адресов указывается localhost, а порты 7660 (POP3) и 7659 (SMTP).
Вне зависимости от варианта, вы попадаете в свою почту. Теперь вы вольны отправлять и принимать письма. Можете ещё настроить OpenPGP - углубляться в это не буду, ибо напрямую к I2P не относится, но учитывайте, что ваши письма хранятся непонятно где непонятно кем без шифрования, поэтому стоит обезопасить себя при помощи OpenPGP.
Для начала, создаём почту. Для этого тыкаем на "1. Creating a mailbox", указываем желаемые креды и запоминаем их.
На этом аккаунт готов. Теперь нужно приступать к настройке почтового клиента.
Наш подопытный для этого - Thunderbird. Вам ничего не мешает использовать любой желаемый клиент, данные те же, найти куда их вводить - несложно.
Почта (очевидно) не работает по HTTP, следовательно, у нас есть два варианта подключения. Первый - указать SOCKS5 прокси в клиенте и использовать данные сервиса, "как есть". Второй - поднять клиентские туннели в i2pd и настроить почтовый клиент на работу с ними. Рассмотрим оба.
Первый вариант: переходим в настройки клиента, устанавливаем SOCKS прокси. По умолчанию это 127.0.0.1:4447. Далее, создаём почту, указываем в ней свои креды. Параметры сервера ставим такие:
POP3 - pop.postman.i2p:110
SMTP - smtp.postman.i2p:25
Защиту соединения для обоих не ставим, аутентификация - по обычному паролю.
Далее второй вариант: поднимаем клиентские туннели. Это может быть полезным, если почтовый клиент не поддерживает прокси или почта слишком медленная для вас. Каждый клиентский туннель создаёт отдельные туннели и не делит их с другими. Открываем файл по пути %datadir%/tunnels.conf (если нет - создаём) и вписываем:
INI:
# Кратко о настройках туннеля:
# type - тип туннеля (в нашем случае client, поскольку мы работаем через обычный TCP, и как клиент). Другие типы будут разбираться далее
# address - что слушает наш туннель (127.0.0.1 / 0.0.0.0)
# port - порт
# destination - направление
# destinationport - порт направления. Если не указан, то подхватывает порт первого серверного туннеля на направлении. (следовательно, если)
# keys - ключи. От ключей зависит наше направление. Если использовать одинаковые - для обоих туннелей будут одинаковы наши направления
# Также, тут доступны настройки, по типу inbound.length и т.д.
[SMTP]
type = client
address = 127.0.0.1
port = 7659
destination = smtp.postman.i2p
keys = smtp-keys.dat
[POP3]
type = client
address = 127.0.0.1
port = 7660
destination = pop.postman.i2p
keys = pop3-keys.dat
Вне зависимости от варианта, вы попадаете в свою почту. Теперь вы вольны отправлять и принимать письма. Можете ещё настроить OpenPGP - углубляться в это не буду, ибо напрямую к I2P не относится, но учитывайте, что ваши письма хранятся непонятно где непонятно кем без шифрования, поэтому стоит обезопасить себя при помощи OpenPGP.
Настройка роутера для IRC не сильно отличается от настройки для почты. Тут также есть два варианта: SOCKS прокси и поднятие клиентского туннеля. Показывать буду на примере Pidgin.
Идём в Accounts > Manage Accounts > Add...
Протокол - IRC. Юзернейм - какой пожелаете. Пароль - в зависимости от того, какая система авторизации на сервере. Самых распространённых IRC серверов, на мой взгляд, всего два: irc.postman.i2p (преимущественно англ. комьюнити и юзеры I2P/I2P+) и irc.ilita.i2p (преимущественно ру. комьюнити и юзеры i2pd). Если не доверяете этим серверам - спокойно поднимайте свой.
Если порт сервера отличается от стандартного (6667), укажите во вкладке Advanced,
Далее переходим во вкладку "Proxy" и настраиваем, тут всё по базе: SOCKS5 > 127.0.0.1:4447
Далее второй вариант, туннели. Идёте в знакомый вам %datadir%/tunnels.conf и вписываете:
Настройка та же, только указывается localhost и другой порт.
Идём в Accounts > Manage Accounts > Add...
Протокол - IRC. Юзернейм - какой пожелаете. Пароль - в зависимости от того, какая система авторизации на сервере. Самых распространённых IRC серверов, на мой взгляд, всего два: irc.postman.i2p (преимущественно англ. комьюнити и юзеры I2P/I2P+) и irc.ilita.i2p (преимущественно ру. комьюнити и юзеры i2pd). Если не доверяете этим серверам - спокойно поднимайте свой.
Если порт сервера отличается от стандартного (6667), укажите во вкладке Advanced,
Далее переходим во вкладку "Proxy" и настраиваем, тут всё по базе: SOCKS5 > 127.0.0.1:4447
Далее второй вариант, туннели. Идёте в знакомый вам %datadir%/tunnels.conf и вписываете:
INI:
# Тут всё аналогично туннелям почты
[IRC-POSTMAN]
type = client
address = 127.0.0.1
port = 6668
destination = irc.postman.i2p
keys = irc-keys.dat
Теперь, когда мы разобрались, как пользоваться I2P для сёрфинга, почты и чатов, пришло время строить свою реальность.
Для начала определимся с подопытным:
Когда у нас есть, что пускать в i2p, можно приступать к связи этого с i2pd. Для начала, создадим внешнюю сеть:
В данной сети будут контейнер с i2pd и все сервисы, которые мы захотим прокинуть в I2P. Далее, создадим папку под наш i2pd, например /opt/i2pd/:|
Создадим тут следующий docker-compose.yml:
Порт открывается для коммуникации с I2NP, без него не получится принимать входящие соединения. bandwidth и share выставлены на максимум. Если вы не альтруист, можете понизить эти значения. В разделе с настройкой роутера есть описание конфига, названия и значения параметров те же, что и в i2pd.conf. Также убедитесь, что ./i2pd-data будет доступен для пользователя, из-под которого запускается i2pd. В ином случае, либо создайте отдельного юзера без логина с правами на эту папку (по умному), либо просто сделайте
Теперь возвращаемся к нашему сайту, нужно внести некоторые правки в Docker Compose:
Был убран проброс портов, а также добавлена сеть back, которая делает контейнер изолированным от внешнего мира. back сеть можно использовать для БД и прочих контейнеров, которым не нужен доступ в интернет, но они общаются с сервисом. Если вам нужен клирнет, добавьте default в сети web и пробросьте порт. back всё также можно будет использовать для внутренних соединений.
Теперь вернёмся к i2pd. Переходим в %путь вашего i2pd%/i2pd-data/ и открываем (или создаём) tunnels.conf:
Теперь, наш сайт доступен в I2P! Но нужно узнать b32 адрес:
Выглядит страшно, но это неиронично самый простой способ узнать b32 адрес без копания с SHA256, Base32 и тому подобным. Вы получите такой вывод:
На HTTP и SOCKS прокси можете не обращать внимания, их порты всё равно не проброшены наружу (но если мозолит глаза, то можно оффнуть в i2pd.conf, о конфигах написано в разделе с роутером). some-eepsite и есть то, что нам надо. Теперь вы можете перейти по данному b32 адресу и лицезреть прекрасное.
Следующая остановка - красивый домен. Для этого воспользуемся PurpleI2P/i2pd-tools. Из всего нам надо regaddr. Скачиваем или компилируем бинарник и прописываем в терминале:
(Не забудьте предварительно файл с ключами закинуть в ту же папку)
На выходе вы получите строку формата someeepsite.i2p=base64#!sig=hash. Копируем её и смело идём на reg.i2p/add, закидывая её в Auth string. И в течении суток наш сайт будет доступен по красивому домену у любого пользователя I2P.
Есть нюанс, касаемо доменов конкретно в reg.i2p. Домен не навсегда ваш. Он слетит, если сайт мёртв:
Но работает это в обе стороны, так что можно занять нужный вам домен.
Для начала определимся с подопытным:
Структура:
docker-compose.yml:
Dockerfile:
main.py:
requirements.txt:
Пример взят с гх репо awesome-docker
Код:
.
├── docker-compose.yml
├── app
├── Dockerfile
├── requirements.txt
└── app.py
YAML:
services:
web:
build:
context: app
target: builder
ports:
- '8000:8000'
Код:
# syntax=docker/dockerfile:1.4
FROM --platform=$BUILDPLATFORM python:3.10-alpine AS builder
WORKDIR /app
COPY requirements.txt /app
RUN --mount=type=cache,target=/root/.cache/pip \
pip3 install -r requirements.txt
COPY . /app
ENTRYPOINT ["python3"]
CMD ["app.py"]
FROM builder as dev-envs
RUN <<EOF
apk update
apk add git
EOF
RUN <<EOF
addgroup -S docker
adduser -S --shell /bin/bash --ingroup docker vscode
EOF
# install Docker tools (cli, buildx, compose)
COPY --from=gloursdocker/docker / /
Python:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
Код:
flask
Bash:
docker network create i2pd-net
Bash:
mkdir /opt/i2pd/
cd /opt/i2pd/
YAML:
services:
i2pd:
image: purplei2p/i2pd
ports:
- "12345:12345"
volumes:
- ./i2pd-data:/data
entrypoint: >
sh -c '
exec /usr/local/bin/i2pd --datadir=/data --bandwidth=X --share=100
'
restart: unless-stopped
networks:
- i2pd-net
networks:
i2pd-net:
external: true
Порт открывается для коммуникации с I2NP, без него не получится принимать входящие соединения. bandwidth и share выставлены на максимум. Если вы не альтруист, можете понизить эти значения. В разделе с настройкой роутера есть описание конфига, названия и значения параметров те же, что и в i2pd.conf. Также убедитесь, что ./i2pd-data будет доступен для пользователя, из-под которого запускается i2pd. В ином случае, либо создайте отдельного юзера без логина с правами на эту папку (по умному), либо просто сделайте
chmod -R 777 (по тупому).Теперь возвращаемся к нашему сайту, нужно внести некоторые правки в Docker Compose:
YAML:
services:
web:
build:
context: app
target: builder
networks:
- back
- i2pd-net
networks:
i2pd-net:
external: true
back:
driver: bridge
enable_ipv6: false
internal: true
Теперь вернёмся к i2pd. Переходим в %путь вашего i2pd%/i2pd-data/ и открываем (или создаём) tunnels.conf:
INI:
[some-eepsite]
type = http
host = web (имя контейнера в компоузе, в нашем случае web)
port = 8000 (порт сервиса)
keys = some_eepsite.i2pkeys
# Также поддерживаются настройки туннелей по типу inbound.length и т.д.
Bash:
# В Docker
docker exec <CONTAINER-ID> wget -qO- http://127.0.0.1:7070/?page=i2p_tunnels | grep 'class="listitem"' | sed -E 's/.*">([^<]+)<\/a>.*([a-z0-9]{52}\.b32\.i2p).*/\1 - \2/'
# На хосте
wget -qO- http://127.0.0.1:7070/?page=i2p_tunnels | grep 'class="listitem"' | sed -E 's/.*">([^<]+)<\/a>.*([a-z0-9]{52}\.b32\.i2p).*/\1 - \2/'
# Либо просто в вебконсоли по пути 127.0.0.1:7070, вкладка I2P Tunnels
Код:
HTTP Proxy - <destination>.b32.i2p
SOCKS Proxy - <destination>.b32.i2p
some-eepsite - <destination>.b32.i2p
Следующая остановка - красивый домен. Для этого воспользуемся PurpleI2P/i2pd-tools. Из всего нам надо regaddr. Скачиваем или компилируем бинарник и прописываем в терминале:
Bash:
./regaddr some_eepsite.i2pkeys someeepsite.i2p
На выходе вы получите строку формата someeepsite.i2p=base64#!sig=hash. Копируем её и смело идём на reg.i2p/add, закидывая её в Auth string. И в течении суток наш сайт будет доступен по красивому домену у любого пользователя I2P.
Есть нюанс, касаемо доменов конкретно в reg.i2p. Домен не навсегда ваш. Он слетит, если сайт мёртв:
- 3 дня, а с момента регистрации прошло менее 14 дней;
- 45 дней, если прошло более 14, но менее 45 дней с регистрации;
- 180 дней, если прошло более 45 дней с регистрации
Но работает это в обе стороны, так что можно занять нужный вам домен.
Допустим, у вас есть сайт на порте 8080, не в контейнере. Для прокидывания его в сеть I2P можно использовать два способа:
Первый: поднять i2pd с помощью Docker Compose, как мы это делали чуть выше. Тогда не нужно создавать и указывать сеть, а в качестве параметра host указывается 172.17.0.1 (айпи хост-машины в Docker сети, по умолчанию такой. Если не уверены, впишите
Теперь полностью отбросим докер: установим i2pd, как сервис. Для начала поставьте i2pd через ваш любимый пакетник:
Если в репозиториях нету i2pd или он устаревшей версии, то можете скачать официальный билд под ваш систему с гитхаба:
Далее, если у вас systemd, можно включить автозапуск:
После того, как сервис настроен, переходим к настройке туннелей. Настройку роутера опустим, это разбиралось ранее. Настройка туннеля всё также отличается от других вариантов только параметром host.
Первый: поднять i2pd с помощью Docker Compose, как мы это делали чуть выше. Тогда не нужно создавать и указывать сеть, а в качестве параметра host указывается 172.17.0.1 (айпи хост-машины в Docker сети, по умолчанию такой. Если не уверены, впишите
docker exec <i2pd-container-id> ip route show default | awk '{print $3}`). Наглядно:docker-compose.yml:
tunnels.conf:
YAML:
services:
i2pd:
image: purplei2p/i2pd
ports:
- "12345:12345"
volumes:
- ./i2pd_data:/data
entrypoint: >
sh -c '
exec /usr/local/bin/i2pd --datadir=/data --bandwidth=X --share=100
'
restart: unless-stopped
INI:
[some-eepsite]
type = http
host = 172.17.0.1 (или иной)
port = 8000 (порт сервиса)
keys = some_eepsite.i2pkeys
Теперь полностью отбросим докер: установим i2pd, как сервис. Для начала поставьте i2pd через ваш любимый пакетник:
Bash:
sudo apt-get install i2pd (Debian/Ubuntu)
sudo dnf install i2pd (Fedora/CentOS)
sudo apk add i2pd (Alpine)
Если в репозиториях нету i2pd или он устаревшей версии, то можете скачать официальный билд под ваш систему с гитхаба:
Далее, если у вас systemd, можно включить автозапуск:
Bash:
sudo systemctl enable i2pd.service
sudo systemctl start i2pd.service
INI:
[some-eepsite]
type = http
host = 127.0.0.1
port = 8000 (порт сервиса)
keys = some_eepsite.i2pkeys
Поднятие не HTTP туннеля не отличается от HTTP. В качестве очередного подопытного будет XMPP сервер Prosody.
В tunnels.conf туннель будет такой:
Всё остальное проделывается по аналогии с HTTP серверами. В зависимости от того, используется Docker Compose или нет - читайте разделы выше.
Ну и конечно, так можно с любым сервисом: IRC, почта, игровой сервер...
В tunnels.conf туннель будет такой:
INI:
[some-service]
# Главное отличие от HTTP туннеля - тип туннеля. В нашем случае просто server, передающий TCP, вместо HTTP
type = server
host = 127.0.0.1
port = 5222
keys = someservice.i2pkeys
# inport - порт, куда пользователи будут подключаться, не порт сервиса! По умолчанию - тот же, что и port
inport = 5222
# accesslist - список b32 адресов через запятую, которым разрешён доступ. По умолчанию не установлен
accesslist = <addr>.b32.i2p
# enableuniquelocal - если true, то входящий IP будет 127.х.х.х, где х.х.х - первые 3 байта хеша входящего направления. Полезно для определения и/или безопасности (по умолчанию, ipv4 - true, ipv6 - false)
enableuniquelocal = true
Ну и конечно, так можно с любым сервисом: IRC, почта, игровой сервер...
Если вы не доверяете публичным outproxy (вполне справедливо), а сидеть в клирнете через I2P хотите, то можно поднять свой outproxy. Данный процесс не сильно отличается от поднятия сайта, просто вместо сайта у нас локальный прокси. Для тестов возьмём tinyproxy:
/etc/tinyproxy/tinyproxy.conf:
Углубляться в поднятие этого в Docker, или ещё как-то иначе, не буду, всё это разбиралось на других примерах ранее. Главное: дайте прокси выход в интернет (логично) и настройте его на общение с i2pd.
Докиньте в tunnels.conf следующий туннель:
Узнаём destination известным вам способом (также рассматривали далее) и прописываем outproxy в i2pd.conf (требуется полная перезагрузка роутера при изменении!):
Открываем какой-нибудь сайт и лицезреем чудо:
Учтите, что ваш outproxy открыт миру, следовательно рекомендую повесить какую-нибудь авторизацию на прокси (хотя бы Basic Auth). Также вам ничего не мешает сделать балансировщик между проксями, гонять трафик в клирнете через какой-нибудь Tor, и так далее... Но это уже совсем другая история, и к I2P не относится.
Bash:
sudo apt-get install tinyproxy
tinyproxy
INI:
# любой желаемый порт
Port 42003
# если i2pd работает на хосте
Allow 127.0.0.1
# если в Docker
Allow 172.17.0.0/12
Докиньте в tunnels.conf следующий туннель:
INI:
[outproxy-http]
type = http
# Хост прокси сервера - зависит от того, как вы подняли
host = 127.0.0.1 / 172.17.0.1
# Замените на свой
port = 42003
keys = outproxy-http.i2pkeys
INI:
[httpproxy]
outproxy = <addr>.b32.i2p
Учтите, что ваш outproxy открыт миру, следовательно рекомендую повесить какую-нибудь авторизацию на прокси (хотя бы Basic Auth). Также вам ничего не мешает сделать балансировщик между проксями, гонять трафик в клирнете через какой-нибудь Tor, и так далее... Но это уже совсем другая история, и к I2P не относится.
Благодаря этой статье, вы научились использовать браузер, почту, IRC в I2P, поднимать свои сервисы, от сайта до outproxy. Нужно понимать, что I2P не способен заменить Tor, но и не обязан. Это иная сеть, внутри себя, со своей культурой, такая же, как Yggdrasil или freenet. Несмотря на некоторые минусы, это всё ещё хорошее средство анонимизации и коммуникации. В теории, для общения внутри сети I2P будет даже лучше: односторонние туннели, динамичность роутеров и т.п.