Інтелектуальний Ethernet комутатор для планети Земля

Інтелектуальний Ethernet комутатор для планети Земля
«Створити рішення (вирішити проблему) можна кількома способами, але, не завжди найдорожчий або популярний спосіб - найефективніший!»

преамбула

Років зо три тому, у процесі розробки дистанційної моделі аварійного відновлення даних, я зіткнувся з однією, непоміченою відразу, перешкодою — нестачею інформації про нові оригінальні рішення для віртуалізації мереж у ком'юніті-джерелах. 

Алгоритм моделі, що розробляється, планувався наступний: 

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

Спочатку цю модель я реалізував за допомогою VPN-сервера на локальному маршрутизаторі в підконтрольній мені мережі, потім на VDS, що орендується. Але, як часто це буває і згідно з першим законом Чізхолма, то дощ пройде — в інтернет-провайдера мережа «ляже», то суперечки суб'єктів господарювання — у сервіс-провайдера «енергія» пропаде…

Тому я вирішив спочатку сформувати основні вимоги, яким маю відповідати необхідний інструмент. Перше – децентралізація. Друге — з огляду на те, що таких life USB у мене кілька, то для кожного з них — окрема ізольована мережа. Ну і третє — швидке підключення до мережі різних пристроїв і просте керування ними, в тому числі й на випадок, якщо ноут мій теж упаде жертвою закону, згаданого вище.

Виходячи з цього і витративши два з половиною місяці на практичні дослідження кількох не дуже відповідних варіантів, я, на свій страх і ризик, вирішив спробувати ще один інструмент від невідомого мені тоді стартапу під назвою ZeroTier. Про що згодом жодного разу не пошкодував.

На цих новорічних канікулах, намагаючись зрозуміти, чи змінилася ситуація з контентом з того пам'ятного моменту, я провів вибірковий аудит на наявність статей на цю тему, взявши за джерело — Хабр. За запитом «ZeroTier» у пошуковій видачі якого всього три статті з його згадкою, і жодної, хоча б з коротким, але описом. І це, незважаючи на те, що серед них є переклад статті, яку написав сам засновник ZeroTier, Inc. - Adam Ierymenko.

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

То що ти таке?

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

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

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

▍Ядро: 

Мережевий гіпервізор 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 комутатор для планети Земля

  1. Вузол A хоче відправити пакет вузлу B, але оскільки він не знає прямого шляху, він посилає його у висхідному напрямку до вузла R (місяць, користувальницький кореневий сервер).
  2. Якщо вузол R має прямий зв'язок із вузлом 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 та редактор мережевих правил.

▍Вузол:

Нульовий рівень один — сервіс, що працює на ноутбуках, настільних комп'ютерах, серверах, віртуальних машинах і контейнерах, який забезпечує підключення до віртуальної мережі через віртуальний мережевий порт, подібно до 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:

  • Синологія НАН України
  • 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 комутатор для планети Земля

Джерело: habr.com

Додати коментар або відгук