Параноики есть в каждом сообществе. Например, туристы порой превращаются в выживальщиков, постоянно готовящихся к БП – «Большому Происшествию», когда от их готовности будет зависеть жизнь родных, человечества в целом, и сохранность себя родимого. Нельзя однозначно заявить плохо это или хорошо, потому что не секрет, что БП застанет и тех, у кого не запасено 50 килограммов гречки, бензин и оружие. Среди опытных ай-тишников также развита профессиональная деформация личности, которая нередко подразумевает паранойю: тяжело спать спокойно, когда понимаешь технологии изнутри и хрупкость их бытия!
Эта статья посвящена альтернативной доменной системе, рассчитанной на случай глобальной сегментации интернета, катаклизмов, или возможных искусственных ограничений коммуникации. Не спешите с пренебрежительной ухмылкой. По аналогии с запасами выживальщика, эта информация не требует больших затрат, а в нужный момент сможет выручить!
Концепция
Идея родилась в кругу пользователей Yggdrasil Network – самоорганизующейся меш-сети с маршрутизацией по IPv6 и абсолютной масштабируемостью. Эта технология лучше многих существующих подходит для создания разветвленных сетей без участия администратора: всё, что требуется – физическая среда передачи информации (кабель, радио или оптический линк). Подобный децентрализованный подход во многом перспективен и удобен, но в нём явно не хватает своей реализации доменных имен, без которых не способны работать сервисы вроде Email и XMPP. Помимо этого не все приложения корректно воспринимают синтаксис IPv6.
Разработчики Yggdrasil в свою очередь заявили, что занимаются архитектурой сети, а не доменными именами. Сообществом было предложено несколько решений вопроса доменных имен, которые в своем большинстве являются банальными серверами с форвардингом в обычный интернет, т.е. ничего лучше обычного DNS придумать не удалось. Как вам идея платить $10 дядюшке Сэму за доменное имя, к которому будут привязаны персональные данные, как это уже привычно, и адрес из децентрализованной сети, подразумевающей отказоустойчивость, масштабируемость и независимость от домашнего, регионального и прочих провайдеров?! Сомнительное удовольствие для криптоанархиста, который грезит о полной автономности и свободе от единой точки отказа, тем более коммерческой. Нужно признать, централизованная система доменных имен – решение отчасти вынужденное, которым по сей день пользуется большая часть аудитории Yggdrasil, так как для использования чего-либо стороннего необходимо убедить конечного пользователя использовать то же самое. Отдельного внимания заслуживает ALFIS – DNS на легковесном блокчейне, не требующий постоянного наличия майнеров в сети. Концепт DNS на блокчейне не нов, однако плюсы и минусы конкретно этой занятной реализации применительно к децентрализованным меш-сетям рассмотрим в отдельной статье.
В русскоязычном сообществе энтузиастов отказоустойчивых и свободных сетей родилась простая идея для абсолютно независимых доменов: кодирование адреса IPv6 в текст c подстановкой выделенной доменной зоны. Подобный домен выглядит не совсем читабельно, напоминает адреса других сетей, где домен образован криптографическим путем, например, Tor. Однако, подобный подход к решению вопроса основательно освобождает от централизованных решений и всецело пригоден для работы как в изолированных сегментах сети, так и в глобальном: домен является непосредственно закодированным адресом целевого узла, а не зарегистрированным именем в SQL-таблице Большого брата.
Реализация
Эталонная реализация протокола meshname выполнена на Golang – meshnamed. Описание спецификации прилагается. Принцип работы прост и надежен, как автомат Калашникова.
Вся суть заключается в кодировании адреса в base32 (RFC 4648). Так как заранее известно количество байт, паддинги урезаются (заполнение в виде символов =
). Обратите внимание, что кодируется не текстовая строка адреса, а его бинарное представление.
Получая домен на вход, резолвер извлекает из него адрес и отправляет стандартный DNS-запрос на 53 порт полученного адреса. Если целевой узел доступен и на нем запущен meshnamed, он отвечает на запрос. Конфигурационный файл meshnamed поддерживает синтаксис JSON и не имеет ограничений по типам записей (на иллюстрации ниже типы DNS-записей выделены красным цветом).
Каждый адрес, который фактически является одним из внешних адресов устройства (выделен голубым), должен иметь доступный 53 порт для внешних обращений. Если ответ от запрашиваемого адреса не поступил, доменное имя считается несуществующим.
Для обращений на адрес, на котором не настроен meshnamed, предусмотрена упрощенная реализация протокола – meship. При получении адреса *.meship
, резолвер раскодирует информацию и возвращает пользователю запись типа АААА без каких-либо предварительных попыток обратиться по полученному адресу. Очевидно, что использование доменов третьего уровня и дополнительных записей DNS при таком сценарии не представляется возможным.
Классическим сценарием использования является связка с dnsmasq, который позволяет завести meshnamed на локальном порте высокого порядка без привилегий суперпользователя (например, [::1]:35353
), передавая ему только две доменные зоны, за которые он отвечает.
Содержимое /etc/dnsmasq.conf
:
port=53
domain-needed
bogus-priv
server=/meshname/::1#35353
server=/meship/::1#35353
server=8.8.8.8
Для быстрой конвертации адресов в имена и обратно, meshnamed поддерживает функции -getname
и -getip
.
Заключение
Были проведены тесты, в рамках которых успешно работали все домено-зависимые сервисы, попавшиеся под руку. В мирное время, когда привычные DNS всегда доступны и крепнут день ото дня, практическая ниша meshname весьма скромная: вместо альтернативных костылей в виде ipv6-literal.net или добавления адресов IPv6 в файл hosts для работы Windows Active Directory, а также любых других программ, не поддерживающих синтаксис IPv6 из-за двоеточий и квадратных скобок.
Если появится необходимость в более читабельных meshname-доменах при использовании Yggdrasil, можете воспользоваться майнером адресов SYG-CPP.
mr_tron
суть доменых имён в первую очередь в «человекочитаемости». не сложно запомнить домент «mail.ru» через ассоциативную память «почта в россии» или там «facebook.com» как «книга с лицами в основной коммерческой зоне».
а запомнить 94.100.180.201 или 31.13.72.36 сложно.
точно так же сложно запомнить amag7sesed2aaaaaaaaaaaaaauю.meshname и ты вынужден полагаться на поисковик или закладки чтобы вспомнить что
гидра находится по адресу hydraruzxpnew4af.onionкотиков постят на сайт amag7sesed2aaaaaaaaaaaaaauю.meshnamepureacetone Автор
https://github.com/zhoreeq/meshname#faq
forever_live
Всё так, до первого попадания адреса в
закbookmarks|history твоего браузера.Ситуацию слегка улучшает (а) использование человекочитаемых поддоменов (б) майнинг читабельных строк в адресе
shuron
Так история браузер и IPv6 адрес запомнит. По нечитаемеости я разницы не вижу.
forever_live
Просто IPv6 не позволяет поддомены.
А тут можно иметь {mail|forum|etc}.[UGLYHASH].meshname, которое проще в истории найти, браузер сам будет предлагать варианты, когда напишешь mail или forum.
PS У меня недавно в браузере (мобильный FF) была проблема — не хотел переходить по совершенно корректно набранному IPv6 URL. Отправлял этот урл в поиск. Возможно, уже пофиксили.
Ещё всякие сервисы типа email (smtp с родственниками), xmpp плохо себя чувствуют без записи в dns. Это тоже можно фиксить, но этим же кто-то должен заниматься, а так уже есть кое-как пригодное решение.
ivan386
В комментариях к статье "Namespace-децентрализация: кто и что предлагает делать" я предлагал:
pureacetone Автор
Пожалуй, вас заинтересует обзор упомянутой в статье технологии ALFIS DNS. Он в планах на этот месяц. В вашем предложении я усматриваю криптографическую составляющую и майнинг ключей, а всё это признаки широкоизвестной технологии под названием блокчейн. Реализаций и идей DNS на блокчейне много, но ALFIS, пожалуй, самая перспективная и легковесная.
ivan386
В моей идее нет цепочек блоков связанных хешем так что это не очередной блокчейн.
pureacetone Автор
Да, я понимаю. Это близкая идея, но непонятная в части "постоянного майнинга ключа, чтобы его не перехватили" :) Блокчейн в этом плане лучше, потому что намайнил — оно твое, и всё тут.
ivan386
Такой способ даёт возможность иметь короткое имя тому кому оно нужно в данный момент. Если предыдущий владелец имени бросит его оно перейдёт другому с ближайшим хешем.
Коротких имён значительно меньше чем хешей поэтому должна быть простая процедура перехода права владения. Надо понимать что короткий домен это временная связь короткого имени с длинным хешем.
В обычном интернете домены тоже не навечно даются.
forever_live
Красиво, элегантно, ненадёжно. Зарегали вы адрес типа forum.meshname, начали его раскручивать, и тут у вас его внезапно увели с помощью небольшой майнинг-фермы. Уж лучше раскручивать forum.[UGLYHASH].meshname. Тут единственная проблема — не протерять приватный ключ Yggdrasil.
Впрочем, это же не взаимоисключающие варианты, можно параллельно заимплементить, кто хочет — пользуется.