I2P (Invisible Internet Project, Проект невидимого интернета) – одноранговая сеть с открытым исходным кодом, где анонимность участников – главная повестка всех архитектурных решений.  В I2P присутствует две основные сущности: роутер и конечная точка. Роутером называется программный клиент, который необходимо установить для использования I2P. По умолчанию роутер публикует реальные IP-адреса и активно взаимодействует с другими подобными участниками, выступая в роли транзитного узла и расширяя собственный рисунок сети, т.е. накапливает информацию о других доступных роутерах для их дальнейшего использования в своих туннелях. Конечная точка – это осмысленная сущность сети, ведущая скрытую активность. Например, скрытый сайт, или выходной прокси обычного пользователя. Фактор анонимности I2P заключается в секретности месторасположений конечных точек: выявить роутер, являющийся родителем конечной точки, крайне сложно, а при должном подходе администратора – невозможно. Этот мануал посвящен администрированию роутера, т.е. пониманию конфигурации рядового узла, обеспечивающего функционирование скрытой сети. I2Pd (Invisible Internet Protocol Daemon) – роутер от преимущественно русскоговорящего сообщества PurpleI2P. Разрабатывается с 2013 года. Реализован на языке программирования C++, использует библиотеки OpenSSL и Boost. I2Pd является кроссплатформенным, готовые бинарники распространяются для платформ Windows, Linux, MacOS и Android. Очевидна возможность ручной компиляции, в том числе под операционные системы, не перечисленные выше. I2Pd имеется в стандартных репозиториях некоторых дистрибутивов Linux, однако для использования актуальной версии рекомендуется репозиторий сообщества. Основным местом распространения исходных кодов и бинарных файлов является репозиторий GitHub.  К счастью, администрирование I2P-роутера на всех платформах фактически идентично: веб-консоль на локальном адресе – главный источник информации о текущей активности роутера. Адрес веб-консоли по умолчанию: http://127.0.0.1:7070. Разберем всё по порядку: Uptime – Показывает прошедшее время с момента запуска. Network status – Сообщает сетевой статус роутера. В версиях выше 2.37.0 присутствует Network status 6 для отдельного отображения состояния сети на интерфейсах IPv6. Принимает значения: Testing: Тестирование сетевых возможностей роутера.  OK: Всё в норме. Означает, что роутер работает в штатном режиме и доступен для соединений извне по протоколу TCP и UDP. Как правило, статус «ОК» появляется, когда порт I2Pd в операционной системе открыт, а IP-адрес доступен глобально, т.е. является выделенным, или «белым» (либо через NAT прокинут порт для I2Pd). Firewalled: Является индикатором недоступности порта UDP извне. Может быть сигналом о блокировке рабочего порта I2Pd файерволом операционной системы. В большинстве случаев статус «Firewalled» видят пользователи за NAT-сервером, не имеющие выделенного IP-адреса: главным образом пользователи сотовых операторов. Proxy: Работа роутера через прокси. Подразумевает работу только по протоколу NTCP2 (криптоаналог TCP), так как SSU (криптоаналог UDP) через прокси не ходит. Настраивается вручную через конфиг. Mesh: Работа роутера в меш-сети. На момент написания статьи поддерживается работа в Yggdrasil Network. Статус Mesh подразумевает работу роутера исключительно через меш-сеть, минуя обычный интернет. В случае использования режима Mesh вместе с прокси, или непосредственной работой через интернет, статус Mesh не выводится. Unknown: Отсутствует трафик SSU, при этом конфигурация роутера не соответствует индикаторам «Proxy» или «Mesh». Tunnel creation success rate – Процент успешно построенных туннелей, т.е. процент успешно созданных туннелей от числа инициированных роутером. В среднем варьируется от 20 до 50%. Received и Sent – Объем полученной и отправленной информации с момента запуска роутера. В скобках указывается скорость передачи в настоящий момент. Transit – Объем транзитного трафика и актуальная скорость его потока. Data path – Рабочая директория роутера, где хранятся ключи и локальная база сети. I2Pd поддерживает портабельный режим работы, когда все необходимые файлы приложения хранятся в одной директории рядом с исполняемым файлом. I2Pd автоматически начинает работать в портабельном режиме, если рядом с исполняемым файлом находится конфигурационный файл «i2pd.conf».  Hidden content. Press on text to see – Спойлер с чувствительной информацией о роутере. По умолчанию скрыт. Здесь отображаются IP-адреса с указанием протокола: SSU, SSUv6, NTCP2 и NTCP2v6 (приставка «v6» обозначает работу по IPv6), а также криптографическое имя роутера (Router Ident), образуемое от публичного ключа «router.keys». Этим ключом шифруется информация, адресуемая нашему роутеру. В секции Our external address отображаются внешние IP-адреса роутера с указанием рабочего порта, на который роутер принимает внешние обращения. Случайный порт генерируется при первом запуске и сохраняется в файле «router.info». Также есть возможность указать случайный рабочий порт вручную при запуске или в конфигурационном файле. Если в веб-консоли вы видите локальный адрес или нули, это сигнал о том, что рабочий порт роутера закрыт файерволом, либо ваш IP-адрес недоступен извне (т.е. не является выделенным). В случае протокола SSU при работе за NAT-сервером (например, через USB-модем), в списке внешних адресов роутера появится адрес NAT-сервера провайдера и порт, который в настоящее время закреплен за вами (Hole punch). Особый интерес вызывает графа Router Caps – по-русски: флаги роутера. Это специальные маркеры, публикуемые роутером, по которым другие участники сети получают представление о возможностях нашего роутера. Вы можете встретить следующие флаги: f: Floodfill – роутер является флудфилом. H: Hidden – роутер не публикует свои IP-адреса. K: Канал для транзитного трафика до 12КБ/сек. L: Канал для транзитного трафика до 48 КБ/сек (по умолчанию). M: Канал для транзитного трафика до 64 КБ/сек. N: Канал для транзитного трафика до 128 КБ/сек. O: Канал для транзитного трафика до 256 КБ/сек. P: Канал для транзитного трафика до 2000 КБ/сек. X: Канал для транзитного трафика 2000 КБ/сек и выше (значение по умолчанию для флудфила). R: Reachable – роутер доступен для обращений извне, имеет выделенный адрес и открытый порт. U: Unreachable – роутер недоступен для внешних обращений. Флаги роутера R и U в I2Pd указываются для корректной работы морально устаревшего Java-роутера. I2Pd эти флаги игнорирует и использует аналогичные флаги из Router Info (RI). Логично, что для каждого адреса флаги доступности могут различаться (например, для IPv4 за NAT и выделенного IPv6). В RI флаги указываются для каждого IP-адреса отдельно. Router Info – информация, публикуемая роутером о себе, которая включает ключи, флаги и IP-адреса. Файл «router.info» генерируется после каждого изменения состояния роутера и находится в рабочей директории – Data path. Помимо перечисленных флагов R и U, к адресам в Router Info опционально добавляются следующие: 4: Скрытый адрес IPv4. 6: Скрытый адрес IPv6. B: SSU-адрес обрабатывает пиртесты, т.е. может быть привлечен для проверки доступности роутера извне. С: Адрес может быть интродьюсером (introducer) – сущностью, выступающей в роли связующего звена для обращения к узлу со скрытым IP-адресом. Информация об использовании конечным узлом IPv4 или IPv6 необходима для совместимости на уровне транспорта после ответа связующего звена (флаги 4 и 6). Интродьюсер – весьма емкая тема, которая будет подробно рассмотрена в отдельной статье. Routers – Отображает актуальное количество известных роутеров сети в локальной базе. Floodfills – Отображает актуальное количество роутеров в локальной базе, являющихся флудфилами – «досками объявлений», где информацию о себе публикую серверные конечные точки. Обращение к флудфилам происходит для получения входных данных (ключи и туннели) для любого ресурса в I2P, к которому мы обращаемся. LeaseSets – Количество актуальных локальных лизсетов – пакетов информации для подключения к скрытым ресурсам сети. Свои лизсеты скрытые конечные точки публикуют самостоятельно. Параметр актуален только для роутеров, являющихся флудфилами и имеющими хороший сетевой статус «ОК», т.е. доступных для обращения извне с целью публикации лизсета.  Client Tunnels – Количество построенных и используемых туннелей нашим локальным роутером в настоящий момент времени. Отображаются только успешно построенные туннели: как серверные, т.е. принимающие соединение, так и клиентские, через которые мы подключаемся к другим скрытым ресурсам сети. Transit Tunnels – Количество транзитных туннелей, частью которых является роутер в настоящий момент времени. В нижней части страницы, под заголовком Services обозначено состояние служб (активна или нет): HTTP Proxy – HTTP-прокси пользователя для выхода в скрытую сеть. По умолчанию доступен на адресе 127.0.0.1:4444. SOCKS Proxy – Пользовательский SOCKS-прокси для выхода в скрытую сеть. По умолчанию доступен на адресе 127.0.0.1:4447. BOB (Basic Open Bridge) – Является интерфейсом для прикладных программ, работающих через I2P. Основная задача заключается в создании динамических туннелей. В Java-роутере считается устаревшим из-за подписи DSA, ненадежной из-за успешной практики взлома хеша SHA1, используемого в этой подписи. В I2Pd BOB активно поддерживается, использует актуальные алгоритмы подписи, а также имеет расширения протокола, вовсе отсутствующие в Java-роутере. В общем, является актуальным инструментом. SAM (Simple Anonymous Messaging) – Является интерфейсом для прикладных программ, работающих через I2P. Основная задача также заключается в создании динамических туннелей. В I2Pd SAM является равноценной альтернативой BOB, а в Java-роутере – единственным протоколом в своем роде. Сходство BOB и SAM обусловлено изначальной разработкой разными людьми со схожими целями: BOB для торрент-клиента Robert, SAM – для iMule. В итоге и Robert и iMule ушли на задний план, а протоколы взаимодействия приложений с I2P-роутером остались. I2CP (I2P Control Protocol) – протокол взаимодействия внешних программ с роутером, строго разделяющий I2P-роутер с программой, обращающейся в скрытую сеть. Концепция заключается в том, что работой с данными должно заниматься некое внешнее по отношению к маршрутизатору приложение. На практике это означает, что внешнее приложение должно содержать ~2/3 кода I2P-роутера, чтобы делать что-то осмысленное. В Java-роутере абсолютно весь трафик проходит через протокол I2CP, что сильно влияет на падение гибкости: стримы (сессии TCP – фактически вся активность пользователя) не могут контролировать доступ к туннелям и лизсетам.  С практической точки зрения это означает, что любое внешнее приложение должно иметь большую часть весьма сложного кода роутера, не иметь доступа к туннелям, которых всегда у одной конечной точки несколько, и было бы хорошо иметь возможность выбирать подходящий, а также переключаться между ними. В конце концов I2CP, как и любая прослойка, влечет за собой падение производительности. В I2Pd протокол I2CP существует, как инструмент совместимости с приложениями, написанными в парадигме Java-роутера. Из рабочей логики I2Pd этот протокол убран, а все клиентские данные обрабатываются в рамках внутренних библиотек libi2pd и libi2pd_client, что позволяет прикладным программам полностью контролировать свою активность в скрытой сети. I2PControl – протокол, позволяющий получить информацию о работе роутера в виде запросов и ответов в формате JSON. Является альтернативой веб-консоли и используется редко, поэтому в рамках статьи рассмотрен не будет. На этой странице представлено несколько интуитивно понятных команд, не изменяющих конфигурационный файл и действующих до рестарта роутера: Run peer test – запустить проверку доступности роутера. Может понадобиться, если при запуске роутера рабочий порт был закрыт и статус сети отображается, как «Firewalled». Роутер автоматически проверяет свою доступность примерно раз в час, но есть возможность ускорить процесс вручную. Decline transit tunnels – отклонять новые транзитные туннели (жизненный цикл уже созданных транзитных туннелей прерван не будет). Узлы, предлагающие нам стать частью туннелей, будут получать отказ. Команда может пригодиться при изучении сетевой активности сервера, чтобы убрать все «мусорные» подключения, при этом сохранив работоспособность скрытых сервисов I2P, в том числе сессию SSH. Start graceful shutdown – запустить корректную остановку роутера. После запуска в течение 10 минут роутер продолжит обычную работу, не принимая новые транзитные подключения. Так как все туннели живут 10 минут, этого достаточно, чтобы выключить роутер, не оборвав туннели других участников сети. Force shutdown – незамедлительная остановка I2P-роутера. Logging level (none, error, warn, info, debug) – смена режима логирования. Может пригодиться при неожиданно возникшей потребности в дебаге. Логи продолжат писаться в стандартный файл (/var/log/i2pd/i2pd.log). Transit tunnels limit – позволяет сменить лимит количества транзитных туннелей. По умолчанию 2500. Здесь представлен список конечных точек, расположенных на роутере. Каждый адрес образуется уникальным ключом, однако на одном ключе может располагаться несколько туннелей, поэтому в большинстве случаев удобно пользоваться пунктом «I2P tunnels», чтобы анализировать туннели в отдельности (сравнимо с доменным именем в обычной сети и отдельными службами, работающими на домене на разных портах). Увидеть детальную информацию о конечной точке можно кликнув на ее имя. Base64 – полный адрес конечной точки, закодированный в base64. Включает в себя публичный ключ шифрования, публичный ключ подписи и прочую служебную информацию. Обычно этот массив составляет 391 байт. Кстати, хеш SHA256 в кодировке base32 от этого массива «Base64» образует привычный адрес *.b32.i2p. Address registration line – позволяет получить строку для регистрации домена на ресурсах reg.i2p (поддерживается сообществом разработчиков i2pd) и stats.i2p (поддерживается командой Java-роутера). Домен будет привязан к актуальному ключу, для которого открыта строка регистрации. Регистрация коротких доменов будет подробно рассмотрена в статье про i2pd-tools. LeaseSets – количество известных лизсетов, которыми располагает конкретная конечная точка. Чаще всего это лизсеты пользователей, с которыми наш скрытый сервис общается в настоящее время.  Inbound tunnels и Outbound tunnels – входящие и исходящие туннели конечной точки, размещенной на локальном роутере. Суть обозначений входящего туннеля приведена на иллюстрации, для исходящих туннелей всё аналогично. Количество туннелей (входящих или исходящих) не может превышать 16. По умолчанию серверные конечные точки создают по пять входящих и исходящих туннелей, а клиентские – по три. Наличие нескольких туннелей, проложенных через разные узлы, но ведущих к одной конечной точке, затрудняют анализ трафика и являются решающим фактором доступности: при обрыве одного туннеля, трафик начинает идти по другому, не нарушая сессию передачи информации. Tags – список адресов, при взаимодействии с которыми локальная конечная точка использовала одноразовые криптографические ключи, называемые «тегами». Amount – это количество тегов. Минимальное число генерируемых тегов, как видно на скриншоте, равняется четырем. Нулевое количество означает израсходование ранее сгенерированных тегов. Применяется при использовании алгоритма ElGamal (внутреннее обозначение типа шифрования – «0»). ElGamal считается очень ресурсоемким и устаревшим алгоритмом. На смену ему приходит тип шифрования «4» – новый быстрый протокол сквозного шифрования «ECIES-X25519-AEAD-Ratchet». Теги здесь тоже присутствуют, но в другом виде.  При этом алгоритме ключи не передаются по сети: каждый абонент выводит их математическим путем локально. Параметр Incoming Tags обозначает количество выведенных тегов на будущее, а Tags sessions отображает количество сессий и адреса, с которыми они установлены. Status говорит о состоянии сессии, где 4 означает «Established», а всё, что меньше – сессия по каким-то причинам зависла. Больше 4 – тоже норма. Streams – стримы (TCP-сессии передачи информации), активные подключения внешнего приложения к I2P через локальный роутер. Соответствуют клиентским соединениям TCP/IP. Stream ID – номер туннеля. Необходим для возможности различать разные потоки, сравним с номером порта. Пиктограмма с крестиком позволяет закрыть, т.е. прервать стрим. Destination – адрес конечной точки на другом конце провода. Sent и Received – объем отправленной и полученной информации в байтах.  RTT – время в миллисекундах от отправки пакета до подтверждения его получения. Window – текущий размер окна для отправки, измеряется в пакетах. Buf – количество неотправленных байт, ожидающих места в окне. Out – количество пакетов, находящихся в окне без подтверждения. In – количество полученных пакетов, которые клиентское приложение еще не приняло. Status – состояние стрима, где 1 означает открытое соединение. Размеры пакетов: 1730 байт для ElGamal и 1812 байт для ECIES-X25519-AEAD-Ratchet. Чтобы было проще понять сетевую архитектуру I2P, которая включает в себя целый стек протоколов с криптотранспортами, туннелями и тонной шифрования, а также найти в этой связке место для клиентского приложения, приведена специальная иллюстрация. В своем роде это модель OSI сети I2P. Основываясь на этой общей модели, можно сказать, что транзитные туннели работают на втором уровне (на самом его низу, если разобраться), задействуя минимум логических ресурсов роутера. Благодаря этому стандартные 2500 транзитных туннелей не перегружают роутер даже на одноплатных компьютерах. Работа флудфила несколько накладнее по ресурсам, т.к. задействует  сквозное шифрование, поэтому флудфил-одноплатник со слабым процессором может начать сбоить. Пункт, актуальный для роутеров, являющихся флудфилами. Содержит список лизсетов, опубликованных у нас скрытыми ресурсами, т.е. анонимными конечными точками сети. Имя лизсета является доменом *.b32.i2p без обозначения этого окончания. Лизсет содержит информацию о входном туннеле целевого ресурса и срок годности (в среднем 10 минут). Также существуют зашифрованные лизсеты, не поддающиеся очевидному анализу. Подробно тема лизсетов рассмотрена в статье. Во вкладке Tunnels можно увидеть все входящие и исходящие туннели роутера, инициированные самим роутером. Туннели с пометкой exploratory являются «зондирующими» – они строятся автоматически через небольшой промежуток времени, имеют низкое движение трафика и служат для исследования сети: получение трех случайных роутеров от случайного флудфила. Также через них иногда ходят служебные запросы роутера и публикация своего Router Info.  Transit tunnels отображает только транзитные туннели. Информация тут более, чем скудная, так как все туннели в I2P являются однонаправленными и транзитный роутер знает лишь откуда принимать и куда передавать чужие пакеты информации (с соответствующей манипуляцией с симметричным ключом шифрования, который был выдан ему при создании транзитного туннеля). Стрелки демонстрируют место в туннеле, а последнее число показывает объем переданных байт. В теории сюда же можно вывести дополнительную информацию о статусе туннеля, адреса соседних роутеров, но, возможно, это не случится, т.к. мониторить транзитные туннели – не джентельменское дело. Страница с отображением прямого взаимодействия с другими роутерами с указанием количества соединений по каждому протоколу (NTCP2, NTCP2v6, SSU, SSUv6). В квадратных скобках указывается количество [отправленных : полученных] байт. Стрелки демонстрируют статус соединения: входящее или исходящее. Страница схожа с «Local destinations», но удобнее в практическом применении, т.к. позволяет анализировать каждый туннель в отдельности, даже если несколько туннелей используют один ключ (один адрес). Название туннеля берется из его конфигурационного файла.  Отображается три типа туннелей: клиентские, серверные и Server Forwards. Туннели типа «Forwards» являются UDP-туннелями: могут быть как серверными, так и клиентскими. Страница со списком сессий внешних приложений с роутером по протоколу SAM. Имя сессии задается приложением. Кликнув по сессии, можно увидеть внешний I2P-адрес сессии и список локальных подключений к роутеру в рамках SAM-сессии. Протокол BOB может иметь подобный интерфейс, но в силу малой популярности страница в веб-консоли отсутствует (но теоретически может быть добавлена в будущем). Короче, если будете писать приложения для I2P, лучше ориентироваться на API в виде протокола SAM, чтобы бедные пользователи Java-роутера тоже могли пользоваться вашим продуктом. Веб-консоль I2Pd поддерживает конфигурацию с доступом по внешнему адресу и позволяет включить авторизацию пользователя по логину и паролю. Пример такой конфигурации приведен на иллюстрации (показано два вида синтаксиса, поддерживаемых конфигом I2Pd). Такой подход чреват уязвимостью в случае, когда подключение к веб-консоли осуществляется через обычный интернет без использования дополнительного шифрования трафика (https). Одним из самых практичных и безопасных способов является подключение к веб-консоли через SSH с прокинутым портом. Протокол SSH не нуждается в дополнительной защите, так как имеет встроенное шифрование, и отлично подходит для повседневного использования в силу простоты и распространенности. Локальный порт прокидывается на удаленную машину через флаг -D: ssh -D 8888 user@<server ip> -p <ssh port>. Приведенная команда позволит подключиться в браузере на SOCKS-прокси по адресу 127.0.0.1:8888 и выходить в глобальную сеть с IP-адреса сервера, а также иметь доступ к локальным ресурсам удаленной машины, словно браузер запущен на ней. В том числе получится подключиться по локальному адресу 127.0.0.1:7070 к веб-консоли I2P-роутера, развернутого на сервере. Несмотря на способность роутера работать с передаваемыми значениями (параметры при запуске), распространенной практикой является использование конфигурационного файла. На Debian при установке из пакета конфиг i2pd.conf находится в директории /etc/i2pd/. При запуске бинарника без установки (например, после ручной компиляции роутера), конфигурационный файл читается из директории ~./i2pd/. На Android все рабочие файлы роутера (в том числе конфиг) лежат в одной папке, чаще всего это /sdcard/i2pd/. На Windows стандартной рабочей директорией является %AppData%\i2pd. Конфигурационные файлы на разных операционных системах принимают одинаковые значения с небольшими исключениями, с которыми можно ознакомиться в официальной документации. Стандартный конфиг с комментариями можно найти в исходниках, в папке contrib (при установке из пакета в системе появляется именно он). Конфигурационный файл поддерживает два вида синтаксиса:  Указание конфигурируемой секции в квадратных скобках с перечислением параметров этой секции ниже до следующих квадратных скобок; Указание параметра через точку после имени секции.  Параметры по умолчанию (главным образом при запуске без конфигурационного файла):  Веб-консоль включена, доступна по адресу http://127.0.0.1:7070 HTTP-прокси включен, доступен по адресу 127.0.0.1:4444 SOCKS-прокси включен, доступен по адресу 127.0.0.1:4447 SAM включен, доступен по адресу 127.0.0.1:7656 Активен фоновый режим работы роутера (демон) Логирование на уровне «warn» (от «warning» – внимание!) IPv4 – включен, IPv6 – отключен Неупомянутые параметры по умолчанию неактивны. Очевидно, что описывать здесь весь конфиг, без этого имеющий комментарии, излишне. Поэтому остановимся только на пунктах, которые часто вызывают вопросы, или являются граблями для начинающих пользователей. family – дополнительный опознавательный признак роутера. В концепции, в которую поверили лишь единицы, в том числе ведущий разработчик Java-роутера с ником zzz, family указывается добропорядочными пользователями для того, чтобы роутеры одного админа не появились вместе в одном туннеле. Как не трудно понять, эта опция никем и никогда не используется, а злонамеренными людьми, которые хотят захватывать как можно больше туннелей для попытки мониторинга сети, – family не используется тем более.   – Параметры получения стартового пакета (ресида) с несколькими роутерами для начала взаимодействия с сетью I2P. В первую очередь, ресид важен при первом запуске, когда локальная база сети пуста (папка netDb). verify – Проверка подписи полученного ресида. По умолчанию параметр является отключенным. Однако, в стандартном конфиге – в состоянии «true». Подразумевается, что экземпляр конфигурационного файла имеется после установки из пакета, в который входят сертификаты стартовых узлов (папка certificates). Если верификацию включить, не имея сертификатов, роутер не сможет стартовать. urls – адреса, с одного из которых будет скачен ресид (например, https://example.ru/). yggurls – адреса IPv6 Yggdrasil, с одного из которых будет скачен ресид (http:// без s). file – путь до локального .su3-файла, или прямая ссылка https.  zipfile – путь до локального zip-архива базы роутера, или прямая ссылка https. proxy – прокси, используемый при обращении к ресиду.  threshold – минимальное количество известных роутеров, при достижении которого произойдет обращение к одному из ресидов. По умолчанию – 25. [persist] – Секция, отвечающая за сохранение на диск некоторой динамической информации.  profiles – отвечает за сохранение профайлов роутеров на диск, что делает их доступными при следующем запуске. Профайлы представляют из себя текстовые файлы с информацией о качестве взаимодействия с роутером. Например, роутеры, которые не позволяют строить через них транзитные туннели, удаляются из локальной базы.  addressbook – отвечает за сохранение полных адресов. При отключении уменьшает нагрузку на диск. В статье опущены некоторые технические вопросы, касающиеся настройки операционной системы, т.к. главная тема не системное администрирование для новичков, а управление I2P-роутером.  Не забывайте про функцию --help, встроенную в роутер, а также про официальную документацию. Эти инструменты помогут вам при практической конфигурации. В следующих статьях рассмотрим конфигурацию туннелей, типы лизсетов, безопасное хранение ключей, мультихоуминг и регистрацию коротких доменов в зоне «.i2p». Энтузиаст отказоустойчивых и скрытых сетей