CJDNS мертв, да здравствует Yggdrasil / Habr
Что такое Yggdrasil?
Yggdrasil — это распределённая Mesh сеть, которая работет в Overlay режиме, позволяя сделать интернет поверх интернета.Последние новости о сети cjdns датируются 2017 годом, может показатся, что сеть умерла и разработка остановлена (на самом деле — да), однако появился самозванец — Yggdrasil, который практически полностью копирует cjdns однако делает это намного лучше.Причем, сеть может одновременно работать в двух режимах — через интернет и без интернета, соединяясь напрямую с физически соседними пирами (через Ethernet, Wi-Fi или Bluetooth) работая на 3-ем уровне модели OSI.
На Apple устройствах использован протокол AWDL.
В посте рассмотрим:
- Что такое Yggdrasil
- Зачем это нужно
- Откуда он взялся
- Можно ли ему доверять
- В чем отличее от cjdns
- Почему его стоит установить прямо сейчас
- Поддержка iOS (Да!)
Что в планах- Как настроить
Что такое Yggdrasil
Yggdrasil — это оверлейная сеть, которая призвана воплотить концепцию нулевой настройки сетей — вам не нужно знать маршруты, вам не нужно ничего настраивать — всё должно работать из коробки и сразу и еще это должно масштабироваться.
Зачем это?
Это тянет на отдельную статью, рассмотри кратко:
- Устранение текущих проблем BGP
- Настоящая zero-conf
- Еще один метод защиты от блокировок (будущих) с нарушением сетевой связанности
Откуда он взялся
Yggdrasil — это продолжение развития cjdns, только с чистого листа, разработчики участвующие в проекте cjdns в какой-то момент решили отделится от проекта cjdns и переписать всё с нуля.
Это произошло из-за разногласий с основателем cjdns — по его задумке в сети должны были появиться супер-узлы, которые должны содержать полню карту сети, по их мнению — этот путь неверный и они хотели сохранить сеть одноранговой (когда каждый узел по функциям одинаков с остальными). Помимо этого — оригинальная сеть медленно развивалась из-за выбранных методов разработки и языков и она так и не смогла (за 5 лет) добратся до поддержки мобильных устройств, что в современном мире — не простительно.
Активность разработки
CJDNS
Yggdrasil
Arceliar — второй разработчик по количеству коммитов как раз покинул cjdns и основал совместно с neilalexander — yggdrasil.
Можно ли ему доверять
Да, разработчики — те же.
В чем отличее от cjdns
- Сеть одноранговая
- Есть поддержка большого количества устройств (даже iOS!)
- Есть официальный репозиторий публичных узлов
- Подключаться к узлу можно без приватного ключа (а можно и с ним конечно) — публичные ноды используют подключение без
- Используемый язык — Go
- Есть готовые пакеты под большинство систем
- Более тонкая и удобная настройки
- Более быстрая разработка
Почему его стоит установить прямо сейчас
Прямо сейчас в сети работает 280+ узлов, и они прибывают примерно по 10 узлов в неделю, сеть как и CJDNS позволяет подключаться как через обычный интернет yggdrasil —> интернет —> yggdrasil.
После этого, внутри вашей локальной сети, любой пользователь с клиентом (ПК или даже iPhone) сам обнаружит ваш узел на raspberry и подключится.
В связи с будущими планами развития рунета, есть большой шанс нарушения международных связей (всех или почти всех) однако интернет штука сложная, всегда найдется где-то выход в международный сегмент. Если уже сейчас установить себе yggdrasil то в рамках сети у кого-то может остатся доступ к публичному сегменту, вот через него трафик и будет маршрутизирован.
Отдельно хочу отметить — сеть не позволяет выйти в обычный интернет — только свои ресурсы — это не TOR, таким образом риски «быть прокси» — пропадают. Всё что передается в yggdrasil остается там же.
Однако, если вы планируете использовать сеть, как резервный источник доступа на случий непредвиденных ситуаций — это вполне можно сделать, вы сможете подключится к вашему MTProto Proxy или VPN через yggdrasil.
Схема будет следующая VPN —> Yggdrasil (неизвестные вам узлы) —> ваш VPN —> Интернет
Поддержка iOS (Да!)
Сеть правда поддерживает работу на iOS причем работает стабильно, имеет авто-подключение, на iOS как и 1.1.1.1 работает через установку VPN адаптера (ссылки будут ниже)
Что в планах
Планы взяты на основе Roadmap разработчиков и Issue с github — там ведётся планирование
- Поддержка Android
- Поддержка авто-подключения между iOS устройствами даже если они не в одной Wi-Fi сети (очень круто)
- Работа через WebSocket как способ скрытия работы сети
Как настроить
На официальном сайте предоставлены все инструкции yggdrasil-network.github.io/installation.html
Debian/Ubuntu/Raspberry
Добавляем ключи репозитория
gpg --fetch-keys https://neilalexander.s3.eu-west-2.amazonaws.com/deb/key.txt gpg --export 569130E8CA20FBC4CB3FDE555898470A764B32C9 | sudo apt-key add -
Добавляем репозиторий
echo 'deb http://neilalexander.s3.eu-west-2.amazonaws.com/deb/ debian yggdrasil' | sudo tee /etc/apt/sources.list.d/yggdrasil.list
sudo apt-get update
Устанавливаем
sudo apt-get install yggdrasilКонфигурационный файл — /etc/yggdrasil.conf о нем мы поговорим чуть позже.
P.S.: Можно скачать только пакет или собрать из исходных кодов — инструкция тут yggdrasil-network.github.io/installation.html
OS X
Скачиваем готовый пакет
wget https://700-115685026-gh.circle-artifacts.com/0/yggdrasil-0.3.5-macos-amd64.pkgУстанавливаем
sudo installer -pkg yggdrasil-0.3.5-macos-amd64.pkg -target /Либо устанавливаем из исходных кодов yggdrasil-network.github.io/installation-macos-other.html
Конфигурационный файл - /etc/yggdrasil.conf.
iOS
Через iPhone/iPad нужно открыть ссылку и согласится на тестирование
Скачиваем TestFlight itunes.apple.com/us/app/testflight/id899247664?mt=8
Устанавливаем Yggdrasil testflight.apple.com/join/jZNsIkRr
Для корректной работы нужно согласится на установку VPN адаптера
Подключаемся
Установили приложение?
Переходим в публичный каталог пиров и выбираем ближайшего к себе с точки зрения географии пиров (а лучше парочку).
Теперь пора добавить «пиров», идем в /etc/yggdrasil.conf (в случае iOS на вкладку Peers)
и добавляем
На iOS это можно сделать в интерфейсе приложения.
Если в странах СНГ будут желающие сделать публичных пиров — пишите в комментариях — добавим в пост и желательно добавляйте их в github.
Что посмотреть в сети?
Сервисы в сети описаны тут.
Первое куда стоит заглянуть — на карту сети http://[21f:dd73:7cdb:773b:a924:7ec0:800b:221e]/
Больше почитать по сеть можно на сайте сети yggdrasil-network.github.io и в блоге.
P.S.: Кстати, совсем недавно в ZeroNet была добавлена поддержка cjdns и yggdrasil, русское сообщество в Zeronet.
Cjdns — Википедия
Материал из Википедии — свободной энциклопедии
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 6 сентября 2018; проверки требуют 8 правок. Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 6 сентября 2018; проверки требуют 8 правок.Cjdns — сетевой протокол и его реализация, с помощью которого можно создать масштабируемую, безопасную и простую в настройке сеть. Сеть может работать как поверх интернет-соединения, так и между маршрутизаторами напрямую.[2]
Работа сетевого протокола осуществляется через сетевой туннель (TUN). Программы могут работать в данной сети при условии, что они поддерживают протокол IPv6. После установки нужного программного обеспечения трафик автоматически перенаправляется в данную сеть, что позволяет избежать дополнительной настройки программ. В сети для пользователя генерируется IPv6-адрес, который относится к приватной части IPv6-адресов, а, значит, не будут происходить коллизии с реальными IPv6-адресами. При подключении через обычный интернет нужно найти уже существующий узел сети и узнать его адрес и ключ. При подключении маршрутизатор-маршрутизатор все происходит самостоятельно.
Маршрутизация трафика обеспечивается с помощью системы, аналогичной Kademlia DHT, точнее говоря, каталог маршрутов постоянно обновляется из-за того, что конфигурация сети может поменяться, таким образом, сеть поддерживает оптимальную нагрузку через все узлы и выбирает самый короткий путь для трафика.
Сеть приватная — трафик не может быть расшифрован никем, кроме узла, которому он должен быть доставлен. Сеть не анонимная[3] — целью её создания было сделать не клон I2P/Tor, а сделать новый интернет. Таким образом, с помощью трассировки можно узнать цепочку узлов и выяснить ваш IPv4 адрес; очевидно, что при подключении типа маршрутизатор-маршрутизатор данная проблема отпадет и сеть станет также анонимной.
В данный момент происходит этап тестирования. Все желающие могут зайти в Git-репозиторий и загрузить исходный код. Протокол cjdns доступен для большинства UNIX-подобных систем, таких как Linux (Debian, Ubuntu и др.), Mac OS X, FreeBSD и Illumos. Имеется поддержка таких архитектур, как x86, x86-64, PowerPC, MIPS и ARMv6 (Raspberry Pi). Все это позволяет легко начать работу на старом или новом оборудовании. Протокол можно внедрить в распространенную прошивку OpenWRT для маршрутизаторов.
Hyperboria является экспериментальной децентрализованной сетью, созданной тестерами и разработчиками cjdns для проверки протокола. Она была создана для того, чтобы любые данные, при передаче через интернет, были надежно зашифрованы (без предоставления анонимности [3]), а скорость доступа к ним стремилась к максимально возможной. Для реализации независимого децентрализованного DNS разработан модуль на базе системы псевдонимов криптоплатформы Nxt[4].
Как подключиться к Hyperboria / Habr
Введение
На Хабре уже есть несколько статей про сеть Hyperboria:Hyperboria: Интернет 2.0
Hyperboria: Как все устроено
Hyperboria: Маршрутизация
В них вы можете почитать подробности про устройство и принципы сети, разрешение некоторых проблем и всё такое.
Здесь же я хочу написать что-то типа FAQ + гайд по подключению.
FAQ
В. О чём вообще речь?О. О распределённой децентрализованной p2p-сети, строящейся на основе cjdns
В. И зачем оно нужно?
О. Затем, что нынешний Интернет слишком зависимый. Зависит от провайдеров и от регулирующих их государств. Подключение к mesh-сети абсолютно открыто и бесплатно, информация не может быть зацензурированна, а сопоставить ваш ipv6-адрес в сети с реальным физическим адресом невозможно (в случае полноценной mesh-сети).
В. Что нужно для подключения?
О. Девайс с *nix-системой (в т.ч., OS X)
В. А как же Windows?
О. Разработка идёт
В. А доступ в Интернет нужен?
О. Пока что – нужен, но в стратегическом плане переход на полноценную mesh-сеть.
В. Что такое mesh-сеть?
О. Cjdns поддерживает два режима работы:
- оверлейный режим – когда связь между нодами происходит поверх обычного интернет-соединение
- Mesh-режим – когда ноды соединяются напрямую (например, по wi-fi два недалеко стоящих роутера), без подключения к Интернет
Подключение
Сборка из исходников
Это официально предлагаемый автором метод установки (перевод мой).Вот ещё есть README на русском от shifttstas
Вам потребуется git, cmake и всякие прочие стандартные штуки.
Для Debian\Ubuntu:
sudo apt-get install cmake git build-essentialДальше, выкачиваем себе репозиторий с github и переключаемся в соответствующую директорию:
git clone https://github.com/cjdelisle/cjdns.git cjdns
cd cjdnsСобственно, сборка:
./doПри успешной сборке в итоге вы увидитеBuild completed successfullyЕсть инструкции по установке для ArchLinux и для Gentoo
Настройка
0. Проверьте, что есть всё необходимое
cat /dev/net/tunЕсли получится такое:
cat: /dev/net/tun: File descriptor in bad stateзначит, всё ок! Идём дальшеЕсли же получили такой ответ
cat: /dev/net/tun: No such file or directoryвыполните следующие команды:sudo mkdir /dev/net &&
sudo mknod /dev/net/tun c 10 200 &&
sudo chmod 0666 /dev/net/tunПопробуйте снова выполнить
cat /dev/net/tunЕсли в ответ получите такое
cat: /dev/net/tun: Permission deniedВы, вероятно, используете VPS на основе платформы OpenVZ. Попросите хостера включить вам «туннельный интерфейс» TUN/TAP – это стандартная штука, они должны знать, как это сделать.1. Создайте конфигурационный файл
./cjdroute --genconf >> cjdroute.confЭтот файл – ваше всё! Там ваши ключи, ipv6-адрес, пароли доступа и т.д. и т.п., соответственно, он должен быть хорошо защищён.Установите права доступа к фалу только для себя и поместите его, например, в home
chmod 600 cjdroute.conf
mv cjdroute.conf ~/.cjdroute.conf2. Найдите пиры
Самый сложный шаг – пока сеть, в основном, работает в оверлейном режиме (т.е., поверх интернет-соединения), для подключения к Hyperboria вам нужно найти кого-то, кто уже подключён.Можно посмотреть на карте проекта, попросить в IRC-чатике irc://irc.efnet.org/#cjdns, попробовать спросить на русскоязычном форуме.
Есть некоторые публичные ноды, но они плохи тем, что (из-за малого количества нод вообще) ломают децентрализацию и сами становятся центрами подключения. Можно подключиться через публичную ноду, а затем найти кого-нибудь внутри сети (например, существует внутренний сервис микроблогов).
3. Добавьте инфу пира в конфиг
Для подключения к пиру вам потребуется его ip и порт, пароль и публичный ключ. Обычно, всё это передаётся в виде JSON, выглядит примерно так:"123.45.67.123:34567": {
"password": "sjfhgwetuyfdgwudbjwedgu34",
"publicKey": "amnfbwjhfbu4bwhcbuwyrho2iudh484rgiwyebuwygriwebdfgueyr.k"
}Подобную информацию надо вставить в конфиг в поле ‘connectTo’
// Nodes to connect to.
"connectTo":
{
"0.1.2.3:45678":
{
"password": "thisIsNotARealConnection",
"publicKey": "thisIsJustForAnExampleDoNotUseThisInYourConfFile.k"
}
}Либо воспользоваться моим веб-интерфейсом (про него чуть дальше).Можно добавлять сколько угодно пиров (и чем больше – тем лучше).
Если вы хотите предоставить кому-то доступ через вашу ноду, то данные есть в конфиге в комментарии рядом с секцией ‘authorizedPasswords’.
Нужно только вписать свой внешний ip-адрес.
В секции ‘authorizedPasswords’ можно добавлять различные пароли для разных людей, а в json-информацию о пирах в ‘connectTo’ можно добавлять любые поля (например, информацию о географическом местоположении ноды).
4. Проверьте открытые порты!
После подключения к сети ваша нода получит белый статический ipv6-адрес (впрочем, доступный только из Hyperboria), поэтому важно проверить, нет ли неизвестных вам открытых портов, к которым мог бы кто-то подключиться.5. Поехали!
sudo ./cjdroute < ~/.cjdroute.confЕсли нужно записывать логи:
sudo ./cjdroute < ~/.cjdroute.conf > cjdroute.logТакже, логи можно смотреть «в прямом эфире» через мою веб-админку
Чтобы выключить cjdns
sudo killall cjdrouteДля запуска cjdns не от рута тоже есть инструкция
Вы в сети
Попробуйте зайти на какой-нибудь Hyperboria-сервис.Например, аналог Твиттера: http://socialno.de
При первом старте может потребоваться несколько минут на построение маршрутов.
Веб-интерфейс к админскому API cjdns
Я написал небольшую админку на nodejs, которую вмерджили в основной репозиторий cjdns.Для использования вам потребуется node.js и json-файлик ‘~/.cjdnsadmin’ со следующим содержимым:
{"config":"~/.cjdroute.conf"}Заходим в директорию репозитория cjdns, дальше переходим в директорию админки:
cd contrib/nodejs/adminУстанавливаем node.js-зависимости с помощью npm:
npm installЗапускаем админку:
node admin.jsПо-умолчанию, админка запускается на http://localhost:8084, никак не закрыта для доступа извне, так что не держите её запущенной постоянно.
В админке доступно выполнение методов API, просмотр логов разного уровня в прямом эфире, редактирование пиров. Если дойдут руки — скоро будет доступна визуальная карта сети.
При сохранении конфига из админки после изменения пиров, предыдущая версия сохраняется в директории конфига.
Единственный минус – при сохранении удаляются все комментарии, так что если что – смотрите в самую первую версию конфига.
Подключение в mesh-режиме
Данный тип подключения пока что работает только для linux и не работает в OS XВ идеальном случае, всё просто: надо найти в конфиге закомментированную секцию ‘ETHInterface’ и раскомментировать её.
Также, надо указать в поле ‘bind’ имя сетевого интерфейса, который вы хотите использовать для поиска нод (например, ‘eth0’).
Перезапустите cjdroute и если в вашей сети (физической) будут другие cjdns-ноды с включённым ‘ETHInterface’ – они друг к другу автоматически подключатся.
При этом, если ни одна из нод не подключена к пирам из Hyperboria, то вы получите собственную cjdns-локалку, с по-умолчанию шифрованным траффиком и прочими радостями.
Сборка OpenWRT с поддержкой cjdns
Если вы хотите установить cjdns на роутер, придётся повозиться немного дольше.Раз вы об этом задумались, скорее всего, вам не составит труда прочитать инструкцию на английском.
Основной косяк, который допустил я сам при первой попытке – это попытка собирать OpenWRT прямо на роутере 🙂
Конечно, это надо делать на нормальном компе, а потом уже скомпилированную прошивку устанавливать на роутер.
Предварительно, проверьте свой роутер на совместимость.
К слову, на моём Netgear WNDR3600 оно завелось, но через неделю роутер стал жутко тупить (даже при выключенном cjdns), пришлось снести OpenWRT и поставить обратно dd-wrt.
Захват мира
Глобальные планы автора cjdns и сообщества вообще – замена нынешней сети Интернет на Hyperboria.Сейчас есть несколько mesh-участков сети в Штатах (самый большой, если не ошибаюсь, в Сиэтле).
Предлагаю заинтересованным в построении сети в России (и в Москве, в частности) приходить на форум для разработки плана захвата.
Что уже есть в сети
Список известных сайтовСайты о проекте
http://hyperboria.nethttp://projectmeshnet.org/
Вики проекта
Русскоязычный сайт и форум
Cjdns — немного теории и практики
Cjdns — технология и соответствующее ПО для построения mesh-сети. Cjdns сейчас на слуху у многих, но все же представить ее в начале статьи стоит, и считаю, что точнее всего опишет заголовок на гитхаб:
Cjdns — это зашифрованная IPv6 сеть, в которой используются публичные ключи шифрования для присвоения публичного адреса и распределённой таблицы маршрутизации (DHT). Это позволяет создавать сети с очень простой настройкой, которые будут защищены от потенциальных проблем ныне существующих IPv4 и IPv6 сетей
Теперь немного отсебятины. Протокол и ПО cjdns в целом позволяют создать свою сеть внушительных масштабов, при этом не прикладывая человеческой руки к настройке адресного пространства или протоколов маршрутизации. В целом, чтобы попасть в отдельно взятую сеть требуется только подключиться к одному из узлов сети, и этого будет достаточно. Вам сразу будет видна вся сеть, как и Вы сети — для каждой ноды генерируется уникальный IPv6-адрес, из частного диапазона fc00::/8, который доступен из любой точки, что дает возможность работать p2p-приложениям без преодоления NAT или прокси. Работает cjdns как поверх UDP, для обеспечения функционирования в привычных нам сетях, такие как Интернет, так и напрямую поверх Ethernet, что дает возможность установить связь между узлами в пределах L2-сегмента. Работа последнего упрощена с перспективы пользователя до неприличия. После запуска Cjdns начинает посылать броадкастовые кадры в сеть с полем type равным 0xfc00, и соответственно сам их слушает. Узлы находят друг друга и устанавливают связь, после чего идет обмен данными.
Обмен данными между двумя cjdns-узлами в одном L2-сегменте. Обратите внимание на поле type = 0xfc00 — это значит, что в кадр упанованы данные cjdns. Даже IP-адреса на интерфейсы вешать не нужно!
Чем же это хорошо? Конечно же в первую очередь подразумевают построение сети по WiFi-линкам между узлами. Тут используется либо протокол 802.11s “WiFi Mesh”, как низкоуровневый транспорт, либо просто через соединение AP-client (“точка доступа — клиент”) или Ad-hoc (“точка-точка”). Кабельное же соединение можно, например, использовать для организации линка через локальную сеть провайдера, если он все еще подключает абонентов через широкие L2-сегменты, хотя бы в пределах района.
Ну и, конечно, шифрование! Шифруется как “линк” между узлами, так и передача пакетов “end-to-end”. Транзитная нода не может прочитать пакеты, которые протекают через нее между двумя абонентами.
Самой большой публичной сетью, построенной на cjdns, на данный момент является Hyperboria. Визуально масштабы можно оценить на карте fc00.org. Карта на момент написания статьи показывала 648 активных узлов. К сети можно подключиться как подцепившись к публичным нодам, так и договорившись с товарищем о пиринге. Далее я опишу процесс установки и настройки, но сперва рассмотрим принципы работы cjdns.
О “кишках” cjdns
Функционирование cjdns держится на следующем принципе:
cjdns is made of three major components which are woven together. There is a switch, a router, and a CryptoAuth module. With total disregard for the OSI layers, each module is inherently dependent on both of the others. The router cannot function without routing in a small world which is made possible by the switch, the switch is blind and dumb without the router to command it, and without the router and switch, the CryptoAuth has nothing to protect.
cjdns состоит из трех главных компонентов, которые связаны между собой. Это модули switch (коммутатор), router (маршрутизатор) и CryptoAuth. С полным пренебрежением к уровням модели OSI, каждый из модулей по своему существу зависим от двух остальных. Маршрутизатор не может функционировать без маршрутизации в маленьком мире, которая возможно благодаря коммутатору. Коммутатор глуп и слеп без команд маршрутизатора. А без коммутатора и маршрутизатора модулю CryptoAuth нечего защищать.

