--- title: Оверлейные сети, общая информация tags: репост, security, i2p, tor, cjdns --- Ниже перечислены свободные и открытые проекты оверлейных сетей, с кратким описанием, основыми недостатками и перспективами развития. В статье рассматриваются только сети, подходящие для потоковой передачи произвольного трафика. tor --- Наиболее распространённая сейчас сеть. По сути - это socks-прокси, с произвольным маршрутом, но фиксированным количеством хопов (3). Изначальное предназначение - обход цензуры. Реализован на C, потребление ресурсов - умеренное, задержки невысокие (~5с на загрузку странички внутреннего сайта). Есть несколько: [1](https://blog.torproject.org/blog/tor-security-advisory-relay-early-traffic-confirmation-attack), [2](https://www.torproject.org/docs/faq.html.en#AttacksOnOnionRouting) подтверждённых и осуществимых атак на сабж. Вкратце: атака на exit-node, timing-атака, и последняя по времени - badrelay - направлена на внутренние сайты. Местный dns работает по следующим правилам - ``http://*.onion`` - внутренние сайты, всё остальное - внешка. Роутер публикует адрес сайта на "ближайшем" роутере с выставленным флагом "Dir", т.е. "каталог" (от "directory"). "Каталоги" периодически обмениваются информацией между собой. Адрес сайта выглядит примерно как "hemtrhbowstmbw.onion". Уникальность доменного имени гарантируется сгенерированным 1024-битным RSA ключом. Прогноз: будет использоваться ещё долго, при отсутствии критических уязвимостей. Все существующие атаки требуют значительного времени на деанонимизацию пользователя, если тот сам не сделает какую либо глупость. Сайт проекта: [здесь](http://torproject.org) i2p --- В прошлом - форк freenet'а, ныне - самостоятельный проект. В отличие от tor'а - предназначен в первую очередь для размещения информации внутри сети, а не проксирования трафика во внешнюю. Выходов во внешний интернет - "outproxy" - всего несколько. Реализация - java, потребление ресурсов - высокое (минимум 200мб памяти, в среднем - 500). Задержки - до 40 секунд, первое соединение устанавливается с вероятностью 70-80%, последующие - значительно быстрее[^fn1]. Эмулирует набор прокси (socks, http, https). Количество хопов - от 0 до 8, (складывается из настроек клиентского (нашего) и серверного туннеля(удалённого)), может варьироваться при каждом соединении. Туннели перестраиваются каждые 10 минут. Основная проблема - java. Потребление ресурсов автоматически ставит крест на дешёвых dlink'ах, и прочих мыльницах за 20$. Впрочем, есть целых 2 проекта с попыткой переписать роутер на c++: [1](https://github.com/kytvi2p/i2pcpp), [2](https://github.com/PrivacySolutions/i2pd) Вторая по важности проблема - со стороны софта требуется или поддержка работы через прокси, или модификация исходников. Например, для торрентов есть 2 варианта - или встроенное приложение i2psnark, или старый и заброшенный форк transmission'а. Сам роутер - монструозен в плане навешанных возможностей (leechcraft видели?). Там тебе и встроенный вебсервер, и торрент, и почтовый клиент, и собственные децентрализованная служба сообщений и вебморда для управления роутером. DNS выглядит так: каждый роутер поддерживает список соответствий из b64 адреса (длинная многобайтная хреновина, он же - addresshelper), b32 адреса - укороченая версия helper'а вида ``[a-z]{52}.b32.i2p``[^fn2], и "человекочитаемых" доменных имён в корневой зоне ".i2p". При доступе к новому сайту, роутер сначала должен найти его addresshelper, что иногда занимает значительное время. Процесс можно ускорить, добавив несколько готовых списков ("подписок"), публикуемых некоторыми маршрутизаторами. Сейчас - сеть обеспечивает наибольшую анонимность из своих аналогов, но только при комплексном подходе к безопасности[^fn3]. Прогноз: будет быстро вытеснена, если появится менее ресурсоёмкая альтернатива. * [сайт проекта](http://geti2p.net/en/) * Собранные [пакеты](http://ppa.launchpad.net/i2p-maintainers/i2p/) под debian/ubuntu. cjdns ----- На мой взгляд - самый перспективный проект в плане mesh-сетей. Реализован на C, потребляет мало, предусмотрена работа как поверх голого L2/ethernet, так и L3/udp. В отличие от проксей tor'а и i2p предоставляет tun-интерфейс с ipv6, это сразу даёт совместимость практически со всем не слишком старым софтом. !!! Сеть не анонимна. Интересен принцип поиска нужного хоста и внутренней маршрутизации. Вкратце он описан в их [whitepaper](https://github.com/cjdelisle/cjdns/blob/master/doc/Whitepaper.md)'е. Краткая суть такова - используется label-based routing, при проходе через роутер, последовательность label'ов сдвигается на размер label'а этого роутера. label - не фиксированного размера и соединены в route "встык". На практике, это означает, что конечный router не знает сколько **точно** хопов проходит пакет, но всю последовательность хопов можно восстановить при желании. Основной недостаток - создатели предполагают организацию "friend-to-friend", по типу фидо. Автоматическое обнаружение новых нод работает только если вы уже подключены к какой либо из них. [Обсуждение](http://cjdns.ru/forum/viewtopic.php?f=6&t=177) нужности "публичных пиров", ака "bootstrap". Второй недостаток - до сих пор не решены проблемы с местным dns'ом, нет точного представления, как он должен выглядеть. Есть несколько серверов, держащих неофициальную корневую зону `.hype`, но в долгосрочной перспективе - это опять централизация, со всеми вытекающими. Были попытки прикрутить к нему namecoin, но всеобщего одобрения идея не получила. Прогноз: положительный, при решении проблемы с dns'ом и механизмом обнаружения. Стабильный - в противном случае. Важно помнить, что это не прямая замена tor'у и i2p, поскольку анонимность весьма условная. * [github](https://github.com/cjdelisle/cjdns) * [Русскоязычный сайт](http://cjdns.ru), [зеркало](http://cjdroute.net) * [Карта](http://cjdroute.net/map/) узлов * Собранные [пакеты](http://aduser.info/repo/debian-local/) под debian. netsukuku ---------- !! Упоминается в качестве исторической ретроспективы, сейчас проект мёртв. Идейный предок cjdns, но с другими принипами организации маршрутов. Основная идея - маршрутизация на основе фракталов. Близкорасположенные рядом ноды образуют "сеть" не больше определённого размера. Внутри сети маршруты строятся самими нодами, на основе данных о сегменте сети, между сетями - только через указание самой сети, лучший маршрут внутри транзитной сети выбирается ей самостоятельно. Первоначальная реализация - C, потом проект переписали на питон, от чего он и помер. Через несколько лет проект внезапно переписали ещё раз - на vala, но, как нетрудно догадаться, ему это не помогло. * [Википедия](https://en.wikipedia.org/wiki/Netsukuku) [^fn1]: пока живёт туннель, т.е. следующие 10 минут [^fn2]: может быть получен из b64 [^fn3]: Об этом - в следующей статье