Предыстория: намедни написалась книжка относительно нового государственного строя (Государство-домен), который ждет нас в близком будущем. А поскольку Роскомнадзор реагирует на подобные вещи неадекватно – решил завести под свою писанину сайт в приватной сети i2p. По ходу создания пришлось решать некоторые технические вопросы, которые я ниже и рассмотрю, пытаясь сэкономить ваше время, заодно и шпаргалка мне будет.

Итак, имеется удаленный VPS под Ubuntu, и разместить сайт нужно именно на нем. Ибо, можно, конечно сделать его у себя на ноуте, но когда ноут выключен – сайт ведь недоступен (лично меня это неизменно раздражает в .i2p и .onion).

Далее я предполагаю, что ваш LAMP уже настроен, и нормально отдает контент в обычный интернет. Т.е. у вас на нем уже крутится пара-тройка обычных (не-i2p) сайтов.

Сначала ставим i2p на Ubuntu:

sudo apt-add-repository ppa:i2p-maintainers/i2p
sudo apt-get update
sudo apt-get install i2p

Конфигурируем i2p-роутер как постоянно работающий демон:

sudo dpkg-reconfigure -plow i2p

По ходу конфигурирования (через графический интерфейс) нужно будет ответить на несколько простых вопросов, ставите автозапуск, память я оставил по умолчанию 128 мб, в общем, думаю, с этим у вас проблем не возникнет.

По завершении конфигурирования i2p-демон запустится самостоятельно.

Теперь нам нужно, чтобы панель с веб-интерфейсом i2p-роутера была доступна удаленно. Для этого открываем файл

/var/lib/i2p/i2p-config/clients.config

И меняем в нем

clientApp.0.args=7657 ::1,127.0.0.1 ./webapps/

на

clientApp.0.args=7657 80.80.80.80 ./webapps/

Где вместо

80.80.80.80

Ставите внешний IP вашего VPS. Есть еще вариант (от разработчиков i2p), где вы можете заменить на:

clientApp.0.args=7657 0.0.0.0 ./webapps/

но я его не пробовал.

Теперь вам доступен веб-интерфейс для управления вашим удаленным i2p-роутером.

ПЕРВЫМ ДЕЛОМ идете на:

http://80.80.80.80:7657/configui

(вместо 80.80.80.80 подставьте IP вашего VPS) и устанавливаете логин-пароль (чтоб никто не уволок). Теперь доступ к веб-консоли имеете только вы (ну, я надеюсь на это).

В руководстве рекомендуют: «Пройдите на localhost:7657/index.jsp и нажмите на «Мягкий перезапуск», это перезапустит JVM и все приложения». Сделайте. Не забудьте вместо localhost подставить IP вашего VPS.

Теперь вот какой косяк с i2p под Ubuntu 16.04: в левой панели веб-консоли вы увидите надпись:
Внимание: ECDSA недоступно. Обновите Java или ОС.

Это связано с тем, что Ubuntu 16.04 использует… в общем, вам нужно поставить другую Java, стабильную. Я выбрал вариант от Oracle.

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

и далее:

sudo update-java-alternatives -s java-8-oracle

Теперь вам осталось создать новый HTTP-туннель к вашему сайту. Сделать это можно здесь:

http://80.80.80.80:7657/i2ptunnelmgr

(IP поменяйте только)

Выбираете в «Новый открытый сервис» — HTTP (стоит по умолчанию) и жмете «Создать». В поле
Точка доступа: Адрес(H):

Указываете IP вашего VPS. Порт указываете тот, на котором работает сервер (скажем, apache2, обычно это 80 или 8080), и в поле:
Имя веб-сайта(W):

Пишете что-то типа:

moysite.i2p

Ставите галку на автозапуск. По желанию меняете Название(N) и Описание(e).
Остальное не трогаете. Жмете на «Сохранить».

Вуаля! Теперь ваш сайт виден по 32-битному ключу-адресу (типа такого: pqajparec44p74uvpxvxhpd5u3neuqs2t4awwd6bcieku3juhwwa.b32.i2p ) в i2p сети. А если вы добавите ваш сайт в адресные книги различных сервисов, например, сюда: stats.i2p, то со временем и ваше доменное имя moysite.i2p, которое вы указали ранее, попадет в адресные книги остальных сервисов. И ваш сайт смогут находить уже напрямую по этому имени, или через jump-сервисы.
Но если мой сервер отдает несколько виртхостов на одном сокете, как я узнаю, какой домен будет виден в сети i2p?

А хороший вопрос-то. В общем, я тоже тестировал установку на рабочем сервере с виртхостами и решил вопрос так: назначил сайту для i2p другой порт (который мы прописывали ранее при создании туннеля). Давайте сделаем это вместе. Открываете:

/etc/apache2/ports.conf

И пишете туда:

Listen 8088

Например пусть у нас это будет порт номер 8088.

В другой конфиг:

/etc/apache2/sites-enabled/000-default.conf

Пишете что-то вроде:

<VirtualHost *:8088>
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/moysite
	ErrorLog ${APACHE_LOG_DIR}/error8088.log
	CustomLog ${APACHE_LOG_DIR}/access8088.log combined
</VirtualHost>

