Предположим, что ты уже зашел несколько раз в I2P, початился там с ребятами в irc, проникся идеей ламповой невидимой и задумался о собственном (в)кладе в I2P. В раздумьях об этом ты посидел пару дней перед раскрытым блокнотом — узнав попутно из новостей, что не только флибуста, но и рутрекер был запрещен, — и наконец вспомнил про то что ты Сноуден и основатель викиликс (весьма неожиданный поворот, признаюсь, я сам не ожидал от тебя такого), и уже давно ищешь плацдарм для размещения общественно значимой информации. Например, ты решил выкладывать куда-нибудь картинки с котиками, которых ты налайкал в твиттере (Сноуден лайкает котиков в твиттере, ты знал?). И выбор твой пал на I2P.
Что тебе для этого понадобится: поднятый сервер и демон I2P (i2pd). Если его еще нет, установи (ссылки на оба тьюториала по установке — под win и unix, — ты найдешь в конце публикации). В нашем примере до созданного сервера можно достучаться по адресу
127.0.0.1:8080
Ремарка: если ты хочешь чтобы сайт был доступен только по I2P, то подключение твоего сервера к роутеру i2pd не означает, что остальные настроенные тобой подключения сервера к обычному интернету тут же отключатся. Тебе необходимо отключить их все самостоятельно, чтобы единственное соединение совершалось между роутером и сервером на твоей локальной машине.
Как ты помнишь, i2pd это коробка с кучей портов, расположенная внутри твоего компьютера и подключенная к сети I2P. Запущенный тобой сервер — это другая коробка, к которой тоже можно подключаться через порты. Значит если мы состыкуем порты, то и наш сервер соединится с сетью I2P. И раз наш сервер слушает 127.0.0.1:8080, то мы возьмем i2pd и настроим его на этот же самый адрес.
Откроем файл конфига (в unix — /.i2pd/tunnels.cfg, в windows — %appdata%\i2pd) и добавим в него:
[SUPERHACKERSITE]
type = http
host = 127.0.0.1
port = 8080
keys = superhackersite.dat
В отличие от присутствующих тоннелей вроде IRC, здесь мы сами выступаем сервером, и уже не мы будем соединяться к-чему-то-в-сети, а к нам будут приходить люди-из-сети, поэтому тип тоннеля (type) установлен соответствующим образом. Вместо http можно было указать server. Отличие между ними в том, что сервер-тип передает данные как есть (при этом по нему точно так же можно соединиться с твоим серваком), а http-тип использует следующие заголовки:
X-I2P-DestHash — хэш адреса посетителя в base64
X-I2P-DestB32 — то же самое, но в base32
X-I2P-DestB64 — это уже полный адрес в base64
Админам серверов эти заголовки помогают выстраивать сессии, работая с каждым посетителем индивидуально (да, такое в i2p тоже возможно, до тех пор, пока посетитель подключен с одного и тот же адреса).
Файл ключей — это ты уже заметил, — может быть именован как нам захочется. Этот файл следует прилежно хранить, ведь в нем записан адрес нашего сайта.
Опционально ты можешь включить параноидальный режим доступа строго выбранных адресов. Пусть твои друзья посмотрят каждый свой сетевой адрес (этот адрес, наряду с адресами прокинутых ими тоннелей, доступен им в вебконсоли на вкладке LocalDestinations — его можно найти методом исключения, сопоставив с адресами, представленными на странице I2P Tunnels) и сообщат его тебе. Тебе останется вписать дополнительную строчку в создаваемый тоннель в формате 26qxgmyqczulza5ym3jij5er3onclacejyqzecuhjllwun3kxuzq (безо всяких дополнений в виде b32.i2p), отделяя адреса запятой. Следующего вида:
accesslist = 26qxgmyqczulza5ym3jij5er3onclacejyqzecuhjllwun3kxuzq, 4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa и т.д.
Правда для этого твоим друзьям из accesslist'а придется — каждый раз, когда они захотят к тебе подключиться, — старовать роутеры с ключом proxykeys (подробнее пусть посмотрят ссылку на документ по конфигам в конце публикации), пусть напишут себе скрипт для этого дела: в I2P без подобной настройки каждый человек всякий раз стартует с новым адресом, новые адреса помогают оставаться анонимными.
Сохраняем изменения в tunnels.cfg. Если i2pd сейчас запущен, останавливаем его в терминале строкой:
$ pkill i2pd
И запускаем снова. Без этого изменения в tunnels.cfg не вступят в силу.
Теперь зайди в вебконсоль, пройди по ссылке на страницу 'I2P tunnels' и поищи надпись формата
SUPERHACKERSITE < 4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa:8080
Скопируй все вплоть до порта. Это b32-адрес твоего сайта, каким он предстает в сети (он будет оставаться постоянным до тех пор пока привязан к созданному тобой ключу superhackersite.dat). Добавь к нему окончание .b32.i2p чтобы получить адрес наподобие
4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa.b32.i2p
Включи обратно i2pd и подключись к сайту через этот новый адрес. Готово? Значит, сайт доступен из I2P. Чуть не забыли самое главное: ты ведь хотел добавить на свою страницу котов!
Когда коты добавлены, можешь поделиться адресом с друзьями (и если ты не Сноуден, а просто притворялся им все это время, то не забудь отправить адрес своего сайта настоящему Сноудену, который, повторимся, любит котов).
Кстати, ты еще можешь получить совершенно бесплатно годный адрес для своего сайта. Ведь публичный адрес тоже нужен иногда настоящим анонимам вроде тебя и меня. Для этого рассмотрим повнимательнее систему адресации I2P.
Вместо ip-адресов здесь длинные, по-настоящему бесчеловечные криптографические base64-идентификаторы (длиной в 512 байт!). И назначаются они для любого сетевого адреса: и самих коробок-роутеров, и всех адресов на связанных с этим роутером тоннелях, кроме того, и нашему сайту тоже теперь принадлежит такой идентификатор.
Но всем понятно, что если в схеме «роутер-роутер» base64-адреса подходят замечательно, то в схеме «человек-человек» они весьма и весьма неудобны. Поэтому в сети предусмотрены соответствия между неудобными, длиной, повторимся, в целых 512 байт, адресами и удобными короткими.
Удобных адресов существует целых два вида. Первый — это адреса интернет-типа (например, onelon.i2p или armada.i2p). Второй тип — это b32, с которыми мы уже сталкивались, и они вычисляются из b64. B32, как мы уже видели, намного короче, и их удобнее передавать другим людям где-нибудь в чате. В чем же тогда отличие, почему используется и то, и другое: и b32, и привычные интернет-адреса? А все дело в том, что по b32 твой роутер способен распознать соответствующий ему b64-адрес самостоятельно. А такие имена сайтов, которые ты привык встречать в интернете, назначаются людьми; соответственно, никакими вычислениями из того же direct.i2p исходный b64 не вынуть, а значит, чтобы обратиться к этому адресу, придется и соответствующий ему b64-идентификатор где-то сохранять.
Хранятся соответствия между идентификаторами и именами сайтов в адресных книгах, и имеется их по одному домашнему экземпляру у каждого запущенного в сети роутера. Стоило бы вообще-то сравнить это с аналогом hosts, да только вот в сети I2P адресные книги выполняют намного более значимую роль, хотя функционально они, конечно же, друг с другом схожи. А все потому что в I2P отсутствуют как явление DNS-сервера (в целях повышения отказоустойчивости сети). То есть присутствуют конечно ноды, откуда любой другой роутер может скачать себе соответствия между именем сайта и base64, но обращение к ним все равно происходит нерегулярно, чтобы скачать обновление для адресной книги. То есть когда ты вводишь в адресной строке адрес сайта, твой роутер обращается в поисках base64 не к удаленным серверам, а к собственной же адресной книге.
Адресная книга расположена в соответствующей директории: adressbook. Файл addresses.csv, который ты в ней найдешь, состоит из строк-соответствий между интернет-типами адресов и base32-идентификаторами.
Как мы уже упоминали, все это регулярно скачивается из сети через подписки с доверенных серверов (на самом деле таких же нод, как и твоя). Значит, чтобы наш сайт тоже попал в адресные книги других нод, нужно зарегистрировать его на одном из соответствующих ресурсов. Например, ресурсе I2P Name Registry: inr.i2p. Для регистрации тебе понадобится отправить заявку с b64-идентификатором своего сайта, но ты легко найдешь его в вебконсоли: просто зайди в I2P Tunnels и кликни по b32-адресу. Там будет информация о соединениях и, конечно же, b64.
Технически ты можешь устроить и собственный сервис регистрации имен, разместив у себя на ресурсе текстовый файл с сопоставлением адресов и убедив своих посетителей добавить твой сайт в качестве еще одного источника подписок.
В результате ты можешь передавать друзьям b32-идентификатор, и для доступа к нему необходимо лишь соединение с сетью, а можешь дополнительно дать сайту крутое название, но тогда это название должно фигурировать в их адресных книгах.
Кроме этого для распространения адреса сайта в сети есть всякие каталоги, вики, аналогичные hiddenwiki в торе, и как минимум один поисковик, который использует robots.txt, но это уже, как говорится, совсем другая история.
Заходи в IRC и общайся с разработчиками на канале #i2pd-ru. Помни, что анонимность зависит в первую очередь от тебя. Удачи тебе в построении сайта!
Если ты еще не знаешь, как поставить себе i2pd, то тебе сюда:
habrahabr.ru/post/275643 — Как в первый раз запустить i2pd: инструкция под Debian/Ubuntu
habrahabr.ru/post/275647 — Как пользоваться i2pd: исчерпывающая инструкция под MS Windows
Так же, рекомендуется к прочтению:
i2pd.readthedocs.org/en/latest/configuration.html#config-files — Настройки конфигурации и старта демона
xakep.ru/2011/07/07/56161 — Анонимный хостинг через I2P: практические советы по использованию криптосети
Комментарии (16)
monah_tuk
29.01.2016 09:56Ещё бы связность повысилась. За несколько дней аптайма один сайт открылся. Причём со статистикой по другим, где они гордо горят зелёненьким. Городской провайдер. NAT.
Arula
29.01.2016 11:34+1Возможно, проблема не в связности, а в том, что тех сайтов, которые вы хотите открыть, нет в вашей адресной книге (в этом случае браузер так же будет писать ошибку сервера). Воспользуйтесь inr.i2p, на нем самая большая база b64 сайтов. После перехода на сайт, его b64 будет добавлен в адресную книгу автоматически.
argz
29.01.2016 09:58+1> pkill i2pd
Не очень хорошая идея, как мне кажется: через ваш клиент уже могли пойти сквозные тоннели.
P.S. Сначала показалось, что я в блоге журнала «Хакер» :)orignal
29.01.2016 15:20Ну так по-хорошему их сначала надо бы отключить и подождать 10 минут.
Но после этого все равно pkill.
Либо же через I2PControl если включен.
orignal
29.01.2016 17:42Кстати мы сейчас работаем над вопросом реализации двунаправленных тоннелей в i2pd, позволяющих со временем избежать этой проблемы, поскольку при отключении будет посылаться явное уведомление.
TheRaven
29.01.2016 10:35+2Воды много, объяснений мало, картинка не ищется.
Реквестирую расширение части про получение человекопонятного адреса внутри i2p и принципа работы местного dns.
Raegdan
29.01.2016 11:13одним из сервисов сопоставления b32 адресов и нормальных-читаемых-адресов
Ошибочка вышла. Сопоставляется не b32, а b64 адрес. В адресную книгу тоже можно записать только b64. Нафига так сделали — мне не очень понятно, ведь оба адреса позволяют однозначно идентифицировать сайт, но вот так вот.
Поэтому на сайте не будет лишним опубликовать все его реквизиты: читаемый домен и у кого зарегистрирован (если есть), b32-домен, b64-адрес. В противном случае человек, пришедший по b32, не сможет записать сайт в свою адресную книгу; а человек, пришедший по читаемому домену (то есть по b64), не сможет скинуть ссылку другу, если у его роутера проблемы с резолвом — для этого нужен b32.
Zzzuhell
29.01.2016 13:36Извините, что здесь спрашиваю.
Полгода назад мимо меня пробегала ссылка, по которой выдавался список всех работающих TOR-нод с указанием статуса. И по имени ноды искать можно было.
Поделитесь?
netto
31.01.2016 12:57-1Полезная статья, но было бы вообще круто, если бы вы оставили стилистику журнала «ксакеп» для него, тут такое «тыканье» выглядит по меньшей мере нелепо.
Ugputu
Было полезно, спасибо.