Установка и настройка I2P в Slackware Linux

Преамбула

I2P это такая скрытая пиринговая сеть, подробнее можно узнать в Википедии или на официальном сайте. В отличии от TOR, она обеспечивает не анонимный доступ в Интернет, а доступ к собственным ресурсам (сайтам, файлообменникам и т.д.), скрытым из обычной сети. Гейты в «большой» Интернет в ней есть, но они кривые, косые и пользоваться ими не рекомендуется. Расскажу, как ее установить и настроить на Slackware, заодно разрешив пользователям из локальной сети также получать к ней доступ.

Установка Java

Клиент сети написан на Java, потому ее надо сначала установить. На официальном сайте есть рекомендации о необходимой версии:
Java Runtime Version 7 or higher. (Oracle, OpenJDK, or IcedTea Java Version 7 or 8 recommended.
Сама установка довольно проста:
1. Идем, например сюда
2. Скачиваем jdk-8u162-i586-2gds.txz
3. Устанавливаем стандартным образом:

installpkg jdk-8u162-i586-2gds.txz

4. Добавляем в автозагрузку (если вы не сделали отдельного скрипта для запуска сервера, то /etc/rc.d/rc.local) пути к java:

echo "Add JAVA paths..."
export JAVA_HOME=/usr/lib/java
export MANPATH="${MANPATH}:${JAVA_HOME}/man"
export PATH="${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin"

5. Перезагружаем машину.
6. Вводим в консоли команду java без параметров. Если все было сделано правильно, то вы должны увидеть вывод краткой справки по параметрам java.

Создание пользователя для I2P

Понятно, что операции с пользователями надо делать под root или с sudo.

1. Создаем отдельную группу для I2P:

groupadd i2pgrp

2. Создаем интерактивного (пока, потом мы вырубим ему всю интерактивность) пользователя, например i2psrv:

useradd -g i2pgrp -m -d /home/i2psrv -s /bin/bash i2psrv

где:
-g i2pgrp — группа пользователя (i2pgrp)
-m — создать домашний каталог
-d /home/i2psrv — путь к домашнему каталогу (/home/i2psrv)
-s /bin/bash — установить пользователю оболочку, в данном случае фиктивную (/bin/bash)
i2psrv — имя пользователя

3. Задаем ему пароль:

passwd i2psrv

В интерактивном режиме повторяем пароль 2 раза, о сложности можно не беспокоиться — все равно потом отключим.

Установка

1. Скачиваем установщик для Linux с официального сайта
2. Копируем в директорию пользователя (/home/i2psrv) и меняем владельца файла:

chown i2psrv:i2pgrp i2pinstall_0.9.44.jar

3. Логинимся под новым пользователем.
4. Запускаем установку (через консоль):

java -jar i2pinstall_0.9.44.jar -console

5. Приводят возможность выбрать язык:

Select your language
0 [x] eng
1 [ ] bra
2 [ ] cat
3 [ ] ces
...

Оставляем английский (нажимая ENTER).

6. Далее предлагают продолжить установку:
Нажимаем 1 [ENTER]

7. Опять лицензия и всякая хрень:
Нажимаем 1 [ENTER]

8. Выбор пути для установки. Поскольку устанавливаем в каталоге нового пользователя, пусть так и делает — нажимаем [ENTER]

9. Далее нажимаем O и [ENTER] (в прошлых версиях было меньше гемора и подтверждений, а сейчас словно анкету в ментовку работать заполняешь 🙂

10. Еще раз предлагают подтвердить, что все ОК (1 и [ENTER])
11. Наконец, тебе говорят, что все ОК:

====================
Installation started
Framework: 5.1.3-84aaf (IzPack)
Platform: linux,version=4.4.14-smp,arch=x86,symbolicName=null,javaVersion=1.8.0_232
[ Starting to unpack ]
[ Processing package: Base (1/1) ]
[ Unpacking finished ]
Installation finished
On most systems, I2P can be started with:

/home/i2psrv/i2p/i2prouter start

If I2P does not start, please try:

/home/i2psrv/i2p/runplain.sh

12. Тебе говорят, что все совсем ОК:

Installation was successful
Application installed on /home/i2psrv/i2p
[ Writing the uninstaller data ... ]
[ Console installation done ]

Расшаривание I2P-сервисов в локальной сети.

Если вы намерены использовать I2P только на локальном компьютере, этот шаг можно пропустить.

1. Идем в файл /home/i2psrv/i2p/i2ptunnel.config, предварительно его куда-нибудь скопировав, и меняем в нем все 127.0.0.1 на адрес нашего компьютера в локальной сети (например на 192.168.0.20, см. адрес вашего компьютера), таким образом все сервисы I2P будут доступны с любой машины в локальной сети.
2. В том же файле смотрим порты, если где-то у нас какой-то порт для чего-то занят, например на том же порту уже висит HTTP или TOR-proxy, смело меняем порт.

Переключение пользователя

I2P — порядочный сервис, и сам умеет переключать пользователя, под которым запускается. Некоторые даже рекомендуют завести двух пользователей, одного для запуска, другого для установки I2P, но мы, ради экономии времени, делать этого не будем — и запуск и установка будут под одним пользователем. Тем не менее, необходимо отредактировать скрипт i2prouter/home/ip2srv/i2p):

1. Ищем строку, содержащую RUN_AS_USER=
2. Раскомментируем ее (удаляем # в начале строки).
3. Дописываем после знака = имя пользователя (в этом примере «i2psrv").

Расшаривание Web-консоли

Отслеживание статуса соединения с сетью I2P, ошибки и основные настройки доступны через Web-интерфейс, который запускается на локальной машине на порту 7657, но если физического доступа к той машине, на которой установлен I2P нет (или лень), то можно управлять ей и с любого компьютера локальной сети.

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

Заходим в clients.config (/home/i2psrv/i2p), предварительно сделав бэкап.
И опять меняем 127.0.0.1 на 192.168.0.20, т.е. меняем адрес машины, по которому должна появиться консоль.
Далее меняем clientApp.4.startOnLoad=true на clientApp.4.startOnLoad=false, т.к. на сервере нет смысла открывать панель управления после старта I2P.


Запуск I2P

I2P предполагает 2 способа запуска — через скрипт запуска сервиса:

i2prouter start

Остановка:

i2prouter stop

И, если не работает, то можно организовать запуск через runplain.sh:

sh /path/to/script/runplain.sh

Запуск в network namespace под названием provns:

ip netns exec provns /home/i2psrv/server/i2prouter start

или:

ip netns exec provns sudo -u i2psrv sh /home/i2psrv/server/runplain.sh

Далее заходим с браузера по адресу http://192.168.0.20:7657

В последней версии I2P мы увидим мастер настройки. Аккуратно проходим все этапы, читая инструкции на экране.

Настраиваем пропускную способность (чем больше, тем лучше):


Наконец, попадаем в консоль:

Устранение ошибок

Сеть: ОШИБКА — Часы сбиты (расхождение NNNN): Настраиваем часы. копия

Сеть: ОШИБКА — Нет активных узлов, проверьте подключение к сети и брандмауэр
и

Начальная загрузка не удалась. Смотрите страница настройки начальной загрузки для получения помощи

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

В любом случае при такой ошибке идем в log (http://192.168.0.20:7657/logs)

Если в логах встретилось ошибки java — надо переустановить java из другого пакета:

Dec 13, 2019 9:51:08 AM INFO [JobQueue 3/4] networkdb.reseed.ReseedChecker: Downloading peer router information for a new I2P installation
Dec 13, 2019 9:51:09 AM ERROR [Reseed ] uter.networkdb.reseed.Reseeder: Error reseeding from https://i2p.mooo.com/netDb/i2pseeds.su3?netid=2
java.lang.RuntimeException: Cannot load SunEC provider
at sun.security.pkcs11.P11ECKeyFactory.getSunECProvider(P11ECKeyFactory.java:55)
at sun.security.pkcs11.P11ECKeyFactory.generatePublic(P11ECKeyFactory.java:226)
at sun.security.pkcs11.P11ECKeyFactory.implTranslatePublicKey(P11ECKeyFactory.java:110)
at sun.security.pkcs11.P11ECKeyFactory.engineGeneratePublic(P11ECKeyFactory.java:171)
...

Сеть: Заблокирован брандмауэром:
Надо проверить настройки IPTABLES и/или пробросить порт I2P на роутере. I2P выбирает случайный порт для соединения с другими пирами сети при первой загрузке. Порт можно посмотреть в сетевых настройках: http://192.168.0.20:7657/confignet

Описание других ошибок и предупреждений есть во внутренней справке I2P http://192.168.0.20:7657/help#reachabilityhelp

Примечание: Замените адрес 192.168.0.20:7657 на ваш адрес сервера.

Настройка клиента на примере Firefox

1. Заводим отдельный профиль для I2P.
Заходим на about:profiles, нажимаем кнопку «Создать новый профиль» и следуем инструкциям мастера.
2. Ставим дополнение FoxyProxy Standart
3. Заходим в Options

4. Нажимаем Add и заполняем форму.
Title or Description: I2P
Do not use for localhost and intarnet/private IP addresses: Ставим переключатель в On
Proxy Type: HTTP
Proxy IP address or DNS name: 192.168.0.20
Port: 4444 (по умолчанию, можно изменить в i2ptunnel.config или в консоли: http://192.168.0.20:7657/i2ptunnelmgr, щелкнув по ссылке I2P HTTP Proxy в таблице Клиентские I2P туннели)
— Нажимаем Save

5. Включаем созданный профиль

6. Переключите FoxyProxy в режим Use Enabled Proxies By Patterns And Order

Иначе можно получить ошибку HTTP-proxy I2P:

Ваш браузер не поддерживает iFrames Не используйте прокси-сервер для доступа к консоли маршрутизатора, локальному компьютеру или локальной сети.

7. В качестве домашней страницы можно установить Панель управления I2P (http://192.168.0.20:7657)

Проверка

Переходим по адресу http://i2p-projekt.i2p

I2P довольно медленная сеть и работает с некоторыми перебоями, так что если вместо сайта вы увидите надпись «Сайт недоступен. Возможно, сайт отключен, сеть перегружена или ваш маршрутизатор недостаточно интегрирован с другими пирами. Вы можете повторить операцию.«, то действительно, скорее всего, операцию нужно повторить.

Отключаем интерактив пользователю i2psrv

На самом деле интерактивный доступ к системе для пользователя i2psrv был нужен только на этапе установки сервиса I2P, и я оставлял его до конца настройки на случай, если I2P понадобится переустановить. Теперь консоль пользователю i2psrv более не нужна. Отключаем:

Редактируем (под root‘ом) файл /etc/passwd.
Находим в этом файле строку, начинающуюся с имени пользователя (i2psrv) и в конце строки меняем /bin/bash на /bin/false.
Сохраняем файл.

Что дальше?

Остались нераскрытыми темы подписок (как добавлять I2P-сайты неизвестные вашему маршрутизатору I2P), интересные I2P-сайты, другие сервисы I2P, кроме WWW. Может быть когда-нибудь вернусь к этому вопросу, а пока рекомендую детально ознакомиться с документацией на сайте https://geti2p.net/, http://i2p-projekt.i2p и в консоли I2P.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*