CJDNS - меш-сеть (сеть с ячеистой топологией). В отличие от классических сетей, где раздача адресов происходит централизованно (в рамках этой сети), в CJDNS маршрутные таблицы распределены между всеми устройствами, а адреса IPv6 в сети выдаются с помощью ассиметричных ключей шифрования - ip и ключ зависят между собой, что не позволяет использовать чужой адрес. При этом любое устройство может при необходимости сгенерировать себе новый ключ, чтобы сменить адрес.
CJDNS - опенсорсный проект. Его можно взять с гитхаба
https://github.com/cjdelisle/cjdns
и собрать. Как это сделать - описано прямо в Readme репозитория, но я опишу некоторые особенности для Дебиана.
Во-первых, помимо перечисленных там зависимостей, необходимо установить еще и
dh_systemd
и
debhelper
.
Во-вторых, собирать под Дебиан лучше в виде пакета. К счастью, код в репозитории уже подготовлен для сборки в пакет Дебиана, поэтому достаточно одной командды.
dpkg-buildpackage -us -uc
Собранный пакет устанавливаем. CJDNS запуститься автоматически (и будет всегда запускаться при старте). Конфиг будет в
/etc/cjdroute.conf
Там можно посмотреть свой IP. Или посмотреть интерфейсы с помощью
ifconfig
. IP в сети CJDNS всегда начинается с fc (маска сети
[fc00::]
).
Для локальной работы CJDNS нет необходимости менять что-либо в конфиге. Про глобальную я расскажу как-нибудь в другой раз.
У меня под рукой есть компьютер, ноутбук, Raspbeery Pi и классическая локалка с роутером, поэтому экспериментировать с работой CJDNS я буду именно на этих устройствах. Для этого собрана схема на картинке ниже:

При классическом роутинге для настройки такой сети пришлось бы вручную настраивать мост на роутере, и решать вопрос с выдачей ip для RPi. При использовании cjdns достаточно соединить устройства, и роутинг настроится автоматически, вне зависимости от топологии сети.