Оверлейные сети, общая информация
Ниже перечислены свободные и открытые проекты оверлейных сетей, с кратким описанием, основыми недостатками и перспективами развития. В статье рассматриваются только сети, подходящие для потоковой передачи произвольного трафика.
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.i2p
, и "человекочитаемых" доменных имён в корневой зоне ".i2p". При доступе к новому сайту, роутер сначала должен найти его addresshelper, что иногда занимает значительное время. Процесс можно ускорить, добавив несколько готовых списков ("подписок"), публикуемых некоторыми маршрутизаторами.
Сейчас - сеть обеспечивает наибольшую анонимность из своих аналогов, но только при комплексном подходе к безопасности.
Прогноз: будет быстро вытеснена, если появится менее ресурсоёмкая альтернатива.
- сайт проекта
- Собранные пакеты под debian/ubuntu.
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, поскольку анонимность весьма условная.
- github
- Русскоязычный сайт, зеркало
- Карта узлов
- Собранные пакеты под debian.
netsukuku
!! Упоминается в качестве исторической ретроспективы, сейчас проект мёртв.
Идейный предок cjdns, но с другими принипами организации маршрутов. Основная идея - маршрутизация на основе фракталов. Близкорасположенные рядом ноды образуют "сеть" не больше определённого размера. Внутри сети маршруты строятся самими нодами, на основе данных о сегменте сети, между сетями - только через указание самой сети, лучший маршрут внутри транзитной сети выбирается ей самостоятельно.
Первоначальная реализация - C, потом проект переписали на питон, от чего он и помер. Через несколько лет проект внезапно переписали ещё раз - на vala, но, как нетрудно догадаться, ему это не помогло.
пока живёт туннель, т.е. следующие 10 минут [^fn2]: может быть получен из b64 [^fn3]: Об этом - в следующей статье ↩