# Реєстрація домену в мережі I2P Останнім часом, захопився дослідженням мережі I2P, зокрема: => setup-i2pd-with-i2p-network-connection-over-yggdrasil.gmi встановлення роутера i2pd з підключенням до мережі I2P через Yggdrasil => anonymous-torrents-with-i2psnark-over-i2pd.gmi обміном файлами через технологію BitTorrent => http://hc3fycfadz7fkapp62fqi6llioe46fvis6wuswfobl5ghc2u7snq.b32.i2p опублікував в ній сайт спільноти => m3u8-stream-proxy-with-ffmpeg-in-icecast.gmi налаштував ретрансляцію радіо eQtv => i2p-capsule-in-gemini-space-with-agate.gmi а також успішно інтегрував свій блог, що реалізує протокол Gemini На цьому, думав завершити свій експеримент з налаштуванням інфраструктури, але довгий час залишалось питання стосовно доменів: усі відомі мені ресурси мали короткі адреси, які я знайшов у списку 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 README.md#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 README.md#time-to-generate-on-a-270ghz-processor * mydomain.dat - шлях до файлу, куди буде записано знайдений ключ (тунелю) Додатково можна вказати: * -t (--threads) - кількість паралельних потоків для майнингу * -r (--reg) - якщо потрібно генерувати по регулярному виразу замість статичного рядка ## Централізовані короткі домени В цілому, класична технологія DNS в мережі I2P відсутня в принципі. Можливо є засоби інтеграції, але вони так чи інакше пов'язані з централізацією. Короткі домени в I2P - є також частково централізованими, але таких "центрів" як мінімум два: => http://stats.i2p stats.i2p - від команди роутера Java => http://reg.i2p reg.i2p - від команди роутера C++ Працюють вони за іншим принципом, аніж класичні DNS, але при тому так само виконують свою функцію надання семантичних адрес безкоштовно, хоч і з певними умовами стосовно цензури і терміну дії (умов пролонгації). Умови реєстраторів переписувати не буду, актуальну версію можна почитати на їх сайтах. Якщо коротко, то для реєстрації такого формату, адреса повинна бути не зайнята а ваш сервіс - доступним онлайн. В іншому випадку адресу буде звільнено для інших користувачів. Працює така реєстрація за принципом автоматизованого створення реєстрів hosts.txt (http://reg.i2p/hosts.txt) що по суті являють собою індекс псевдонімів для хешу вашого тунелю (домену B32). Коли додається новий домен, він підписується приватним ключем власника тунелю, перевіряється системою реєстратора і за виконання умов - поширюється між іншими роутерами I2P, що підтримують цього реєстратора. ### Короткий домен другого рівня (2LD) з i2pd-tools/regaddr Передбачається, що у вас є умовний сайт з ключем тунелю domain.dat, щоб згенерувати для нього підписаний запит на реєстрацію, виконуємо: ``` 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 ### Реєстрація Згенерувавши підписи, переходимо на сайти обраних реєстраторів: => http://reg.i2p/add => 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 ## Посилання => https://devzone.org.ua/post/reyestratsiia-domenu-v-merezi-i2p Веб-версія цього матеріалу з коментарями на DevZone