Как подключиться к Hyperboria

в 14:31, , рубрики: cjdns, hyperboria, mesh сеть, Peer-to-Peer, информационная безопасность, криптография, метки: , ,

Введение

На Хабре уже есть несколько статей про сеть 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 и всякие прочие стандартные штуки.
Для DebianUbuntu:

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.conf

2. Найдите пиры

Самый сложный шаг – пока сеть, в основном, работает в оверлейном режиме (т.е., поверх интернет-соединения), для подключения к Hyperboria вам нужно найти кого-то, кто уже подключён.

Можно посмотреть на карте проекта, попросить в IRC-чатике irc://irc.efnet.org/#cjdns, попробовать спросить на русскоязычном форуме.

Есть некоторые публичные ноды, но они плохи тем, что (из-за малого количества нод вообще) ломают децентрализацию и сами становятся центрами подключения. Можно подключиться через публичную ноду, а затем найти кого-нибудь внутри сети (например, существует внутренний сервис микроблогов).

3. Добавьте инфу пира в конфиг

Для подключения к пиру вам потребуется его ip и порт, пароль и публичный ключ. Обычно, всё это передаётся в виде JSON, выглядит примерно так:

"123.45.67.123:34567": {
    "password": "sjfhgwetuyfdgwudbjwedgu34",
    "publicKey": "amnfbwjhfbu4bwhcbuwyrho2iudh384rgiwyebuwygriwebdfgueyr.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.net
http://projectmeshnet.org/
Вики проекта
Русскоязычный сайт и форум

Автор: norlin

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js