Плавно наступает эпоха меш-сетей. Как минимум, этот термин все чаще и чаще появляется в информационной сфере. Что привлекает внимание сетевиков и почему в заголовке статьи фигурирует понятие «бытовая меш-сеть»? Попробуем разобраться в вопросе, взяв для примера сеть Yggdrasil, как один из многообещающих прототипов. Статья рассчитана на широкий круг читателей.
Общее представление о топологии
Интернет, как и любая другая сеть, например, локальная на несколько компьютеров, является сетью связанных между собой компьютеров. Порядок соединения устройств в сети называется топологией и определяется сугубо предпочтениями и возможностями администратора. Дома у вас может быть точка доступа Wi-Fi для удобного подключения со смартфона, а пара настольных компьютеров подключены к роутеру кабелем. Очевидно, что порядок подключения ноутбука к интернету в вашей квартире зависит только от вас. Не существует единой и обязательной конфигурации, но любое решение имеет свои плюсы и минусы.
Как видно на иллюстрации, самой уязвимой является топология «звезда», она же является самой распространенной в быту из-за простоты организации. За примером далеко ходить не нужно: наверняка у вас дома или в офисе стоит единственный коммутатор или роутер, через который все компьютеры объединяются в одну локальную сеть. Если связующее устройство будет отключено, все абоненты останутся без связи. Топологию «дерево» можно считать логическим продолжением «звезды»: представьте здание, где на каждом этаже стоит отдельный коммутатор, к которому подключаются расположенные на этаже офисы. Благодаря связи коммутаторов между собой, офисы с разных этажей могут общаться. Если коммутатор на втором этаже сломается, офисы на других этажах смогут по-прежнему взаимодействовать между собой, однако связь первого этажа с остальными будет потеряна.
Mesh или «ячеистая топология» – сетевая архитектура, в рамках которой все участники сети являются равноправными и выступают одновременно клиентом и маршрутизатором для других участников. Главное преимущество меша заключается в высокой отказоустойчивости, а минус – в сложности практической реализации. Ячеистая топология широко применяется уже десятки лет, во-первых, военными, во-вторых, крупным бизнесом. Она подразумевает сложное проектирование с учётом всех возможных условий и нередко сопряжена с технологиями радио, т.к. радио – незаменимый помощник в организации связи в полевых условиях.
Модель передачи данных по сети
В детстве, смотря телевизор, многие задавались вопросом о магии, которая позволяет по тонкому коаксиальному кабелю передавать звук и картинку. Теперь вопросов стало еще больше, потому что вся мировая паутина каким-то образом передается без проводов прямиком в маленькую коробочку, именуемую смартфоном.
Всем знакомо понятие IP-адреса – логического адреса абонента для маршрутизации его входящей и исходящей информации по сети. Не вдаваясь в технические подробности стека TCP/IP, где IP – это легко запоминающийся «Internet Protocol», нужно различать два основных вида IP-адресов:
IPv4 – четырехбайтные адреса с записью в десятичной системе счисления и разделением байтов через точку в виде «192.168.1.10». IPv4 привычен для глаза и прост в восприятии, однако имеет малое адресное пространство примерно в четыре миллиарда вариаций. Меньше, чем население Земли: выдать каждому человеку по уникальному адресу не получится, не говоря уже про интернет вещей.
IPv6 – шестнадцатибайтные адреса, записываемые в шестнадцатеричной системе счисления с разделением каждых двух байтов двоеточиями. Выглядит примерно так: «fe80:2a30:6b30:c26d:3d39:3ce4:218:6376». Сложноват для восприятия и запоминания, однако имеет безграничное для человеческого воображения количество возможных адресов. Адресного пространства IPv6 хватит на много планет с учетом, что у каждого жителя будет по три кофеварки, имеющих уникальный адрес.
IPv6 появился позже, чем IPv4 и по сей день некоторое программное обеспечение работает по сети только по протоколу IPv4. Особенно это замечание актуально для старого ПО, разработчики которого прекратили активное развитие продукта.
Чтобы приблизиться к представлению передачи цифровой, т.е. бинарной информации, состоящей из битов – нулей и единиц, – понадобится базовое понимание модели сетевого взаимодействия Open Systems Interconnection (или просто: OSI). Подробную справку при желании вы найдете в два клика, поэтому не стану переписывать учебник. Знайте: от электрического импульса в проводе до отображения картинки в браузере задействуется несколько логических уровней, и чем ниже уровень, тем меньше энергозатрат на стороне клиента. Пока сигнал идет по проводу, компьютер с ним никак не связан. Затем сигнал достигает сетевой карты устройства и начинается его низкоуровневая обработка силами самой сетевой платы. После этого информация передается непосредственно в операционную систему, и ее логическая обработка ложится на основные ресурсы компьютера. Высшая точка этой цепи – клиентское приложение, например, браузер, и картинка в нем. Итого электрический импульс преобразуется в биты, затем эти биты образуют пакеты, отправляются в браузер и собираются в картинку на мониторе пользователя.
Классическая сеть
Почти любая современная телекоммуникационная сеть подразумевает наличие администратора – пользователя, наделенного полномочиями и ответственностью. Админ налаживает связность, подключает новых абонентов, а также в праве цензурировать и всячески ограничивать подконтрольный ему сегмент сети. Это правило применимо как для локальных сетей, так и для глобальной – сети интернет. В случае с интернетом мы прибегаем к услугам провайдеров, которые подключают нас к своей сети. В свою очередь, малые провайдеры пользуются услугами магистральных провайдеров; тех, кто объединяет своим кабелем страны и континенты. Чем серьезнее уровень сети, тем большее количество человек ее обслуживает. Помимо физического соединения разных компьютеров проводами, проводится колоссальная работа по логической настройке сети – маршрутизации. Благодаря ей наши запросы на другой континент улетают за несколько десятков миллисекунд, потому что каждый вышестоящий маршрутизатор знает кому необходимо передать пакет дальше. Без настройки маршрутизации и человека, который её настроит, не обойдется даже крошечная локальная сеть на несколько кабинетов!
В современной парадигме глобальной сети прижилась централизованность, т.е. подконтрольность критической инфраструктуры определенному кругу лиц: государственным и коммерческим структурам. Одни в праве устанавливать цены, другие – вовсе лишить нас связи с миром. И все они имеют власть мониторить и регулировать активность пользователей. Кажется, что от этого никуда не деться.
Yggdrasil
Бывало ли, что ваш домашний роутер выходил из строя, и все домочадцы оставались без выхода в сеть? Представьте, как было бы хорошо, если роутер не был «бутылочным горлышком», и в случае его отказа все участники домашней сети могли выйти в интернет через умный телевизор, соседские беспроводные сети и в конце концов через ваш смартфон, и всё это без какой-либо дополнительной конфигурации после поломки роутера!
Все прикладные программы вынуждены использовать шифрование при передаче информации по сети, чтобы промежуточные участники не смогли перехватить чувствительную информацию. К примеру, почти все современные сайты используют протокол HTTPS, который позволяет устанавливать зашифрованное соединение пользователя с сервером. Благодаря этому мы спокойно вводим пароли, данные от банковских карт и верим, что введенная нами информация будет получена только ее явным адресатом. Представьте, что сетевое соединение всегда безопасно на уровне протокола и нет нужды нагромождать дополнительные средства защиты, в том числе нет потребности в центрах сертификации – организациях, на доверии к которым весь мир использует уже названный HTTPS (центр сертификации является точкой отказа безопасности, т.к. он заверяет нас в надежности соединения, но может быть скомпрометирован).
Для организации локальной сети на предприятии, настройки VPN для удаленных сотрудников, даже для малой сети из трёх компьютеров требуется тот или иной уровень грамотности и соответствующий специалист. А что, если существует решение, допускающее нулевую конфигурацию на стороне обычного пользователя, при этом позволяющее объединять или разделять локальные сети с полным сохранением маршрутизации (с физически доступными узлами)?
Как вы уже поняли, все перечисленные возможности реализованы и активно развиваются. Мы добрались до главной повестки статьи – Yggdrasil – программной реализации меш-сети с абсолютной масштабируемостью, автоматической маршрутизацией и оконечным шифрованием всего трафика от пользователя до пользователя. Yggdrasil – программное решение, избавляющее от необходимости в администраторе при организации малых и средних сетей, а также минимизирующее влияние сумасшедших законотворцев на связность сети в целом.
Адресация в Yggdrasil
Yggdrasil использует адресацию IPv6 с маской сети 200::/7. Адреса из этой подсети не применяются в интернете, поэтому коллизий не возникает. Каждый пользователь также имеет свою подсеть 300::/64, что позволяет назначать на сетевые интерфейсы более короткие адреса, выдавать адреса из этой подсети локальным пользователям дома, а также использовать их для хостинга нескольких ресурсов на разных адресах (например, сайты, все из которых используют порт № 80). Короткий адрес автоматически маршрутизируется на полный адрес из подсети 200::/7, первые 64 бита которого совпадают. Например, адрес [324:9de3:fea4:f6ac::ace] маршрутизируется на узел с полным адресом [224:9de3:fea4:f6ac:6d7c:68f5:6c8e:f9a9]. Адреса из дополнительной подсети пользователя легко распознать по первой тройке в адресе, т.к. в полных адресах всегда используется двойка.
Адрес пользователя генерируется при первом запуске программного клиента сети. Чтобы исключить возможность присвоения чужого адреса, адрес IPv6 в Yggdrasil непосредственно образуется от ключа шифрования. Соединение не будет установлено, если ключ шифрования не соответствует IPv6-адресу. Т.к. подобрать или своровать чужой ключ – весьма нетривиальная задача, можно заключить, что адреса в Yggdrasil устойчивы перед злонамеренными попытками помех их использования. Подробнее про криптографическое образование адресов IPv6 в Yggdrasil читайте в статье.
В силу того, что вся сеть Yggdrasil вне зависимости от масштаба и физического нахождения узлов использует одну подсеть, невозможно вести глобальную маршрутизацию адресов каноничными средствами сетевого администрирования.
Построение общего дерева координат в Yggdrasil
В традиционных сетях, где происходит осмысленное распределение выделенных адресов, логику маршрутизации настраивают многочисленные администраторы, а как работать сети без админа, когда в ней тысячи узлов по всему миру? Название Иггдрасиль происходит от одноимённого дерева в Скандинавской мифологии, которое объединяет миры. Имя для сети подобрано не случайно, т.к. маршрутизация в ней имеет древовидную структуру.
Помимо IP-адреса, узлы сети имеют координаты, отображающие их логическое место в сети. Чтобы эти координаты имели начало отсчета, среди узлов выбирается некоторый равный участник сети.
На приведённой карте сети отображены не все связи узлов между собой, а только некоторые маршруты по логике образования координат. Впечатление централизованности ошибочно, т.к. это не топология передачи информации, а схема ориентации узлов внутри сети.
Логика вычисления нулевого узла координат
От ключа подписи берется хеш SHA512 и производится подсчет первых битов, установленных в единицу. Узел с наибольшим количеством лидирующих единиц в хеше ключа подписи автоматически становится точкой отсчета для остальных узлов. Когда в сети появляется участник с более подходящим ключом, дерево координат перестраивается, считая его корнем.
UPD: Информация устарела. Ссылка в конце статьи.
При первом обращении к адресу происходит широковещательный опрос ближайших участников, затем поисковый запрос распространяется дальше по сети. Когда запрос доходит до узла, который непосредственно видит целевой адрес, запрашивающему абоненту возвращается ответ. В концепции Иггдрасиль лежат наикратчайшие пути и максимально возможная скорость передачи информации. В отличие от первого запроса, установленная сессия между двумя участниками в большинстве случае осуществляется по одному маршруту, основанному на координатах транзитных узлов. В силу такой специфики первый ответ имеет наибольшее время ожидания, а когда сессия установлена и определен оптимальный маршрут – задержка стабилизируется.
Самый заметный баг, затмевающий все остальные возможные недостатки поменьше, – это «сетевые штормы». Модель угрозы заключается в импульсообразном появлении и исчезновении узла с ключом подписи, который вынуждает остальных участников перестраивать координаты, беря его за точку отсчета. Как не сложно догадаться, если координаты постоянно перестраиваются, маршрутизация сети очень сильно страдает, вплоть до полной потери пингов.
Опыт и теория использования Yggdrasil в продакшене
Первый релиз на GitHub датируется 17 февраля 2018 года. Однако по сей день Yggdrasil позиционируется, как «сырой» продукт, бета, и не рекомендуется к использованию в серьезных проектах.
Многие угрозы нестабильности сети актуальны только при подключении к глобальному сегменту сети, где многое из происходящего от нас никак не зависит. В случае бизнес-решений, есть случаи успешного подключения через Yggdrasil удаленных сотрудников, например, бухгалтеров: RDP без лишней настройки роутеров и проброса портов. Такие сети организуются изолированно, поэтому не подвержены «сетевому шторму»: на сервере, подконтрольном штатному сисадмину, организуется публичный пир, к которому в оверлейном режиме (т.е. через интернет) подключаются все сотрудники. Получается легко масштабируемая сеть вроде VPN с внутренним IPv6. Также Yggdrasil может использоваться для проброса локальных сетей IPv4 – соответствующие параметры имеются в файле конфигурации.
В Yggdrasil есть встроенные средства ограничения доступа к сетевому интерфейсу операционной системы с допуском только доверенного списка ключей, которые указываются в конфигурационном файле. Таким образом подключиться к TUN-интерфейсу машины смогут только вручную добавленные пользователи. Недоверенные участники сети не смогут даже пинговать такой IPv6-Yggdrasil, при этом транзитный трафик на узле никак не пострадает.
Также с версии 0.3.15 Yggdrasil позволяет не просто блокировать или разрешать какие-то адреса, а указывать ключи шифрования и подписи при настройке подключения к публичному пиру. В случае централизованного подключения сотрудников организации к некоему публичному пиру, этот параметр как никогда уместен, т.к. за счет прямой манипуляции с ключами страхует от теоретической атаки в виде спуфинга адреса IPv6.
Технические замечания
Yggdrasil работает на весьма высоком сетевом уровне (L3), образуя свои туннели поверх обычного TCP/IP. Вся обработка внутрисетевого трафика требует вычислительных ресурсов операционной системы. В первую очередь это связано с криптографией: прежде, чем передать информацию на виртуальный сетевой интерфейс, который будет воспринят операционной системой наравне с обычным трафиком, в службе Yggdrasil производятся криптографические операции. При большом проходящем трафике на слабом железе могут возникать тормоза.
Для работы в локальной сети, т.е. автоматического обнаружения пиров, необходимо включить IPv6 на реальных сетевых интерфейсах компьютера. В случае систем без поддержки IPv6 (например, Windows XP), подключение к Yggdrasil возможно только посредством указания IPv4-адреса публичного пира (адрес может быть локальный).
Сеть масштабируется автоматически: если один из пользователей изолированного сегмента сети пропишет у себя общедоступный публичный пир, весь сегмент окажется частью глобальной сети Yggdrasil.
Начало использования
Подробные инструкции, список публичных пиров, а также список известных внутрисетевых сервисов доступен на официальной странице проекта. Клиент сети является кроссплатформенным. На момент публикации поддерживаются все распространенные ОС: Windows, Linux, MacOS, IOS и Android.
Для подключения к глобальному сегменту Yggdrasil, в конфигурационном файле необходимо прописать публичные пиры, список которых можно найти по ссылке выше в разделе "Public peers". После успешного старта посетите внутрисетевой справочник русскоязычного сообщества: http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]
. Это как Википедия, только внутри Yggdrasil и содержит множество практических мануалов и справочной информации по теме.
Yggdrasil будет интересен как сетевым энтузиастам и администраторам, так и подрастающему поколению, например, для игры в Minecraft в псевдо локальной сети (как замена Hamachi).
Постскриптум
В начале 2010-ых годов слово "криптовалюта" было почти неизвестно: где-то звучало на уровне фантастики, а где-то, как бред. Лишь небольшая группа людей понимала, о чем речь, и еще меньшая – вникала в суть и начинала активно знакомиться с биткоином. Теперь всяческих криптовалют навалом и поезд хайпа уже тронулся, а запрыгнуть в последний вагон – занятие непростое и недешевое.
Услышав про меш-сети, вы с приятным удовлетворением поймете, что эта электричка без вас не уехала.
UPD: В релизе Yggdrasil 0.4 протокол значительно изменен, читайте об этом в статье "Yggdrasil Network 0.4 — Скачок в развитии защищенной самоорганизующейся сети".