Весьма расплывчато? Постараемся разобраться чуть детальнее, посмотрев в whitepaper.
Cjdns-коммутатор выполняет непосредственную маршрутизацию пакетов от точки А до точки B. Маршрутизация ведется на основе т.н. Interface, Self Interface, Director и Route Label. Interface — в данном контексте это линк “точка-точка” между двумя cjdns-коммутаторами, который как раз эмулируется UDP-тоннелем или подключением по Ethernet. Self Interface — специальный интерфейс, который нужен для приема пакетов, предназначенных для самой ноды, а не для пересылки дальше по цепочке. Director — это двоичное число произвольной длины, на основе которого принимается решение о маршрутизации в заданный интерфейс. А Route Label — это набор Director’ов, которые описывают полный путь от точки A к точке B. Внутри каждого пакета содержится Route Label. При прохождении пакета по нодам, начиная от самой ноды-источника, каждая из них “смотрит” в конец Route Label и ищет там свой Director. Если находит — то нода знает Interface, в который следует послать пакет дальше и готовит пакет к отправке. Нода сместит строку Route Label вправо на длину найденного Director’а, тем самым стерев его из Route Label, а в начало Route Label запишет Director интерфейса откуда пришел пакет. Итого, получается, что в начале пути пакета в нем записан маршрут от точки А к точке B, а в конце его пути уже будет записан полный обратный маршрут от B к А. И сразу стоит заметить, что в начале пути в конце Route Label стоит Director описывающий Self Interface точки B, а к концу пути в начале Route Label уже записан Self Interface точки А. Чтобы разобраться в принципе, следует посмотреть пример такой маршрутизации пакета.