(непременно закройте тег VirtualHost — на Хабре глюк с отображением этого куска кода)

DocumentRoot разумеется путь меняете на реальный, на тот где у вас собственно папка DocumentRoot для вашего i2p-сайта. Если нет такой – создайте. Сохраняете всё. Перезапускаете апач:

sudo service apache2 restart

Если не хотите, чтобы ваш i2p-сайт был виден из обычного интернета, в каталог DocumentRoot кладете .htaccess следующего содержания:

Order deny,allow
Deny from all
Allow from 80.80.80.80

80.80.80.80 – меняете на IP своего VDS.

Идете на stats.i2p и добавляете ваш сайт в тамошний сервис.

После добавления ваш сайт становится доступен, например, так:

stats.i2p/cgi-bin/jump.cgi?a=r.i2p

(это адрес сайта, который я и сделал)

И да, в общем-то, более логично, не размещать i2p-сайт на рабочем VPS. Лучше взять под i2p что-то отдельное. Ну, мне так видится.

Если есть доп. вопросы по установке – велком в каменты.

Ссылки на использованные доки:

> geti2p.net/ru/faq
> help.ubuntu.ru/wiki/i2p
> help.ubuntu.ru/wiki/java
Поделиться с друзьями
-->

Комментарии (14)


  1. KonstantinSpb
    01.05.2017 17:19

    Ибо, можно, конечно сделать его у себя на ноуте, но когда ноут выключен – сайт ведь недоступен (лично меня это неизменно раздражает в .i2p и .onion).


    Делать сайт в ZeroNet, нет? Правда, как там поведут динамические сайты (LAMP) не в курсах


    1. procode
      01.05.2017 17:39

      Впервые услышал. Прогуглил. Занятно. Возможно по факту тестирования напишу нечто подобное и про создание сайта в ZeroNet :)

      Спасибо.


  1. Erelecano
    01.05.2017 22:40
    +3

    Жаба и апач?
    Да вы — знатный изощренец.
    i2pd и nginx вам в помощь
    https://i2pd.readthedocs.io/en/latest/tutorials/http/#host-anonymous-website
    Всех настроек i2pd
    Put in your ~/.i2pd/tunnels.conf file:
    [anon-website]
    type = http
    host = 127.0.0.1
    port = 8080
    keys = anon-website.dat

    Ну а nginx и обезьяна настроить может, даже ссылок давать не буду.


    1. procode
      01.05.2017 23:02

      позитивчик )

      спасибо.


      1. Erelecano
        02.05.2017 10:17
        +1

        Просто i2pd все же менее прожорлив, ибо C++, а не жава, так что лучше использовать его. Да и плясок с ним меньше, как мы из доки видим. Если я ничего не путаю, то автор i2pd где-то тут на Хабре обитается, но я сходу не вспомню его ник, может увидит тему про i2p и сам придет, объяснит чем еще i2pd лучше реализации на жаве.

        UPD: orignal — автор i2pd, я нашел его!


        1. procode
          02.05.2017 19:17

          мерси, непременно попробую!)


        1. procode
          02.05.2017 22:31

          Устанавливал по этому мануалу: https://habrahabr.ru/post/275643/ — куча ворнингов на этапе make и вылетел с allocated memory (на свежем VPS с 1 гигом оперативы).
          Попытался установить с пакета .deb — тоже чего попало началось. Не может открыть какой-то там файл и прочая хрень. Потом еще полчаса вычищал эту гадость с системы (оно себя по разным папкам раскидало :)
          Наверное если хорошо в этом понимать и иметь свободный день-два — настроить его как-то и можно, но уже совершенно не хочется.
          Почему нельзя было сделать apt-get install i2pd и чтобы оно сразу работало, как в этом сабже?


  1. Foxcool
    02.05.2017 11:07

    Различные книжки и файлы вообще можно раздавать так же по IPFS (ipfs.io)


    1. procode
      03.05.2017 10:51

      Спсибо за наводку )


  1. krpl
    02.05.2017 17:01

    Очень плохая идея открывать web интерфейс i2p таким способом:
    http://x.x.x.x:7657/configui


    1. Пароль будет передаваться в открытом виде по http.
    2. Факт коннекта с вашего ip на порт 7657 i2p ноды увидят и запишут в лог все кому не лень.

    Блокировать такие вещи через .htaccess тоже идея так себе. Целесообразнее написать правило iptables которым запретить коннекты к 8088 всем кроме 127.0.0.1


    1. procode
      02.05.2017 17:02

      Спасибо!


    1. procode
      03.05.2017 01:51

      Кстати, а что вы предлагаете в качествеальтернативы веб-интерфейсу? Конфиги править?


      1. krpl
        03.05.2017 05:33

        Получать доступ к нему более безопасным способом. Например через ssh туннель или OpenVPN. Или через https (в nginx это называется proxy_pass, когда ваш браузер коннектится к nginx на вашем VPS по https (пусть даже с самоподписаным сертификатом) а он уже к порту 7657 процесса i2p по http). Выбор большой…


        1. procode
          03.05.2017 07:37

          Звучит разумно, да. Можно и через Tor по идее… В общем, выбор действительно есть :) Спасибо.