Создание eep-сайта на базе Nginx и I2Pd

Материал из I2P-ilita вики
Перейти к навигацииПерейти к поиску

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

Предполагается, что у вас уже имеется следующее:

  • Сервер на GNU/Linux или любой другой UNIX-подобной ОС, на которой представляется возможным установить/собрать и настроить нужное ПО. Конкретно в этой статья будут рассматриваться несколько дистрибутивов GNU/Linux. буду благодарен, если кто-то добавит информацию про другие ОС.
  • Файлы сайта, к которым будут обращаться посетители;
  • Желание связываться со скрытосетями и их пользователями.

Этап 1. Установка I2Pd[править]

Для начала, я думаю, стоит рассказать о нескольких преимуществах I2Pd при использовании на серверной стороне:

  • Отсутствие необходимости держать Java Runtime;
  • Как следствие предыдущего пункта - меньшая прожорливость и способность работать там, где проблемы с запуском Java (например, сервера на OpenVZ);
  • Минималистичность, отсутствие ненужных для сервера вещей вроде i2psnark и susimail;
  • Возможность присваивать посетителям адрес из подсети 127.0.0.0/8 на базе destination-хеша, тем самым с небольшой точностью различая их.

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

Debian[править]

1. Импортируем PGP-ключ репозитория, выполнив эти команды:

$ gpg --keyserver keys.gnupg.net --recv-keys 98EBCFE2
$ gpg -a --export 98EBCFE2 | sudo apt-key add -

