main

Оверлейные сети, общая информация

Ниже перечислены свободные и открытые проекты оверлейных сетей, с кратким описанием, основыми недостатками и перспективами развития. В статье рассматриваются только сети, подходящие для потоковой передачи произвольного трафика.

tor

Наиболее распространённая сейчас сеть.

По сути - это socks-прокси, с произвольным маршрутом, но фиксированным количеством хопов (3). Изначальное предназначение - обход цензуры. Реализован на C, потребление ресурсов - умеренное, задержки невысокие (~5с на загрузку странички внутреннего сайта).

Есть несколько: 1, 2 подтверждённых и осуществимых атак на сабж. Вкратце: атака на exit-node, timing-атака, и последняя по времени - badrelay - направлена на внутренние сайты.

Местный dns работает по следующим правилам - http://*.onion - внутренние сайты, всё остальное - внешка. Роутер публикует адрес сайта на "ближайшем" роутере с выставленным флагом "Dir", т.е. "каталог" (от "directory"). "Каталоги" периодически обмениваются информацией между собой. Адрес сайта выглядит примерно как "hemtrhbowstmbw.onion". Уникальность доменного имени гарантируется сгенерированным 1024-битным RSA ключом.

Прогноз: будет использоваться ещё долго, при отсутствии критических уязвимостей. Все существующие атаки требуют значительного времени на деанонимизацию пользователя, если тот сам не сделает какую либо глупость.

сайт проекта

i2p

В прошлом - форк freenet'а, ныне - самостоятельный проект. В отличие от tor'а - предназначен в первую очередь для размещения информации внутри сети, а не проксирования трафика во внешнюю. Выходов во внешний интернет - "outproxy" - всего несколько. Реализация - java, потребление ресурсов - высокое (минимум 200мб памяти, в среднем - 500). Задержки - до 40 секунд, первое соединение устанавливается с вероятностью 70-80%, последующие - значительно быстрее1.

Эмулирует набор прокси (socks, http, https). Количество хопов - от 0 до 8, (складывается из настроек клиентского (нашего) и серверного туннеля(удалённого)), может варьироваться при каждом соединении. Туннели перестраиваются каждые 10 минут.

Основная проблема - java. Потребление ресурсов автоматически ставит крест на дешёвых dlink'ах, и прочих мыльницах за 20$. Впрочем, есть целых 2 проекта с попыткой переписать роутер на c++: 1, 2

Вторая по важности проблема - со стороны софта требуется или поддержка работы через прокси, или модификация исходников. Например, для торрентов есть 2 варианта - или встроенное приложение i2psnark, или старый и заброшенный форк transmission'а.

Сам роутер - монструозен в плане навешанных возможностей (leechcraft видели?). Там тебе и встроенный вебсервер, и торрент, и почтовый клиент, и собственные децентрализованная служба сообщений и вебморда для управления роутером.

DNS выглядит так: каждый роутер поддерживает список соответствий из b64 адреса (длинная многобайтная хреновина, он же - addresshelper), b32 адреса - укороченая версия helper'а вида [a-z]{52}.b32.i2p2, и "человекочитаемых" доменных имён в корневой зоне ".i2p". При доступе к новому сайту, роутер сначала должен найти его addresshelper, что иногда занимает значительное время. Процесс можно ускорить, добавив несколько готовых списков ("подписок"), публикуемых некоторыми маршрутизаторами.

Сейчас - сеть обеспечивает наибольшую анонимность из своих аналогов, но только при комплексном подходе к безопасности3.

Прогноз: будет быстро вытеснена, если появится менее ресурсоёмкая альтернатива.

cjdns

На мой взгляд - самый перспективный проект в плане mesh-сетей. Реализован на C, потребляет мало, предусмотрена работа как поверх голого L2/ethernet, так и L3/udp. В отличие от проксей tor'а и i2p предоставляет tun-интерфейс с ipv6, это сразу даёт совместимость практически со всем не слишком старым софтом.

:!: Сеть не анонимна.

Интересен принцип поиска нужного хоста и внутренней маршрутизации. Вкратце он описан в их whitepaper'е. Краткая суть такова - используется label-based routing, при проходе через роутер, последовательность label'ов сдвигается на размер label'а этого роутера. label - не фиксированного размера и соединены в route "встык". На практике, это означает, что конечный router не знает сколько точно хопов проходит пакет, но всю последовательность хопов можно восстановить при желании.

Основной недостаток - создатели предполагают организацию "friend-to-friend", по типу фидо. Автоматическое обнаружение новых нод работает только если вы уже подключены к какой либо из них. Обсуждение нужности "публичных пиров", ака "bootstrap".

Второй недостаток - до сих пор не решены проблемы с местным dns'ом, нет точного представления, как он должен выглядеть. Есть несколько серверов, держащих неофициальную корневую зону .hype, но в долгосрочной перспективе - это опять централизация, со всеми вытекающими. Были попытки прикрутить к нему namecoin, но всеобщего одобрения идея не получила.

Прогноз: положительный, при решении проблемы с dns'ом и механизмом обнаружения. Стабильный - в противном случае. Важно помнить, что это не прямая замена tor'у и i2p, поскольку анонимность весьма условная.

netsukuku

:!: Упоминается в качестве исторической ретроспективы, сейчас проект мёртв.

Идейный предок cjdns, но с другими принипами организации маршрутов. Основная идея - маршрутизация на основе фракталов. Близкорасположенные рядом ноды образуют "сеть" не больше определённого размера. Внутри сети маршруты строятся самими нодами, на основе данных о сегменте сети, между сетями - только через указание самой сети, лучший маршрут внутри транзитной сети выбирается ей самостоятельно.

Первоначальная реализация - C, потом проект переписали на питон, от чего он и помер. Через несколько лет проект внезапно переписали ещё раз - на vala, но, как нетрудно догадаться, ему это не помогло.


  1. пока живёт туннель, т.е. следующие 10 минут ↩

  2. может быть получен из b64 ↩

  3. Об этом - в следующей статье ↩