Интеллектуальный Ethernet-коммутатор для планеты Земля

в 10:00, , рубрики: ethernet, ruvds, sd-wan, SDN, Блог компании RUVDS.com, коммутатор, Сетевое оборудование, Сетевые технологии
Интеллектуальный Ethernet-коммутатор для планеты Земля - 1

«Создать решение (решить проблему) можно несколькими способами, но, не всегда самый дорогой или/и популярный способ — самый эффективный!»

Преамбула

Года три назад, в процессе разработки дистанционной модели аварийного восстановления данных, я столкнулся с одним, незамеченным сразу, препятствием — недостатком информации о новых оригинальных решениях для виртуализации сетей в комьюнити-источниках. 

Алгоритм разрабатываемой модели планировался следующий: 

  1. Обратившийся ко мне удалённый пользователь, у которого компьютер однажды отказался загружаться, выдав сообщение «системный диск не обнаружен/не отформатирован», загружает его с помощью life USB. 
  2. Система в процессе загрузки автоматически подключается к защищённой частной локальной сети, в которой помимо неё самой находятся рабочее место администратора, в данном случае ноутбук, и NAS-узел. 
  3. Дальше подключаюсь я — либо для реанимации разделов диска, либо для вытаскивания оттуда данных.

Изначально эту модель я реализовал с помощью VPN-сервера на локальном маршрутизаторе в подконтрольной мне сети, потом на арендуемом VDS. Но, как часто это бывает и согласно первому закону Чизхолма, то дождь пройдёт — у интернет-провайдера сеть «ляжет», то споры хозяйствующих субъектов — у сервис-провайдера «энергия» пропадёт…

Поэтому, я решил сначала сформировать основные требования, которым должен соответствовать необходимый инструмент. Первое — децентрализация. Второе — учитывая, что таких life USB у меня несколько, то для каждого из них — отдельная изолированная сеть. Ну и третье — быстрое подключение к сети различных устройств и простое управление ими, в том числе и на случай, если ноут мой тоже падёт жертвой закона, упомянутого выше.

Исходя из этого и потратив два с половиной месяца на практические исследования нескольких не очень подходящих вариантов, я, на свой страх и риск, решил попробовать ещё один инструмент от неизвестного мне тогда стартапа под названием — ZeroTier. О чём впоследствии ни разу не пожалел.

На этих новогодних каникулах, силясь понять, изменилась ли ситуация с контентом с того памятного момента, я провел выборочный аудит на наличие статей по данной теме, взяв за источник — Хабр. По запросу «ZeroTier» в поисковой выдаче которого всего три статьи с его упоминанием, и ни одной, хотя бы с кратким, но описанием. И это несмотря на то, что среди них есть перевод статьи, которую написал сам основатель ZeroTier, Inc. — Adam Ierymenko.

Полученные результаты разочаровали и побудили меня начать рассказывать о ZeroTier подробнее, избавив современных «искателей» от необходимости идти тем же маршрутом, что прошёл и я.

Так что же ты такое?

Разработчик позиционирует ZeroTier — как интеллектуальный Ethernet-коммутатор для планеты Земля. 

«Это распределенный сетевой гипервизор, созданный на основе криптографически защищенной глобальной одноранговой (P2P) сети. Подобный корпоративному коммутатору SDN инструмент, предназначенный для организации виртуальных сетей поверх физических, как локальных, так и глобальных, c возможностью подключения практически любого приложения или устройства.»

Это больше маркетинговое описание, теперь о технологических особенностях.

▍Ядро: 

Сетевой гипервизор ZeroTier — автономный механизм виртуализации сети, эмулирующий сеть Ethernet, аналогично VXLAN, поверх глобальной шифрованной одноранговой (P2P) сети.

Протоколы используемые в ZeroTier оригинальны, хотя с виду и подобны VXLAN и IPSec и состоят из двух концептуально отдельных, но тесно связанных уровней: VL1 и VL2.

Ссылка на документацию

▍VL1 — это базовый одноранговый (P2P) транспортный уровень, в своём роде — «виртуальный кабель».

«Для глобального центра обработки данных требуется «глобальный шкаф» с кабелями.»

В обычных сетях L1 (уровень 1 по OSI) относится к фактическим кабелям или беспроводным радиоканалам, по которым передаются данные, и физическим чипам устройств приёма-передачи, которые модулируют и демодулируют их. VL1 — это одноранговая (P2P) сеть, которая делает то же самое, используя шифрование, аутентификацию и другие сетевые хитрости для организации виртуальных кабелей по мере необходимости.

Причём делает это автоматически, быстро и без вовлечения пользователя запускающего новый узел ZeroTier.

