Эта страница была обновлена 2020-07 и содержит сведения для версии маршрутизатора 0.9.46.

Обзор

I2P ships with a generic naming library and a base implementation designed to work off a local name to destination mapping, as well as an add-on application called the address book. I2P also supports Base32 hostnames similar to Tor's .onion addresses.

The address book is a web-of-trust driven secure, distributed, and human readable naming system, sacrificing only the call for all human readable names to be globally unique by mandating only local uniqueness. While all messages in I2P are cryptographically addressed by their destination, different people can have local address book entries for "Alice" which refer to different destinations. People can still discover new names by importing published address books of peers specified in their web of trust, by adding in the entries provided through a third party, or (if some people organize a series of published address books using a first come first serve registration system) people can choose to treat these address books as name servers, emulating traditional DNS.

Примечание: Обоснование системы именования I2P, общие доводы против нее и возможные альтернативы вы можете увидеть на странице обсуждения именования

Компоненты системы имён

Не существует централизованной системы авторизации имен в I2P. Все имена узлов являются локальными.

Система имен довольно проста и большей частью представлена внешними, по отношению к маршрутизатору, приложениями, но поставляющимися с дистрибутивом I2P. Эти компоненты:

  1. Локальный сервис имен, который осуществляет поиск и обрабатывает Base32 имена узлов.
  2. HTTP proxy, которое запрашивает поиск у маршрутизатора, и направляет пользователя в службы удаленных переходов в случае ошибок поиска.
  3. HTTP формы добавления узлов, позволяющие пользователям добавлять узлы в их локальный hosts.txt
  4. HTTP службы переходов, предоставляющие собственный поиск и перенаправление.
  5. The address book application which merges external host lists, retrieved via HTTP, with the local list.
  6. The SusiDNS application which is a simple web front-end for address book configuration and viewing of the local host lists.

Сервисы системы имён

Все направления в I2P - это 516-байтовые (или больше) ключи. (Если быть более точным, это 256-байтовый открытый ключ плюс 128-байтовый ключ подписи плюс 3-или более байтовый сертификат, который в представлении Base64 составляет 516 или более байтов.) Для указания типа подписи используются ненулевые сертификаты. Таким образом, сертификаты в недавно созданных назначениях составляют более 3 байт.

Когда приложение (i2ptunnel или HTTP-прокси) запрашивает доступ к адресу назначения по имени, то маршрутизатор проводит очень простой локальный поиск для разрешения этого имени.

Сервис имён hosts.txt

Сервис имён hosts.txt производит простой линейный поиск в текстовых файлах. Этот сервис имён использовался по умолчанию до версии 0.8.8, когда его заменил сервис Blockfile. Формат hosts.txt становился очень медленным, когда файл разрастался до тысяч записей.

Линейный поиск проводится по трём локальным файлам по порядку, чтобы найти имена узлов и преобразовать их в 516-байт ключа адреса назначения. Каждый файл представлен в простом формате файла конфигурации с записями вида узел=base64 по одной на строке. Эти файлы:

  1. privatehosts.txt
  2. userhosts.txt
  3. hosts.txt

Служба определения имен Blockfile

The Blockfile Naming Service stores multiple "address books" in a single database file named hostsdb.blockfile. This Naming Service is the default since release 0.8.8.

A blockfile is simply on-disk storage of multiple sorted maps (key-value pairs), implemented as skiplists. The blockfile format is specified on the Blockfile page. It provides fast Destination lookup in a compact format. While the blockfile overhead is substantial, the destinations are stored in binary rather than in Base 64 as in the hosts.txt format. In addition, the blockfile provides the capability of arbitrary metadata storage (such as added date, source, and comments) for each entry to implement advanced address book features. The blockfile storage requirement is a modest increase over the hosts.txt format, and the blockfile provides approximately 10x reduction in lookup times.

On creation, the naming service imports entries from the three files used by the hosts.txt Naming Service. The blockfile mimics the previous implementation by maintaining three maps that are searched in-order, named privatehosts.txt, userhosts.txt, and hosts.txt. It also maintains a reverse-lookup map to implement rapid reverse lookups.

Другие средства службы определения имен