Пример прохождения пакета. Route label меняется на каждом узле, начиная от узла-источника. Иллюстрация не отражает реального положения дел, но показывает принцип. В реальности выполняются некоторые битовые операции и есть ограничения на идентификатор Director’а
Вы могли могли заметить, что Director’ы не связаны с глобальными оконечными адресами узлов, и как это называется, не globally-unique, т.е. не уникальны глобально, и имеют только локальное значение на cjdns-коммутаторе. Да и весь Route Label — это всего лишь 64-битная строка. И поэтому для определения пути до оконечной точки нужен cjdns-маршрутизатор.
Cjdns-маршрутизатор выполняет 3 функции. Он периодически ищет маршруты до нод в сети, отвечает на запросы поиска, и пересылает пакеты из стандартного стека в cjdns. Маршрутизатор отвечает на запросы поиска координатами ноды, которую считает ближайшей к точке назначения. А ближайшей будет та нода, которая ближе всего по т.н. расстоянию адресного пространства (address space distance). Считается по так называемому “XOR metric”, впервые представленным в Kademlia DHT. XOR metric по сути это складывание по модулю 2 двух адресов, и представление результата в виде целого числа. Чем более “разные” адреса, тем больше эта метрика. Если адреса одинаковые, то метрика равна 0. Маршрутизатор, при поиске пути до запрашиваемого IPv6-адреса начинает рассылать сообщения поиска узла своим известным нодам. Ноды отвечают списком своих известных нод, которые они считают ближайшими до искомой (по address space distance, с некоторой фильтрацией ответов с целью исключения петель поиска), включая в ответ Route Label до них со своей перспективы. Маршрутизатор заносит в свою таблицу маршрутизации новые разведанные ноды. Путь до новых разведанных нод получается сцепкой присланной Route Label, которую прислала нода, с Route Label до ноды которая прислала ответ.

