I2P — это не TOR, не анонимайзер, а собственная сеть, свои сайты.
Прошло всего ничего с последней статьи о том как подключиться к ней (не
буду вдаваться в подробности - сам хотел такую написать, но всё никак
руки не доходили), и мне захотелось поэксперементировать.
Итак. Цель статьи как понятно из заголовка - установка и настройка своего хостинга с сайтом и пробросом его в i2p.
Имеется: роутер i2p (настроенный по этой статье)
Безлимитный интернет.
Ну.. поехали.
Для начала ставим LAMP. В интернете есть куча статей по настройке nginx в i2p, но я увы преверженец apache. Посему LAMP....
sudo apt-get install php5 apache2 mysql-server php5-mysql libapache2-mod-php5
Так сказать прожиточный минимум. Остальное подтянется. Не забудьте в
mysql ввести пароль от root'a при установке. И хорошо запомнить его, для
тех у кого нет памяти - лучше записать.
Теперь нам надо настроить Apache.
Для начала определимся. У меня сайт... эм.. блог... Эм.. страничка.. В
общем не важно. Мне хватит и на /home метров 200... Посему буду его
держать в папке с i2p.
Создаём папку $HOME/.i2p/eepsite/docroot/www - там у нас будет сайт.
Если он уже есть у вас, то его бэкапчик, или самораспаковывающийся архив
суём туда. Если нет - ну и пофиг. Попозже к этому вернемся.
Поехали, нас ждёт Apache!
В теории тут настраивается всё просто.
Для копирования файла настройки из виртуального узла по умолчанию в
новый файл (mysite) введите в командной строке следующую команду:
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mysite
Отредактируйте в нем новый файл настройки (mysite):
sudo nano /etc/apache2/sites-available/mysite
Измените корневой узел документов, указав в нем новое местоположение:
/home/$USER/.i2p/eepsite/docroot/www/
Измените «Directory directive» путем замены <Directory /var/www/>
на <Directory /home/$USER/.i2p/eepsite/docroot/www/>
Сохраните файл mysite
Активация нового виртуального узла
Для отключения виртуального узла по умолчанию и включения нового узла
запустите терминал и выполните следующие две служебные программы в окне
терминала:
sudo a2dissite default && sudo a2ensite mysite
Перезапустите сервер HTTP Apache:
sudo service apache2 restart
Работа с несколькими проектами
После этого небольшого тюнинга по адресу http://localhost
нам выводится содержимое папки «www». И если там что-то уже лежит, то
это нам и покажут 8) Но порой работаешь сразу над несколькими проектами —
и теперь нам необходимо создать домены в этой папке с соответствующими
привязками.
Итак, идем в папку /etc/apache2/sites-available/ и создаем там файл vhosts.conf.
touch /etc/apache2/sites-available/vhosts.conf
После этого открываем его любым текстовым редактором и добавляем туда такой текст:
<VirtualHost *:80>
ServerName first.my
ServerAlias www.first.my
DocumentRoot /home/$USER/.i2p/eepsite/docroot/www/first.my
</VirtualHost>
<VirtualHost *:80>
ServerName second.my
ServerAlias www.second.my
DocumentRoot /home/$USER/.i2p/eepsite/docroot/www/second.my
</VirtualHost>
Сохраняем документ, идем в свою папку
/home/$USER/.i2p/eepsite/docroot/www/ и там создаем соответственно папки
first.my и second.my.
Далее открываем в текстовом редакторе файл /etc/hosts и добавляем в конце следующий текст:
127.0.0.1 first.my
127.0.0.1 second.my
После этого активируем vhosts.conf в apache:
cd /etc/apache2/sites-enabled/
sudo ln -s ../sites-available/vhosts.conf
Задача выполнена. Все, что теперь осталось — только перегрузить сервер.
sudo service apache2 restart
После этого, набрав в адресной строке адреса http://first.my или
http://second.my Вы должны увидеть содержимое соответствующих папок.
mod_rewrite
PS как выяснилось позже, у установленного таким образом апача
отсутствует mod_rewrite, что делает невозможным использование .htaccess.
Решение:
sudo a2enmod rewrite
sudo nano /etc/apache2/sites-available/default
Меняем у элементов «AllowOverride NONE» на «AllowOverride ALL»
sudo services apache2 restart
Поздравляю. Тут кончается первая часть. Установка и настройка apache.
Теперь можно положить свой сайт в /home/$USER/.i2p/eepsite/docroot/www/
если ещё не сделали конечно. Для тех, кто за NAT'om - рекомендую
использовать например сервис noip
- на данный момент он бесплатен, и на 1-м аккаунте одновременно можно
держать до 3-х доменов, правда чтобы настроить надо натыкаться..
Кроме того там есть удобная утилита noip2, которую можно поставить из
исходников... ИЛи из deb-пакета. Скачать скомпиленный уже пакетик можно
тут (57,32 kb). При установке он запросит логин/пароль от учётной записи, ваше доменное имя и частоту обновления.
Теперь осталось только дообавить в /etc/crontab строчку
@reboot /usr/local/bin/noip2
Вуаля, всё должно работать.
Для дальнейшей простоты я буду называть "свой" сайт test.no-ip.biz. В
сети i2p он будет носить имя test.i2p. Вы же не забудьте поменять их на
свои.
Часть 2-ая. Настройка i2p. Зеркалирование блога на wordpress.
Помните начальную фразу про заворачивание Apache? Тоже самое надо сделать и для i2p.
nano $HOME/.i2p/eepsite/contexts/base-context.xml
И меняем значение переменной
<Set name="resourceBase">/home/$USER/.i2p/eepsite/docroot/</Set>
на
<Set name="resourceBase">/home/$USER/.i2p/eepsite/docroot/www/</Set>
Заходим в менеджер туннелей: 127.0.0.1:7657/i2ptunnel/index.jsp
Создаём новый серверный HTTP туннель:
Попадаем в настройки:
Теперь по пунктам:
- Название(N) и Описание(e) — Просто имя и описание туннеля. Ни на что не влияют.
- Адрес(H) и Порт(P) — Адрес и порт нашего веб-сервера. Мы будем ставить на 127.0.0.1 и порт 80.
- Имя веб-сайта(W) — Домен, на котором мы планируем держать сайт.
- Файл секретного ключа(k) — Файл, в котором будет храниться ключ,
по которому генерируется адрес туннеля. Совет: после генерации файла
(размер 663 байта) сразу сделайте его резервную копию, иначе, при его
потере, вы потеряете доменное имя. Оно будет забито за вами, но вы не
будете иметь к нему доступ.
Нажимаем «Сохранить». Затем «Запустить». После запуска идём в
настройки туннеля и копируем Локальный адрес назначения(L). Он
пригодится нам при регистрации в DNS.
Регистрация в DNS (красивый и бесплатный DNS в i2p)
Регистрация на сайте, предоставляющем hosts.txt в общем-то
необязательна, ибо в I2P DNS является полностью распределённым. Клиенты
сами обмениваются между собой «адресными книгами». Но уж если хочется,
то… заходим на сервер stats.i2p и вводим свой хост [Имя веб-сайта(W)] и Локальный адрес назначения(L).
Регистрация завершена!
Через некоторое время ваш test.i2p будет доступен в сети i2p прямо по доменному имени!
Теперь начнём линковку....
Прежде, чем приступить к этой задаче, необходимо переделать туннель
для сайта. Это несложно и делается в консоли управления. Сделайте у себя
также, как на картинке, вставив свой адрес сервера, порт и домен.
Local destination создается автоматически. Больше на той странице
менять ничего не надо. Сохраняйте (кнопка в самом низу страницы) и
стартуйте этот туннель. После старта станет доступна кнопка Preview со
ссылкой типа http://q3ekhqgqxnk6pp4axm76bh4wbazgmskbj5vxlzoj76soarecgf3a.b32.i2p/. Если ваш сайт загружается по этой ссылке, то считайте вы уже прошли квест на четверть пути.
Теперь адаптация сайта под i2p. У меня - блог на Wordpress.
Для начала надо заменить все ссылки на сайте. Это можно сделать путем изменения записей в базе данных.
Подключитесь к базе данных и выберите вашу базу:
# mysql -p
mysql> use wordpress;
Теперь необходимо найти таблицу опций
mysql> show tables;
У меня она называетя wp_options. У вас может быть имя таблицы с
каким-нибудь другим префиксом. Например, wp1_options. Когда вы нашли
нужную таблицу пошлите 2 запроса, исправляющих параметры сайта. Их через
админку wordpress не получится изменить.
mysql> update wp_options set option_value="/" where option_name="siteurl";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update options set wp_option_value="/" where option_name="home";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Вуаля, теперь бОльшая часть ссылок будет работать правильно как в обычной сети, так и в i2p.
Следующий шаг это поиск абсолютных ссылок внутри сайта. Например, вот
код меню, которое показывается посетителю моего сайта. Например:
<div id="menu">
<ul>
<LI><a href="/">Блог</a></LI>
<LI><a href="/?cat=113">Администрирование</a></LI>
<LI><a href="/?cat=112">Программирование</a></LI>
<LI><a href="/?cat=119">Linux</a></LI>
<LI><a href="/?cat=120">Комиксы</a></LI>
<LI><a href="http://dev.blindage.org/">Проекты</a></LI>
<LI><a href="http://blindage.org/?cat=122">Трекинг посылок</a></LI>
</ul>
if ($i2p) { ?>
<div
style="color:black;font-size:80%;background-color:orange;border:2px
solid red;margin:2px;">Внимание! Помните, что несмотря на то, чт
о вы используете I2P, некоторые страницы сайта имеют вставки картинок и
видео с сайтов из обычного интернета, что потенциально ведет к деанонимизации.</div>
} ?>
</div>
Теперь когда вы исправили подобные недоразумения можно переходить к
третьей задачи и изменять уже содержание записей. Обычно записи
выводятся с помощью функции the_content('Прочитать полностью …'); в главном цикле шаблона index.php.
Проблема в том, что эта функция не отдает содержание записи, а выводит
его. Её необходимо заменить на другую. В т.к. другой нет, то напишем
свою :)
$content = get_the_content(); //получили нефильтрованое содежание
$content = apply_filters('the_content', $content); //применили фильтры (обязательно)
//а вот здесь изменяется ссылка, ведущая на картинки и другие вставленые в запись файлы
if ($i2p) $content = str_replace('cdn.blindage.org', 'vbudi2aibazsx65ywxawef2uaalcbdv34jia3nwu3s2ehonbl72q.b32.i2p', $content);
echo $content;
//the_content('Прочитать полностью …'); //а оригинальную функцию просто закомментируйте. она не нужна.
?>
Не забудьте vbudi2aibazsx65ywxawef2uaalcbdv34jia3nwu3s2ehonbl72q.b32.i2p заменить на свой.
Иииии… ВСЕ! Проверяйте как выглядит ваш сайт в i2p.
Для справки:
chibiko.no-ip.biz
i2p: chibiko.i2p
PS пойду отдохну. Как обычно, замечания/исправления/дополнения
приветствуются. Заодно копирну на свой блог статейку... А то сюда
почему-то первее выложил.... >__<
PPS по мотивам:
http://www.wikireality.ru/
http://www.shpargalko.com/2010/03/01/i2p-nastrojka/
http://habrahabr.ru/post/97996/
http://www.shpargalko.com/2010/03/01/i2p-nastrojka/
http://blindage.org/?p=5281
http://kubuntu.ru/node/11714