The lookup is case-insensitive. The first match is used, and conflicts are not detected. There is no enforcement of naming rules in lookups. Lookups are cached for a few minutes. Base 32 resolution is described below. For a full description of the Naming Service API see the Naming Service Javadocs. This API was significantly expanded in release 0.8.7 to provide adds and removes, storage of arbitrary properties with the hostname, and other features.

Альтернативные и экспериментальные службы разрешения имен

The naming service is specified with the configuration property i2p.naming.impl=class. Other implementations are possible. For example, there is an experimental facility for real-time lookups (a la DNS) over the network within the router. For more information see the alternatives on the discussion page.

The HTTP proxy does a lookup via the router for all hostnames ending in '.i2p'. Otherwise, it forwards the request to a configured HTTP outproxy. Thus, in practice, all HTTP (I2P Site) hostnames must end in the pseudo-Top Level Domain '.i2p'.

We have applied to reserve the .i2p TLD following the procedures specified in RFC 6761.

Если маршрутизатор не может разрешить имя узла, то HTTP прокси возвращает пользователю страницу с ошибкой и ссылками на несколько служб "переходов". Подробнее смотри ниже.

Address Book

Входящие Подписки и Слияние

The address book application periodically retrieves other users' hosts.txt files and merges them with the local hosts.txt, after several checks. Naming conflicts are resolved on a first-come first-served basis.

Подписка на файл hosts.txt другого пользователя означает, что мы ему доверяем в этой части отношений. Вы не хотите чтобы он, к примеру, 'взломал' новый сайт, быстро введя свой ключ для нового сайта до того как передать новую пару узел/ключ вам.

For this reason, the only subscription configured by default is http://i2p-projekt.i2p/hosts.txt (http://udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna.b32.i2p/hosts.txt), which contains a copy of the hosts.txt included in the I2P release. Users must configure additional subscriptions in their local address book application (via subscriptions.txt or SusiDNS).

Some other public address book subscription links:

У операторов этих служб могут быть различные политики для просмотра списка узлов. В соответствии с этим список может быть не одобрен.

Правила Именования

While there are hopefully not any technical limitations within I2P on host names, the address book enforces several restrictions on host names imported from subscriptions. It does this for basic typographical sanity and compatibility with browsers, and for security. The rules are essentially the same as those in RFC2396 Section 3.2.2. Any hostnames violating these rules may not be propagated to other routers.

Правила Именования:

  • При импорте имена приводятся к нижнему регистру.
  • После приведения к нижнему регистру имена проверяются на конфликты с имеющимися именами в userhosts.txt и hosts.txt (но не в privatehosts.txt).
  • После приведения к нижнему регистру должны содержать только [a-z] [0-9] '.' и '-'.
  • Не должны начинаться с '.' или '-'.
  • Должны оканчиваться на '.i2p'.
  • Максимум 67 символов, включая '.i2p'.
  • Не должны содержать '..'.
  • Не должны содержать '.-' или '-.' (как в 0.6.1.33).
  • Не должны содержать '--', исключение - 'xn--' для IDN.
  • Имена узлов Base32 (*.b32.i2p) зарезервированы для использования base32 и не разрешены к импортированию.
  • Определенные имена узлов, зарезервированные для использования проектом, не допускаются (proxy.i2p, router.i2p, console.i2p, *.proxy.i2p, *.router.i2p, *.console.i2p, и другие)
  • Ключи проверяются на соответствие base64.
  • Ключи проверяются на конфликты с существующими ключами в hosts.txt (но не в privatehosts.txt).
  • Минимальный размер ключа 516 байт.
  • Максимальный размер ключа 616 байт (для нужд сертификатов до 100 байт).

Any name received via subscription that passes all the checks is added via the local naming service.

Note that the '.' symbols in a host name are of no significance, and do not denote any actual naming or trust hierarchy. If the name 'host.i2p' already exists, there is nothing to prevent anybody from adding a name 'a.host.i2p' to their hosts.txt, and this name can be imported by others' address book. Methods to deny subdomains to non-domain 'owners' (certificates?), and the desirability and feasibility of these methods, are topics for future discussion.

Также в I2P работают интернационализованные доменные имена (IDN) (используя форму punycode 'xn--'). Чтобы IDN имена домена .i2p корректно отображались в адресной строке Firefox, добавьте 'network.IDN.whitelist.i2p (boolean) = true' в about:config.

As the address book application does not use privatehosts.txt at all, in practice this file is the only place where it is appropriate to place private aliases or "pet names" for sites already in hosts.txt.

