# Реєстрація домену в мережі I2P Останнім часом, захопився дослідженням мережі I2P, зокрема: * [встановлення роутера i2pd з підключенням до мережі I2P через Yggdrasil](https://devzone.org.ua/post/vstanovlennia-routera-i2p-z-pidkliuchenniam-cherez-yggdrasil) * [обміном файлами через технологію BitTorrent](https://devzone.org.ua/post/anonimne-korystuvannia-bittorrent-z-i2psnark-ta-i2pd) * [опублікував в ній сайт спільноти](https://devzone.org.ua/topic/ukrayinska-spilnota-administratoriv-alternatyvnykh-merez) * [налаштував](https://devzone.org.ua/post/proksuvannia-m3u8-zasobamy-icecast) ретрансляцію [радіо eQtv](https://devzone.org.ua/topic/retransliatsiia-eqtv-ukrayinskoiu-movoiu-dlia-lokalnykh-merez-audio-32-kbs) * а також успішно [інтегрував свій блог](https://devzone.org.ua/post/publikatsiia-kapsuly-gemini-v-i2p-na-prykladi-servera-agate), що реалізує протокол [Gemini](https://devzone.org.ua/post/protokol-gemini-iak-alternatyva-http) На цьому, думав завершити свій експеримент з налаштуванням інфраструктури, але довгий час залишалось питання стосовно доменів: усі відомі мені ресурси мали короткі адреси, які я знайшов у списку [notbob.i2p](http://notbob.i2p), але цей сайт не відображає перманентні B32. Від того, про мої сервіси ніхто окрім мене не знає, від того крутити їх онлайн - сенсу мало. Трохи полиставши документацію, віднайшов деяку інформацію і організував перший домен для одного зі своїх проєктів у списку, що виявилось тривіально просто. Нижче опишу свій скромний досвід, можливо, він стане в нагоді початківцям. ## Набір утиліт i2pd-tools Для адміністрування доменів I2P, нам знадобиться утиліта [i2pd-tools](https://github.com/PurpleI2P/i2pd-tools). В її репозиторії є детальна [інструкція](https://github.com/PurpleI2P/i2pd-tools?tab=readme-ov-file#i2pd-tools). Збірка з початкового коду, на момент написання матеріалу, виглядає наступним чином: ``` bash git clone https://github.com/PurpleI2P/i2pd-tools.git && cd i2pd-tools git submodule init && git submodule update git submodule update --init git pull --recurse-submodules make ``` Розглянемо декілька варіантів реєстрації доменів та відповідні утиліти з набору `i2pd-tools`. ## Майнинг семантичного префіксу для домена B32 Однією з опцій створення домену - може бути майнинг семантичного префіксу для хешу B32 (актуально для EDDSA-SHA512-ED25519). Цей спосіб вартий уваги до розгляду наступних опцій реєстрації, адже згенерувавши візуально зрозумілий префікс, такий сервіс буде простіше знайти в історії браузеру. До того ж це буде канонічний, перманентний ідентифікатор I2P, що згідно оригінальної парадигми, належатиме тільки вам. Для цієї мети, в `i2pd-tools`, використовується утиліта `vain`: ``` bash ./vain domain -o mydomain.dat ``` * `domain` - бажаний префікс для адреси типу `domain1ad...2u7adq.b32.i2p`: чим більша його довжина - тим [складнішою](https://github.com/PurpleI2P/i2pd-tools?tab=readme-ov-file#time-to-generate-on-a-270ghz-processor) буде процедура видобутку! * `mydomain.dat` - шлях до файлу, куди буде записано знайдений ключ (тунелю) * додатково можна вказати: * `-t` (`--threads`) - кількість паралельних потоків для майнингу * `-r` (`--reg`) - якщо потрібно генерувати по регулярному виразу замість статичного рядка ## Централізовані короткі домени В цілому, класична технологія DNS в мережі I2P відсутня в принципі. Можливо є засоби інтеграції, але вони так чи інакше пов'язані з централізацією. Короткі домени в I2P - є також частково централізованими, але таких "центрів" як мінімум два: [stats.i2p](http://stats.i2p) (від [команди Java роутера](https://github.com/i2p)) і [reg.i2p](http://reg.i2p) (від [команди роутера C++](https://github.com/PurpleI2P)). Працюють вони за іншим принципом, аніж класичні DNS, але при тому так само виконують свою функцію надання семантичних адрес безкоштовно, хоч і з певними умовами стосовно цензури і терміну дії (умов пролонгації). Умови реєстраторів переписувати не буду, актуальну версію можна почитати на їх сайтах. Якщо коротко, то для реєстрації такого формату, адреса повинна бути не зайнята а ваш сервіс - доступним онлайн. В іншому випадку адресу буде звільнено для інших користувачів. Працює така реєстрація за принципом автоматизованого створення реєстрів [hosts.txt](http://reg.i2p/hosts.txt) що по суті являють собою індекс псевдонімів для хешу вашого тунелю (домену B32). Коли додається новий домен, він підписується приватним ключем власника тунелю, перевіряється системою реєстратора і за виконання умов - поширюється між іншими роутерами I2P, що підтримують цього реєстратора. ### Короткий домен другого рівня (2LD) з i2pd-tools/regaddr Передбачається, що у вас є умовний сайт з ключем тунелю `domain.dat`, щоб згенерувати для нього підписаний запит на реєстрацію, виконуємо `regaddr`: ``` bash ./regaddr domain.dat domain.i2p > domain.txt ``` * `domain.i2p` - бажана адреса для `domain.dat` ### Короткий домен третього рівня (3LD) з i2pd-tools/regaddr_3ld Тут майже те само що й для 2LD, але нам потрібно підписати піддомен третього рівня ключем власника домену другого рівня. Виконується така операція вже в три кроки, утилітою `regaddr_3ld`: ``` bash ./regaddr_3ld step1 sub_domain.dat sub.domain.i2p > step1.txt ./regaddr_3ld step2 step1.txt domain.dat domain.i2p > step2.txt ./regaddr_3ld step3 step2.txt sub_domain.dat > step3.txt ``` * `sub.domain.i2p` - бажана адреса для `sub_domain.dat` ### Реєстрація Згенерувавши підписи, переходимо на сайти обраних реєстраторів: * [reg.i2p](http://reg.i2p/add) * [stats.i2p](http://stats.i2p/i2p/addkey.html) * якщо ви користуєтесь роутером i2pd і бачите помилку "403 Denied - Inproxy access denied. You must run I2P to access this site." - переключіть ваш роутер в режим проксі HTTP замість SOCKS ([джерело](https://github.com/PurpleI2P/i2pd/issues/507)) Заповнюємо форму, вказавши наш вміст файлів `domain.txt` і `step3.txt` відповідно до типу домену і слідуємо інструкціям. Звичайно, потрібно почекати декілька днів, поки заявку буде оброблено, а інші роутери мережі оновлять локальні реєстри. Щоб не чекати самому, можна скористатись посиланнями API, що надаються при реєстрації, для миттєвого оновлення вашого локального реєстру. На прикладі реєстратора `stats.i2p`, статус домену можна перевірити на [сторінці нових хостів](http://stats.i2p/cgi-bin/newhosts.cgi).