Сцепка Route Lable’ов для с целью построить полный путь до ноды.
Такой поиск повторяется рекурсивно, пока искомая нода не будет найдена. Причем разведанные в ходе поиска ноды продолжают храниться в базе. Если потребуется к этим нодам обратиться снова, можно взять сохраненные результаты разведки без дополнительного поиска! Все же следует сказать, что сейчас используется также и централизованный подход получения маршрутов — по запросу от суперноды. Супернода — это нода в сети cjdns, которая периодически сканирует сеть на предмет новых пиров и заносит в базу. По запросу к ней можно получить маршрут между любыми двумя нодами.
Кстати говоря, искомый адрес, как можно было догадаться, это привычный IPv6-адрес узла. И сразу стоит заметить, что изменить его на красивый и блатной не выйдет, так как получается IPv6-адрес путем подбора нужного публичного ключа шифрования (выполняется двойной подсчет sha-512, пока не получится строка, начинающаяся с байта fc), и функционально с ним связан. Поэтому плавно перейдем к модулю CryptoAuth.
CryptoAuth требуется для аутентификации и шифрования данных. Первый уровень шифрования это “end-to-end”, или “router-to-router”, который упаковывается в шифрование “node-to-node”, или “switch-to-switch”. Таким образом с перспективы транзитных нод не видно, какие данные пересылаются между двумя абонентами сети cjdns, а с перспективы канала связи между транзитными нодами не видно, между какими абонентами сети cjdns пересылаются данные. Шифрование обеспечивается сессиями, которые устанавливаются путем пересылки специальных пакетов.
На этом моменте стоит перейти к практической настройке cjdns.
Подключение к Hyperboria
Инструкция по установки cjdns на официальном git очень подробно описывает весь процесс и для разных дистрибутивов. Кратко рассмотрим процесс установки на Ubuntu.
Устанавливаем зависимости:
sudo apt install nodejs git build-essential python2.7
Клонируем репо и собираем cjdns:
git clone https://github.com/cjdelisle/cjdns.git cjdns
cd cjdns
./do
Генерируем новый конфиг-файл:
./cjdroute --genconf >> cjdroute.conf
Не забываем выставить на него нужные права — принадлежать должен он только пользователю, из под кого вы собираетесь запускать cjdns и запрещаем его читать кому-либо другому. Нужно это, так как файл содержит закрытый ключ.
Открываем конфиг. И как раз первым встречаем закрытый ключ, а еще публичный ключ и сгенерированный IPv6-адрес:
{
// Private key:
// Your confidentiality and data integrity depend on this key, keep it secret!
"privateKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
// This key corresponds to the public key and ipv6 address:
"publicKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.k",
"ipv6": "fcxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx",
Естественно, privateKey никому рассказывать не стоит. ipv6 — это будет Ваш адрес в сети cjdns. В этом блоке, собственно, ничего менять больше не требуется, и вообще не стоит.
Секция "authorizedPasswords": требуется, если вы хотите к себе подключить каких-либо пиров. Для исходящих соединений дополнительная её настройка не требуется и поговорим о ней позже.
Пропустим еще кусок конфига и остановимся на секции "interfaces":. Настроим секцию "UDPInterface": для того, чтобы подключаться к cjdns через Интернет. Раскомментируем настройку "bind": "0.0.0.0:20789" и оставим как есть — это позволит слушать устройству все интерфейсы для построения UDP-тоннеля в cjdns. Получается так:
"UDPInterface":
[
{
// Bind to this port.
"bind": "0.0.0.0:20789",
// Set the DSCP value for Qos. Default is 0.
// "dscp": 46,
Если же есть желание ограничить прослушиваемый сокет одним интерфейсом или поменять порт, можете вписать свой вариант.
Ниже в секции "connectTo" наиболее интересный момент — это настройка пиров, с которыми вы будете соединяться.
Для начала нужно решить — к кому же подключиться, чтобы войти в сеть. Какую сеть? Подключаемся к сети Hyperboria. В сети есть ряд публичных нод, доступных для подключения любому желающему. Для того, чтобы подключиться, нужно получить ряд минимальных данных — IP (в сети Интернет) и порт подключения, публичный ключ и пароль. К дополнительным данным относятся имя пользователя (если используется для аутентификации), контактные данные, географическая локация. Записывается это в следующем виде. Как пример, данные для подключения к моей ноде:
"46.151.26.194:60574": {
"login": "public",
"password":"d41862xcrd0q6l9v6mwbvrkuk70p0ht",
"publicKey":"34zb5vlg59rghf857h70tpp0ycqpts1cmtgbxltqcrp68c883vt0.k",
"peerName":"netwhood.online"
},
Имеет смысл подключаться к географически-ближайшей ноде, чтобы минимизировать задержки. Некоторые ноды перечислены на hyperboria/peers. Я же просто пошел на карту fc00.org и посмотрел данные крупнейших. Я подключился к следующим нодам:
Итого весь кусок конфига может выглядеть следующим образом:
"UDPInterface":
[
{
// Bind to this port.
"bind": "0.0.0.0:20789",
// Set the DSCP value for Qos. Default is 0.
// "dscp": 46,
// Nodes to connect to (IPv4 only).
"connectTo":
{
"46.151.26.194:60574": {
"login": "public",
"password":"d41862xcrd0q6l9v6mwbvrkuk70p0ht",
"publicKey":"34zb5vlg59rghf857h70tpp0ycqpts1cmtgbxltqcrp68c883vt0.k",
"peerName":"netwhood.online"
},
"164.132.111.49:53741": {
"password" : "cr36pn2tp8u91s672pw2uu61u54ryu8",
"publicKey" : "35mdjzlxmsnuhc30ny4rhjyu5r1wdvhb09dctd1q5dcbq6r40qs0.k",
},
"195.201.148.242:26721":{
"password":"public_access",
"publicKey":"1gy9myu5fhd2uhbjgju6nn54uwgz1dtr5g9r3kwsc5r9f32567s0.k",
"user":"weuxel",
"contact": "[email protected]",
"peerName": "weuxel.modi"
},
}
}
},
Настройки секции "ETHInterface": используются для подключения к cjdns поверх Ethernet. Если вы не подключаетесь таким образом, то настройку "beacon" лучше поставить 0, чтобы не захламлять локальную сеть трафиком:
Если все же собираетесь подключиться таким образом, то вот несколько слов об этом. Установка "beacon" в значение 1 позволяет только принимать запросы на подключение — интерфейс не будет броадкастить в сеть сообщения присутствия. Значение 2 заставляет интерфейс и принимать подключения, и броадкастить в локальную сеть сообщения присутствия. Очевидно, что для того, чтобы установить соединение, нужно чтобы с одной стороны было значение 2, а с другой либо тоже 2, либо 1. Чуть ниже можно определить конкретные MAC-адреса пиров для подключения, аналогично настройке пиров через UDP-интерфейс, чтобы не броадкастить фреймы в сеть.
В конце, для удобства настроим еще имя tun-интерфейса, который будет использоваться сетевым стеком для пересылки пакетов по cjdns. Задается оно в "tunDevice":. По умолчанию стоит tun0, но для исключения пересечения имен туннельных интерфейсов лучше задать другое. Например:
Похоже, что все. Но все же еще раз напомню, что запустив cjdns, вы будете у всей сети как на ладони. А что это значит? Это значит, что все сервисы, которые слушают IPv6-адрес [::], будут слушать и коннекты на туннельный интерфейс tun-cjdns. А значит нужно настроить фаерволл. Это может быть как firewalld, для удобной настройки профилей на десктопе, так и ip6tables, например на серверной машине. Если используется firewalld, то скорее всего к интерфейсу уже будет применена зона public. Просто ограничьте на этой зоне сервисы, или создайте для cjdns отдельную зону.
Ну, сохраняем файл и запускаем cjdns. Не знаю у кого как, а у меня tun-интерфейс создается только запуском из-под рута:
sudo ./cjdroute < ./cjdroute.conf
Проверяем, что все запустилось. Смотрим, появился ли tun-интерфейс по команде ip addr:
tun-cjdns: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1304 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet6 fc52:c25:a033:ad59:d58a:613f:69c5:2ca7/8 scope global
valid_lft forever preferred_lft forever
inet6 fe80::984c:fb94:611c:e0d5/64 scope link stable-privacy
valid_lft forever preferred_lft forever
Смотрим, есть ли соединение с пирами. Для этого выполняем скрипт из стандартной поставки:
$ ./contrib/python/peerStats
46.151.26.194:60574 fc70:e98e:5c8f:3971:494c:361b:4ca8:4c5d v20 0000.0000.0000.0019 in 43989 out 105183 ESTABLISHED dup 0 los 6 oor 0 'netwhood.online'
104.200.29.163:53053 fc6a:30c9:53a1:2c6b:ccbf:1261:2aef:45d3 v20 0000.0000.0000.0017 in 683749 out 344596 ESTABLISHED dup 0 los 20 oor 0 'outer'
164.132.111.49:53741 fc6c:99a2:171a:f36a:8cd0:cc6b:efb7:8bb4 v20 0000.0000.0000.0015 in 1301486 out 1518017 ESTABLISHED dup 0 los 262 oor 0 'outer'
195.201.148.242:26721 fc1e:9771:3881:8cff:d5b2:bfac:930f:b4ed v20 0000.0000.0000.0013 in 892129 out 1407227 ESTABLISHED dup 0 los 97 oor 0 'weuxel.modi'
ESTABLISHED напротив данных пира говорит о том, что соединение установлено.
Попингаем кого-нибудь из сети. Например своего же пира:
$ ping6 fc70:e98e:5c8f:3971:494c:361b:4ca8:4c5d
PING fc70:e98e:5c8f:3971:494c:361b:4ca8:4c5d(fc70:e98e:5c8f:3971:494c:361b:4ca8:4c5d) 56 data bytes
64 bytes from fc70:e98e:5c8f:3971:494c:361b:4ca8:4c5d: icmp_seq=1 ttl=42 time=2.31 ms
64 bytes from fc70:e98e:5c8f:3971:494c:361b:4ca8:4c5d: icmp_seq=2 ttl=42 time=2.67 ms
64 bytes from fc70:e98e:5c8f:3971:494c:361b:4ca8:4c5d: icmp_seq=3 ttl=42 time=3.02 ms
64 bytes from fc70:e98e:5c8f:3971:494c:361b:4ca8:4c5d: icmp_seq=4 ttl=42 time=3.43 ms
^C
--- fc70:e98e:5c8f:3971:494c:361b:4ca8:4c5d ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 2.316/2.862/3.436/0.418 ms
Можно даже пройти на наш сайт внутри сети Hyperboria по адресу h.netwhood.online.
Собственно, с этого момента вы полноправный участник сети. Можно шарить свои сервисы, без труда использовать p2p приложения (если они могут в IPv6).
Ресурсы внутри (и снаружи)
Не так уж и много на данный момент.
Cписок внутренних ресурсов Hyperboria Intelligence Agency — ‘Services for the Meshes’: hia.cjdns.ca. Здесь же огромный наскан внутренних адресов — hia.cjdns.ca/watchlist.
IRC-сервер внутри сети Hyperboria HypeIRC hypeirc.net. Прямая ссылка на сервер — irc.hypeirc.net
DC-хаб adc://dc.on.hyperboria.name:1511. Для подключения нужен DC-клиент, поддерживающий IPv6. На Linux это, например, nсdc.
HTTP-прокси внутри сети Hyperboria для доступа в Интернет — proxy.on.hyperboria.name:8118.
Поиск по Hyperboria с помощью поисковой машины YaCy — hyperborian.org. Весь индекс можно посмотреть тут. Доступны ресурсы через прокси, даже без подключения к Hyperboria.
Карта fc00.org, только внутри сети — h.fc00.org.
Еще одна карта сети, от CJD — h.snode.cjd.li
Своя большая нода
Если есть желание сделать свою 24/7 ноду, с возможностью входящих подключений, нужно внести несколько настроек.
Во-первых, хорошо бы для подключения из Интернета иметь статический IP-адрес. И соответственно, пробросить на маршрутизаторе порт из настройки "UDPInterface" -> "bind" во внутреннюю сеть.
Во-вторых, сделать публичный или персональный ключ для входящего подключения. Делается это в секции "authorizedPasswords". Генерируем пароль скриптом mkpasswd в папке с дистрибутивом. Потом задаем логин и пароль. Например:
"authorizedPasswords":
[
{"password": "d41862xcrd0q6l9v6mwbvrkuk70p0ht", "user": "public"}
],
И передать товарищу, или опубликовать всем, ключ и пароль, в следующем виде:
"46.151.26.194:60574": {
"login": "public",
"password":"d41862xcrd0q6l9v6mwbvrkuk70p0ht",
"publicKey":"34zb5vlg59rghf857h70tpp0ycqpts1cmtgbxltqcrp68c883vt0.k",
"peerName":"netwhood.online"
},
В-третьих, еще раз напомню, что у всей сети будете как на ладони. Поэтому настраиваем ip6tables закрывая порты.
В-четвертых, нужно сделать автозапуск. Я просто засунул в cron строку:
@reboot /opt/cjdns/cjdroute < /opt/cjdns/cjdroute.conf
Но лучше конечно сделать через init.d.
Ну и, собственно, после этого сохраняем конфиг и запускаем cjdns.
Подытоживание
Cjdns очень интересен в плане обеспечения полного p2p и легкостью развертывания. NAT, маршрутизация? Забудьте и хостите что угодно, из любой точки, с любой машины. Передача данных напрямую без участия сервера? Да, конечно. Начиная просто от запуска обычной сетевой шары, и заканчивая запуском IPFS. Просто сделать свою маленькую сеть с друзьями, чтобы играть по вечерам в сетевые игры и вообще быть в изоляции от Большой Сети? Почему бы и нет. Если расстояние небольшое — можно через WiFi. Для подключения через Интернет нужен только один хаб-связующий, да и настройка даже в чем-то проще, чем OpenVPN. Выписка сертификатов, обмен ключами? Зачем, если сама сеть обеспечивает p2p шифрование.
Поддержать проект и попробовать в любом случае стоит.
Напоследок, интервью с автором cjdns — Caleb James DeLisle.
По теме
Конфренция в Telegram “Meshnet & Crypto-Anarchy” — общение по данной теме;
distributed.earth — сайт и сообщество о распределенных системах;
“Прекрасные интернеты будущего”: интервью с создателем протокола Cjdns;
wiki — cjdns;
cjdns.cupivan.ru — еще одна карта cjdns;
habr.com — Как подключиться к Hyperboria;
habr.com — Mesh-роутер — это просто;
archlinux.org — Cjdns.
Как все устроено / Habr
В прошлой статье был общий обзор сети Hyperboria, в этой мы рассмотрим её структуру, какие она решает проблемы и её прямое назначение — Mesh сеть между wi-fi устройствами.
Зачем нужна Hyperboria?
1) Сеть Hyperboria даже в нынешнем виде решает одну очень важную проблему — она добавляет слой шифрования который могут использовать любые приложения, скрывая ваш IPv4 адрес (иногда его даже можно узнать, но об этом ниже.)
2) В этой сети невозможно реализовать атаку MiTM вообще, таким образом, бестрекерные раздачи через протокол Bittorrent будут совершенно неконтролируемые.
3) Вы получаете внешний IPv6 адрес с открытыми портами — решение проблем с Nat’ом
4) Можно частично отказаться от https подключений — сеть гарантирует что пакет сможет прочитать именно тот пир, которому он предназначен
Оверлейная или Mesh сеть ?
Hyperboria — гибридная сеть. Именно из-за этого было решено отказаться от автоматического подключения к пирам (как в I2P/Tor), таким образом вы сам себе провайдер, сами можете выбрать uplink / downlink и так же раздавать свои тем, кому вы считаете нужным.
Но если Hyperboria начинает работать в Mesh режиме — то все становится именно так, как и должно быть:
1) Сеть может работать как через wi-fi так и через ethernet, как в первом так и во втором случае будет работать авто-нахождение пиров и авто-подключение. И конечно, для всего этого НЕ потребуется протокол TCP/IP.
Как должно все работать
Таким образом, все должно работать так:
По технологии Mesh создаются «островки» которые автоматически конфигурируются образуют локальную mesh сеть, а с помощью транзита через старый интернет, mesh сеть соединена с глобальной паутиной, как вы уже догадались, выходов из mesh сети в оверлейную может быть много, и в зависимости от нагрузки и длины маршрута, будет выбран оптимальный вариант.
Скорость работы сети
Возможно вы удивитесь, но многие сервисы которые имеют dual access (через старый интернет и через hyperboria) работают быстрее через mesh сеть, такое получается из-за того, что трафик нигде не распаковывается у провайдера, никакой DPI его не обрабатывает. -> Получается что ваш трафик неприкосновенен, что подтверждается не конституцией а открытым исходным кодом и дизайном сети.
Я владелец сайта, зачем мне Hyperboria ?
1) Использование Hyperboria может заменить вам наличие SSL сертификата для безопасного, зашифрованного подключения.
2) По сравнению с I2P и Tor у каждого пользователя есть свой СТАТИЧЕСКИЙ IPv6 адрес, так, что забанить пользователя тоже возможно.
3) Предоставления доступа к закрытым частям сайта которые противоречат политическому строю.
4) Простота настройки — вам стоит только добавить AAAA запись в DNS и установить cjdns на ваш сервер — он сразу будет работать в сети Hyperboria
Как работает маршрутизация в сети?
В сети Hyperboria маршруты строятся с помощью анонсирования вашей ноды на соседние, прще говоря, когда вы подключаетесь к вашей дружественной ноде, которая прописана в файле настроек, вы посылаете запрос к распределенной таблице маршрутизации о том, что ваш IPv6 адрес находится именно здесь.
Если же вы хотите получить доступ к сайту который расположен в другом адресном пространстве — когда у вас нет общих нод, то ваш анонс передается с помощью DHT на все соседние ноды для определения маршрута, как только первая нода ответит о том, что она знает маршрут — он будет разослан всем участникам сети.
Информацию о маршрутах подделать невозможно из-за использования ассиметричного шифрования.
Избыточность
По сравнению с сетью Bitcoin — вы не храните все маршруты, у вас сохранены только часто-используемые маршруты, которые вы запрашивали, система кэширования работает аналогично таковой в системе DNS.
Таким образом, если в сети будет несколько миллионов устройств, вы не будите хранить всю таблицу маршрутизации, что позволит не растрачивать системные ресурсы.
Какие проекты сейчас активно разрабатываются внутри сети?
Из-за того, что сеть держится на энтузиастах которые верят что децентрализация — будущее, то и все сервисы строятся по принципу децентрализации.
Сейчас выбираются программные движки для создания следующих сервисов:
1) Децентрализованный DNS (скорее всего namecoin / P2P DNS)
2) Децентрализованный файловый хостинг (Скорее всего TAHOE-LAFS)
3) Децентрализованная социальная сеть
Подведем итог
Hyperboria это:
1) Оверлейная/Mesh сеть
2) Атака MITM невозможна
3) Невозможно прочитать пакет данных если он вам не принадлежит
4) Сеть не анонимная ровно до того момента пока она оверлейная, а не mesh
5) Таблица маршрутизации распределённая и транслируется с помощью DHT
В прошлой статье было множество вопросов по отсутствию документации на руском и отсутствия публичных пиров для подключения.
Теперь этот минус исправлен, по аналогии с зарубежным сайтом cjdns.com был поднят http://hype.rusblock.com/ На нем вы сможете проверить подключены ли вы к сети Hyperboria (внизу страницы) а так же представлен 1 публичный пир .
Если вы хотите предоставить свою hyperboria ноду для всех — отправьте мне её ip/публичный ключ/пароль, она будет добавлена.
Для уменьшения нагрузки на зарубежных коллег, на сервере генерируется каждый час новая карта сети в SVG и PNG формате В качестве имен используются последние 4 цифры вашего IPv6 адреса.
Ну и конечно, проверить работу сети вы можете:
1) Зайдя на http://[fc2c:4e20:c108:dcc3:5cb9:1aba:858a:9c0e]/
2) Скачав пробный торрент http://[fc2c:4e20:c108:dcc3:5cb9:1aba:858a:9c0e]/hyperboria_torrent.torrent
И пожалуй еще один самый частый вопрос — будет ли работать сеть Hyperboria если у вас уже есть нормальный IPv6 адрес?
— Да будет, сеть использует зарезервированный диапазон IPv6 адресов (по аналогии с 10.0.xx и 192.168.)
Еще о Hyperboria:
Hyperboria: Интернет 2.0
Hyperboria: Маршрутизация
Форум о сети
IEEE 802.11s Wi-Fi Mesh для самых маленьких часть первая / Habr
Сейчас Mesh сети распространяются по миру, причем при строительстве сетей можно выбирать между Mesh протоколами, есть проверенный временем B.A.T.M.A.N adv, есть новый и активно разрабатываемый cjdns, а есть «официальный» — IEEE 802.11s
О 802.11s крайне мало информации в рунете, так что давайте поговорим о том как он устроен, зачем он нужен и что он делает.
Содержание:
- Зачем нужен
- Что умеет
- Какие режимы работы поддерживает
- Сравнение с BATMAN/cjdns
- Почему хорошо, а почему не очень
Зачем нужен
В мире намечается тенденция на Mesh сети, причем некоторые их используют в локальном проявлении а кто-то в глобальном.
Самый простой пример локального использования — в отелях, кафе и ресторанах.
При запуске Mesh сети в коммерческой структуре мы получаем все плюсы управляемых Mesh сетей
1) Не надо тянуть к каждой точке доступа свой кабель
2) Точки автоматически конфигурируются в сети
3) Потеря одной точки ведет к перестроению маршрутизации с минимальной деградацией сервиса у абонентов
Но есть и глобальные, не управляемые сети — в мире их огромное количество en.wikipedia.org/wiki/List_of_wireless_community_networks_by_region
Очевидно, что в глобальных сетях нет смысла использовать управляемые протоколы, да и вообще, желательно что бы сеть сама решала конфликты и сама настраивалась.
Что умеет
IEEE 802.11s Позволяет создавать управляемые сети, теоретически, можно создать и не управляемую, но он для этого не предназначен.
Протокол занимается обновлением таблиц маршрутизации в пределах всей сети, работает на L2 уровне по модели OSI, а вот IP адреса вам придется или самим настроить на каждой точке доступа, или воспользоваться услугами старичка DHCP.
Так же отвечает за поиск и взаимодействие с соседними точками, интеграция новых точек в Mesh сеть.
Mesh сеть может работать как с общим паролем и быть закрытой, так и без, шифрование (как и в обычной Wi-Fi сети) имеется только до точки доступа (при использовании сети с паролем) никакого туннельного end-to-end шифрования — нет. АНБ ФСБ Одобряет.
Для подключения к сети построенной на основе IEEE 802.11s вам потребуется:
- Оборудование которое поддерживает IEEE 802.11s
- Mesh ID сети
- Прописанный IP адрес на ТД или же настроенный DHCP в сегменте
Если же сеть защищена паролем, к требованиям добавляется пароль сети.
Какие режимы работы поддерживает
Топология в обычной сети:
Топология в Mesh сети:
Mesh Point (MP) — Полноправный участник Mesh сети, взаимодействует с своими соседями по Mesh протоколам
Mesh AP (MAP) — Позволяет подключатся STA к Mesh AP
Mesh Portal (MPP) — Мост в другую сеть, например проводную
Station (STA) — Выходные узлы из Mesh сети для подключения обычных клиентов не по Mesh протоколу
Сравнение с BATMAN/cjdns
802.11s отличается от BATMAN/cjdns тем, что для него на данный момент нет свободной реализации для UNIX, но вот тут её пытаются сделать
Кроме того, BATMAN adv уже был протестирован в течении многих лет, показав свою стабильность, ну и про железную поддержку не стоит забывать.
По сравнению c cjdns, протокол имеет те же минусы как и все остальные (кроме netsukuku)
- Отсутствие end-to-end шифрования
- Невозможность объединять mesh сегменты туннелями через интернет
- Отсутствует децентрализованная генерация IP адресов
Почему хорошо, а почему не очень
Таким образом, получается, что протокол 802.11s, впрочем как и Batman, отлично подходит для строительства управляемых mesh сетей, а вот самоорганизующиеся стоит отдать другим технологиям — ntsukuku/cjdns.
Если публикации на тему 802.11s вам интересны, в следующий раз мы рассмотрим с вами:
1) Маршрутизация в сети 802.11s
2) Настройка централизованного выхода в интернет из 802.11s mesh сети
3) Объединение 2 Lan сетей и 1 mesh в одну общую
PS Результаты регистрации на карте (в проекте сjdns), зачем это нужно и что дальше — будут чуть позже
Hyperboria: Маршрутизация / Habr
Продолжая цикл статей об Hyperboria, в этой статье будут рассмотрены следующие аспекты:
1) Количество IP адресов в Hyperboria, как они генерируются.
2) Коллизии и как с ними бороться.
3) Почему используется служебный (приватный) диапазон IPv6 адресов.
4) Роутеры и Hyperboria.
5) Маршруты и DHT.
6) Защищенность сети.
Количество IP адресов в Hyperboria
Общее количество доступных адресов в Hyperboria — 1 329 227 995 784 915 872 903 807 060 280 344 576
IP адреса в сети hyperboria генерируются с помощью псевдо-случайного генератора случайных чисел, используя при генерации Mac адрес вашего сетевого адаптера.
Таким образом вы чисто теоретически можете получить такой-же адрес как и уже у кого-то в сети, но вероятность этого крайне мала.
Коллизии и как с ними бороться
Раз мы выяснили что в сети могут быть одновременно два одинаковых IP адреса, то что как же будет ходить трафик между ними?
1) Первый случай — у клиентов разные приватные ключи
Трафик будет транслироваться аналогично принципу Multicast на оба IP адреса, но только лишь обладатель верного приватного ключа сможет его прочитать, остальная часть будет отброшена cjdns.
2) Второй Случай — у клиентов одинаковые приватные ключи
Система будет себя вести по принципу Multicast, трафик смогут прочитать оба узла
Другими словами — что бы взломать сеть и расшифровать ваш трафик — нужно получить ваш приватный ключ.
Определить наличие двойника можно с помощью трассировки до вашего ipv6 адреса с другого узла, затем выключить свой узел и сделать трассировку снова, она должна отличатся. Либо по аналогичной схеме использовать ping6.
Почему используется служебный (приватный) диапазон IPv6 адресов
Решение об использовании приватного диапазона было принято для совместимости с существующими сетями IPv6, таким образом, после подключения виртуального адаптера TUN0 с данным IPv6 адресом, трафик который принадлежит приватному сегменту будет идти именно туда, без каких-либо модификаций операционных систем.
Роутеры и Hyperboria
Модуль для прошивки OpenWRT был удачно разработан, сейчас происходит его тестирование, чуть позже он будет доступен всем и начнется доставка роутеров тем людям, которые пожертвовали деньги в разработку.
Как это работает
После установки прошивки, роутер создает 2 беспроводных интерфейса, 1 — для создания обычной wi-fi сети, 2 — для подключения к другим нодам.
Роутер сканирует сеть на наличие известных нод каждые 30 секунд и пытается к ним подключится, если подключение проходит успешно — происходит обмен ключами и устанавливается связь.
Клиентам за роутером выдается серый приватный ipv6 адрес который, т.е роутер работает в режиме Nat, если же у клиента установлен клиент cjdns то подключение к роутеру происходит с помощью второй сети.
Маршруты и DHT
Предположим вы подключены к ноде 1, а ваш друг к ноде 650, вам нужно передать ему информацию.
Схема получения маршрута будет выглядеть следующим образом:
1) Ваш узел попробует поискать в своей таблице маршрутизации путь к вашему другу
2) Если он там не найден произойдет запрос по DHT сети к узлу выше уровнем (или ко всем узлам, к которым вы подключены)
3) Если маршрут все еще не найден произойдет рассылка всем в сети пакета на поиск узла, первый пришедший авторизованный ответ — считается верным
— В дальнейшем, запрос можно будет повторить только через 10 минут, и время каждый раз будет увеличиваться при повторном запросе.
Возможно вы скажете «А если я двигаюсь на машине по очереди подключаясь к различным wi-fi точкам доступа и маршрут меняется, то что же делать?»
— Подключаясь к точке доступа вы сами сообщаете свой маршрут при заходе на той или иной ресурс, таким образом запрос поиска вашего маршрута не будет требоваться.
Защищенность сети
В сети Hyperboria невозможно провести следующие атаки:
1) MITM — если внутри вашего маршрута возникнет не доверенный узел то он не сможет обрабатывать пакеты ему не принадлежащие
2) Подключение к подставному узлу — Если даже вы сообщили ему публичный ключ, он все равно не может читать информацию которая принадлежит вам.
3) DPI в сети не может работать по причине №2
4) Ваш IPv6 адрес невозможно сопоставить с реальным
Итоги
В ближайшем времени должна выйти портированная версия приложения для Windows, это позволит простым пользователям в два клика подключится к сети.
Представьте себе будущее, в котором вся информация зашифрована и передается защищенным каналом по умолчанию, которую невозможно цензурировать, будущее в котором у каждого есть внешний адрес.
Пожалуй запреты на свободу информации пошли на пользу прогрессу, маловероятно, что при полной свободе информации мы бы получили такой прогресс систем криптографии и децентрализованных сетей.
И напоследок, вот так выглядила сеть 2 недели назад http://hype.rusblock.com/cjdnsmap/map_old.png а вот так сейчас http://hype.rusblock.com/cjdnsmap/map.svg
Узел 9c0e — публичная нода
Согласно топику http://habrahabr.ru/post/183474/ можно попробовать построить свою Hyperboria Mesh сеть в России. Она не должна попадать под законы о провайдерах или о связи, из-за того, что канал предоставляется от пользователя — пользователю, понятие «сеть» не применимо к Hyperboria.
Еще о Hyperboria:
Hyperboria: Интернет 2.0
Hyperboria: Как все устроено
Форум о сети