Формат расширенной подписки

As of release 0.9.26, subscription sites and clients may support an advanced hosts.txt feed protocol that includes metadata including signatures. This format is backwards-compatible with the standard hosts.txt hostname=base64destination format. See the specification for details.

Исходящие Подписки

Address Book will publish the merged hosts.txt to a location (traditionally hosts.txt in the local I2P Site's home directory) to be accessed by others for their subscriptions. This step is optional and is disabled by default.

Hosting and HTTP Transport Issues

The address book application, together with eepget, saves the Etag and/or Last-Modified information returned by the web server of the subscription. This greatly reduces the bandwidth required, as the web server will return a '304 Not Modified' on the next fetch if nothing has changed.

Тем не менее, содержимое hosts.txt загружается, если он был изменен. Обсуждение этой темы смотри ниже.

Узлу, обслуживающему статичный hosts.txt, или эквивалентному приложению CGI настоятельно рекомендуется отправлять заголовок Content-Length, либо Etag или заголовок Last-Modified. Убедитесь также, что сервер по необходимости выдает '304 Not Modified'. Это существенно уменьшит пропускную способность сети и уменьшит вероятность повреждения.

Службы Добавления Узла

Служба добавления узла - это простое приложение CGI, которое принимает имя узла и Base64 ключ в качестве параметров, и добавляет их в локальный hosts.txt. Если другие маршрутизаторы подписаны на этот hosts.txt, то новая пара имя узла/ключ будет передана по сети.

It is recommended that host add services impose, at a minimum, the restrictions imposed by the address book application listed above. Host add services may impose additional restrictions on hostnames and keys, for example:

  • Ограничение количества 'поддоменов'.
  • Различные методы авторизации для 'поддоменов'.
  • Hashcash или подписанные сертификаты.
  • Экспертная оценка имен узлов и/или содержимого.
  • Категоризация узлов по содержимому.
  • Резервирование или исключение определенных имен узлов.
  • Ограничение количества имен, регистрируемых за определенный период времени.
  • Задержка между регистрацией и публикацией.
  • Необходимость доступности узла для его верификации.
  • Истечение срока и/или аннулирование.
  • Предотвращение IDN-спуфинга.

Службы перехода

Служба перехода - это простое CGI приложение, которое получает имя узла в качестве параметра, и возвращает перенаправление 301 на правильный URL с добавлением строки ?i2paddresshelper=key. HTTP прокси интерпретирует добавленную строку и использует этот ключ как актуальный пункт назначения. Кроме того, прокси кеширует этот ключ, так что address helper не нужен до перезапуска.

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

Для предоставления лучшего уровня сервиса служба перехода должна быть подписана на несколько провайдеров hosts.txt, т.о., локальный список узлов будет актуальным.

SusiDNS

SusiDNS is simply a web interface front-end to configuring address book subscriptions and accessing the four address book files. All the real work is done by the 'address book' application.

Currently, there is little enforcement of address book naming rules within SusiDNS, so a user may enter hostnames locally that would be rejected by the address book subscription rules.

Base32 Имена

I2P поддерживает Base32 имена узлов по аналогии с .onion адресами Tor. Base32 адреса гораздо короче и их проще обрабатывать, чем полные 516-символьные Base64 пункты назначения или addresshelper-ы. Пример: ukeu3k5oycgaauneqgtnvselmt4yemvoilkln7jpvamvfx7dnkdq.b32.i2p

In Tor, the address is 16 characters (80 bits), or half of the SHA-1 hash. I2P uses 52 characters (256 bits) to represent the full SHA-256 hash. The form is {52 chars}.b32.i2p. Tor has a proposal to convert to an identical format of {52 chars}.onion for their hidden services. Base32 is implemented in the naming service, which queries the router over I2CP to lookup the LeaseSet to get the full Destination. Base32 lookups will only be successful when the Destination is up and publishing a LeaseSet. Because resolution may require a network database lookup, it may take significantly longer than a local address book lookup.

Base32 адреса могут быть использованы в большинстве случаев, где используются имена узлов или полные пункты назначения, тем не менее есть несколько исключений, когда это может вызвать ошибку, если имя не может быть преобразовано в адрес. Например, в I2PTunnel возникнет ошибка, если имя не разрешается в пункт назначения.