Для достижения этого VL1 организован аналогично системе доменных имён. В основе сети лежит группа высокодоступных корневых серверов, роль которых аналогична роли серверов корневых имен DNS. На данный момент основные (планетарные) корневые серверы находятся по управлением разработчика — ZeroTier,Inc. и предоставляются как бесплатная услуга. 

Однако, существует возможность создания пользовательских корневых серверов (лун), которые позволяют:

  • уменьшить зависимость от инфраструктуры ZeroTier, Inc.; Ссылка на документацию
  • повысить производительности за счёт минимизации задержек; 
  • продолжать работать в обычном режиме в случае потери интернет-соединения.

Изначально узлы запускаются без прямых связей друг с другом. 

Каждый одноранговый узел на VL1 имеет уникальный 40-битный (10 шестнадцатеричных цифр) адрес ZeroTier, которые в отличие от IP-адресов является зашифрованным идентификатором, не содержащим данных о маршрутах. Этот адрес вычисляется из открытой части пары открытый / закрытый ключ. Адрес узла, открытый ключ и закрытый ключ вместе образуют его идентичность.

Member ID: df56c5621c  
            |
            ZeroTier address of node

Что же касается шифрования — это повод для отдельной статьи.

Ссылка на документацию

Для установления связи одноранговые узлы сначала посылают пакеты «вверх» по дереву корневых серверов, и по мере прохождения этих пакетов по сети они инициируют случайное создание прямых каналов на этом пути. Дерево постоянно пытается «рухнуть само», чтобы оптимизировать себя под схему маршрутов, которую хранит.

Механизм установки однорангового соединения следующий:

Интеллектуальный Ethernet-коммутатор для планеты Земля - 2

  1. Узел A хочет отправить пакет узлу B, но поскольку он не знает прямого пути, он посылает его в восходящем направлении к узлу R (луна, пользовательский корневой сервер).
  2. Если узел R имеет прямую связь с узлом B, он пересылает туда пакет. В противном случае он отправляет пакет в восходящем направлении до достижения планетарных корней.Планетарные корни знают обо всех узлах, так что в конечном итоге пакет достигнет узла B, если тот находится онлайн.
  3. Узел R также посылает сообщение, называемое «рандеву» узлу A, содержащее подсказки о том, как он может достичь узла B. Между тем корневой сервер, который пересылает пакет узлу B, посылает «рандеву», информируя его о том, как он может достичь узла A.
  4. Узлы A и B получают свои сообщения «рандеву» и пытаются посылать тестовые сообщения друг другу, пытаясь пробить «бреши» в NAT или брандмауэрах с контролем состояния, встречаемых на пути. Если это срабатывает, то устанавливается прямое соединение, и пакеты больше не идут «огородами».

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

VL1 также имеет другие функции для установления прямого соединения, включая обнаружение одноранговых узлов LAN, прогнозирование портов для прохождения симметричных IPv4 NAT и явное отображение портов с использованием uPnP и/или NAT-PMP, если они доступны в локальной физической LAN.

→ Ссылка на документацию

▍VL2 — VXLAN-подобный протокол виртуализации Ethernet-сети с функциями управления SDN. Знакомая среда связи для ОС и приложений...

В отличии от VL1, создание сетей VL2 (VLAN’ов) и подключение к ним узлов, а также управления ими, требует от пользователя непосредственного участия. Осуществлять это он может с помощью сетевого контроллера. По сути — обычного узла ZeroTier, где управление функциями контроллера осуществляется с двумя способами: либо  напрямую, изменением файлов, либо, как настоятельно рекомендует разработчик, с помощью опубликованного API. 

Данный способ управления виртуальными сетями ZeroTier не очень удобен для простого обывателя, поэтому существуют несколько GUI:
 

  • Один от разработчика ZeroTier, доступного в виде публичного облачного решения, предоставляемого по модели SaaS, с четырьмя планами подписки, в том числе бесплатным, но ограниченным по количеству управляемых устройств и уровню поддержки
  • Второй — от независимого разработчика, несколько упрощённого по функционалу, но доступного в качестве приватного opensource решения, для использования on-premise или на облачных ресурсах.

Уровень VL2 реализован поверх VL1 и транспортируется им. При этом он наследует шифрование и аутентификацию конечной точки уровня VL1, а также использует его асимметричные ключи для подписи и проверки учетных данных. Уровень VL1 позволяет реализовывать VL2, совершенно не беспокоясь о существующей топологии физической сети. То есть проблемы с подключением и эффективностью маршрутизации являются задачами уровня VL1. Важно понимать, что никакой связи между виртуальными сетями VL2 и путями VL1 нет. Подобно мультиплексированию VLAN в проводной ЛВС, два узла, которые совместно используют несколько общих членств в сети, все равно будут иметь только один путь VL1 (виртуальный кабель) между ними.