2. Добавляем репозитории - создаём в папке /etc/apt/sources.list файл i2pd.list и записывает туда следующие строчки (где release - название используемой версии (jessie, stretch и т.д):

deb http://repo.lngserv.ru/debian release main
deb-src http://repo.lngserv.ru/debian release main

3. Собственно, устанавливаем i2pd:

$ sudo apt-get install i2pd

Ubuntu[править]

Здесь всё несколько быстрее. Достаточно выполнить следующие три команды:

$ sudo add-apt-repository ppa:purplei2p/i2pd
$ sudo apt-get update
$ sudo apt-get install i2pd

Сборка из исходников[править]

В том случае, если для вашего дистрибутива нет пакетов, можно собрать I2Pd из исходных кодов. Для этого требуются компилятор C++11 (GCC версии страше 4.7 или Clang), Cmake, библиотеки Boost (1.49 или старше), OpenSSL и ZLib.

1. Качаем исходники (если есть Git, то с помощью него, если нет, то можно скачать архивом):

$ git clone https://github.com/PurpleI2P/i2pd

либо

$ wget -O i2pd.tar.gz https://github.com/PurpleI2P/i2pd/archive/openssl.tar.gz
$ tar xpf i2pd.tar.xz
$ mv i2pd-openssl i2pd

2. Собираем исходники:

$ cd i2pd/build
$ cmake .
$ make

3. Далее можем устанавливать:

# make install

Этап 2. Настройка I2Pd[править]

Открываем/создаём i2pd.conf (в зависимости от дистрибутива и метода установки он может быть либо в /etc/i2pd/, либо в /var/lib/i2pd) и вносим пару настроек:

1. Включаем режим демона и сервиса, чтобы i2pd работал в фоне и хранил все настройки в /var/lib/:

daemon = true
service = true

2. Выставляем нужную скорость в зависимости от ограничений скорости и трафика вашего хостера/провайдера: (как я понял, скорость измеряется в килобайтах в секунду. L = 32 КБ/c, O = 256 КБ/с, P = 2048 КБ/с, X = неограничено)

bandwidth = L

3. В том случае, если сайт будет крутиться на дешёвом VPS, я рекомендую выключить транзитный трафик, так как он будет слишком сильно забивать канал, из-за чего некоторые хостеры могут даже засуспендить сервер:

notransit = true
share = 0

[limits]
transittunnels = 0

После этого открываем/создаём tunnels.conf, находящийся в той же папке, и настраиваем в нём туннель:

[mycoolsite]
type = http
host = 127.0.0.1
port = 13337
keys = mycoolsite.dat
  • [mycoolsite] - имя туннеля, которое будет отображаться в веб-панели;
  • type = http - тип туннеля. Так как мы создаём туннель для сайта, то выбираем http;
  • host = 127.0.0.1 и port = 13337 - указание насчёт того, какой ресурс туннелировать. Так как nginx будет крутиться на том же сервере, то host следует направить на 127.0.0.1. В качестве значения port стоит выбрать какое-нибудь пятизначное число в районе 10000-40000, и в дальнейшем запомнить его;
  • keys = mycoolsite.dat - имя файла с приватным ключом сайта, лежащего в /var/lib/i2pd/. Если файла нет, то I2Pd сгенерирует его. После генерации стоит сохранить его в безопасное место, чтобы иметь возможность восстановить сайт на том же адресе после суспенда/падения/отключения сервера.

Далее перезагружаем I2Pd, чтобы применить новые настройки. Как это сделать - обращайтесь к мануалам вашего дистрибутива. В большинстве случаев достаточно одной из двух команд - "service i2pd restart" для систем с upstart и "systemctl restart i2pd" для систем с systemd.

После этого нужно зайти в веб-консоль и получить b32 и b64-адреса сайта. Если I2Pd запущен на той же машине, что и браузер, то идём на 127.0.0.1:7070, жмём на I2P Tunnels и видим имя туннеля вместе с b32-адресом. Сохраняем b32-адрес, нажимаем на него и видим поле текста с b64-адресом. Его тоже сохраняем. В том случае, если I2Pd на удалённом сервере, делаем SSH-туннель от него к своему компьютеру:

$ ssh -L 7071:127.0.0.1:7070 root@123.456.78.9

После чего уже на этом компьютере открываем в браузере 127.0.0.1:7071 и делаем то же самое.

Наконец, включаем запуск I2Pd при загрузке системы: "systemctl enable i2pd" для систем на базе systemd, насчёт остальных обращайтесь к мануалам.

Этап 3. Установка Nginx[править]

Так как Nginx всё-таки гораздо более популярный и востребованный продукт, то его преимущества и установку я подробным образом рассматривать не буду, лишь дам пару команд.

  • Debian/Ubuntu: sudo apt-get install nginx;
  • Fedora: sudo dnf install nginx;
  • Arch: sudo pacman -S nginx;

И так далее. Лично я на своём Debian предпочитаю включать официальный mainline-рерозиторий от nginx и устанавливать веб-сервер оттуда.

Этап 4. Настройка nginx[править]

1. Стандартной конфигурации nginx в большинстве случаем достаточно, но я рекомендую изменить пару настроек. Открываем /etc/nginx/nginx.conf и изменяем его:

  • В стандартной поставке nginx будет ругаться на слишком длинные b32-адреса и откажется запускаться (выдавая ошибку could not build server_names_hash). Это можно починить следующей строчкой в секции http:
server_names_hash_bucket_size 128;
  • В той конфигурации, которую я предпочитаю использовать, настройки отдельных сайтов хранятся в /etc/nginx/sites-available, а nginx берёт их из симлинков в /etc/nginx/sites-enabled. По умолчанию же nginx настроен брать конфиги из /etc/nginx/conf.d. Поэтому меняем строчку "include /etc/nginx/conf.d/*.conf;" на "include /etc/nginx/sites-enabled/*.conf;", после чего создаём в /etc/nginx папки sites-available и sites-enabled.

2. После этого создаём файл /etc/nginx/sites-available/mycoolsite.conf и заполняем его:

server {
  listen 127.0.0.1:13337;

  server_name mycoolsite.i2p qge6prwkrvrmhtup7oixiolh5wununwzmmgf5vgus4ni5d46g7uo.b32.i2p;
  charset utf-8;

  root /var/www/mycoolsite;
  index index.html;

  access_log /dev/null;
  error_log /dev/null;
}
  • listen 127.0.0.1:13337 - адрес и порт, на котором будет крутится сайт. Если указать 127.0.0.1 в качестве адреса, то nginx будет принимать запросы только с локалхоста (то бишь, только с I2P-туннеля), с других источников (то бишь, клирнета) соединение идти не будет, что важно для безопасности.
  • server_name mycoolsite.i2p qge6prwkrvrmhtup7oixiolh5wununwzmmgf5vgus4ni5d46g7uo.b32.i2p; - домены сайта, который будет хостить nginx. В данном случае - человечный домен из адресной книги и b32-адрес.
  • charset utf-8; - стандартная кодировка для отправляемого посетителям содержимого. Сейчас весь мир на юникоде, так что не будем отставать.
  • root /var/www/mycoolsite - путь к корневой директории сайта, где будут храниться все его данные.
  • index index.html; - главная страница для каждой папки сайта. То есть, например, при открытии http://mycoolsite.i2p/directory/ будет открываться http://mycoolsite.i2p/directory/index.html, но без конкретного указания index.html в URL.
  • access_log /dev/null; и error_log /dev/null - пути, в которые сохранять логи посещений и ошибок сайта. Если вам они нужны, то направьте параметр на что-нибудь вроде /var/log/nginx/mycoolsite.access.log и /var/log/nginx/mycoolsite.error.log. В моём же случае они сохраняются в /dev/null, что означает, что они не сохраняются.

3. Далее, когда конфигурация сервера готова, делаем симлик в sites-enabled:

$ sudo ln -s /etc/nginx/sites-available/mycoolsite.conf /etc/nginx/sites-enabled/

4. Затем создаём папку /var/www/mycoolsite или другую, которую вы указали в конфиге, и перемещаем туда все файлы сайта.

В конце-концов перезапускаем и добавляем nginx в автозагрузку. Делается это аналогично I2Pd.

Итог[править]

Если всё сделано правильно, то у вас будет доступный только из-под I2P сайт со статическим содержимым. Если что-то не получается - гуглите ошибки, ведь наверняка вы не одни такие. Насчёт других конфигураций (например, установки PHP) тоже гуглите, поскольку если описывать всё этот тут, то статья выйдет ещё более громоздкой.

См. Также[править]