Каждая VL2 сеть (VLAN) идентифицируется по 64-битному (16 шестнадцатеричных цифр) адресу сети ZeroTier, который содержит 40-битный адрес ZeroTier контроллера и 24-битный номер, идентифицирующий сеть, созданную этим контроллером.

Network ID: 8056c2e21c123456
            |         |
            |         Network number on controller
            |
            ZeroTier address of controller

Когда узел присоединяется к сети или запрашивает обновление конфигурации сети, он посылает на контроллер сети сообщение запроса конфигурации сети (через уровень VL1). Затем контроллер использует VL1 адрес узла, чтобы найти его в сети и отправить ему соответствующие сертификаты, учетные данные и информацию о конфигурации. С точки зрения VL2 виртуальных сетей, VL1 адреса ZeroTier можно рассматривать как номера портов на огромном виртуальном коммутаторе глобального масштаба.

Все учетные данные, выданные сетевыми контроллерами узлам-участникам данной сети, подписаны секретным ключом контроллера, чтобы все участники сети могли их проверить. У учетных данных есть метки времени, созданные контроллером, что позволяет проводить относительное сравнение без необходимости обращаться к локальным системным часам узла. 

Учетные данные выдаются только их владельцам, а затем отправляются равноправным узлам, которые хотят обмениваться данными с другими узлами в сети. Это позволяет сети масштабироваться до огромных размеров без необходимости кэширования большого количества учетных данных на узлах или постоянного обращения к сетевому контроллеру.

Сети ZeroTier поддерживают мульти адресную рассылку через простую систему публикации / подписки.

Ссылка на документацию

Когда узел желает получить мульти адресную рассылку для определённой группы рассылки, он объявляет о членстве в этой группе другим членам сети, с которой он связывается, и сетевому контроллеру. Когда узел желает отправить мульти адресную рассылку, он одновременно обращается к своему кешу последних публикаций и периодически запрашивает дополнительные публикации.

Широковещательная рассылка (Ethernet ff: ff: ff: ff: ff: ff) рассматривается как многоадресная группа, на которую подписываются все участники. Ее можно отключить на уровне сети, чтобы уменьшить трафик, если в ней нет необходимости. 

ZeroTier эмулирует реальный коммутатор Ethernet. Этот факт позволяет осуществлять объединение созданных виртуальных сетей с другими сетями Ethernet (проводная локальная сеть, WiFi, virtual backplane и т. д.) на канальном уровне — с использованием обычного моста Ethernet.

Чтобы выступать в качестве моста, сетевой контроллер должен назначить узел сети в качестве такового. Такая схема реализована из соображений безопасности, поскольку обычным узлам сети не разрешается отправлять трафик из другого источника, кроме их MAC-адреса. Узлы назначенные мостами также использую специальный режим алгоритма мульти адресной рассылки, который более агрессивно и адресно взаимодействует с ними при групповых подписках и репликации всего широковещательного трафика и запросов ARP. 

Также коммутатор имеет возможность создания публичных и ad-hoc сетей, механизм QoS и редактор сетевых правил.

▍Узел:

ZeroTier One — работающий на ноутбуках, настольных компьютерах, серверах, виртуальных машинах и контейнерах сервис, который обеспечивает подключения к виртуальной сети через виртуальный сетевой порт, подобно VPN-клиенту. 

После установки и запуска службы к виртуальным сетям можно подключиться, используя их 16-значные адреса. Каждая сеть выглядит как виртуальный сетевой порт в системе, который ведет себя так же, как обычный порт Ethernet.

На данный момент ZeroTier One доступен для следующих ОС и систем.

Операционные системы:

  • Microsoft Windows — MSI installer x86/x64
  • MacOS — PKG installer
  • Apple iOS — App Store
  • Android — Play Store
  • Linux — DEB/RPM
  • FreeBSD — FreeBSD package

NAS:

  • Synology NAS
  • QNAP NAS
  • WD MyCloud NAS

Другие:

  • Docker — docker file
  • OpenWRT — community port
  • App embedding — SDK (libzt)

Если подводить итог всему вышесказанному, то я бы отметил то, что ZeroTier — отличный и быстрый инструмент для объединения ваших физических, виртуальных или облачных ресурсов в общую локальную сеть, с возможностями разделения её на VLANы и отсутствием единой точки отказа.

На этом с теоретической частью в формате первой статьи о ZeroTier для Хабра — наверно всё! В следующей статье я планирую продемонстрировать на практике создание виртуальной сетевой инфраструктуры на основе ZeroTier, где в качестве сетевого контроллера будет использоваться VDS с шаблоном частного open source GUI. 

Уважаемые читатели! Пользуетесь ли вы технологией ZeroTier в своих проектах? Если нет, какие инструменты используете для объединения ваших ресурсов в общую сеть?

Интеллектуальный Ethernet-коммутатор для планеты Земля - 3

Автор: RSagittarius

Источник


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


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