Intelligenter Ethernet-Switch für Planet Earth


"Es gibt verschiedene Möglichkeiten, eine Lösung zu finden (um ein Problem zu lösen), aber nicht immer die teuerste und / oder beliebteste - die effektivste!"

Präambel


Vor ungefähr drei Jahren stieß ich bei der Entwicklung eines Remote-Disaster-Recovery-Modells auf ein sofort unerkanntes Hindernis - einen Mangel an Informationen über neue Originallösungen für die Netzwerkvirtualisierung in Community-Quellen.

-> Eine praktische Anleitung zum Aufbau virtueller Netzwerke. Teil 1

Der Algorithmus des entwickelten Modells wurde wie folgt geplant:

  1. Ein Remotebenutzer, der sich mit mir in Verbindung gesetzt hat und dessen Computer sich einmal geweigert hat, mit der Meldung „Die Systemfestplatte wurde nicht erkannt / nicht formatiert“ zu starten, lädt sie über Life-USB.
  2. Während des Startvorgangs stellt das System automatisch eine Verbindung zu einem sicheren privaten lokalen Netzwerk her, in dem sich zusätzlich die Arbeitsstation des Administrators befindet, in diesem Fall ein Laptop und ein NAS-Knoten.
  3. Dann verbinde ich mich - entweder um die Festplattenpartitionen neu zu beleben oder um die Daten von dort herauszuholen.

Zunächst habe ich dieses Modell mithilfe eines VPN-Servers auf einem lokalen Router in meinem Netzwerk und anschließend auf einem gemieteten VDS implementiert. Aber wie so oft, und nach dem ersten Gesetz von Chisholm, wird der Regen vergehen - der Internetprovider wird das Netzwerk „stürzen“, dann die Streitigkeiten von Unternehmen - der Energieversorger wird vom Dienstleister verschwinden ...

Deshalb habe ich mich entschlossen, zunächst die Grundvoraussetzungen zu formulieren, die das notwendige Werkzeug erfüllen soll. Das erste ist die Dezentralisierung. Das zweite - vorausgesetzt, ich habe mehrere solche USB-Geräte, dann gibt es für jedes ein separates isoliertes Netzwerk. Und die dritte ist die schnelle Verbindung verschiedener Geräte mit dem Netzwerk und deren einfache Verwaltung, auch für den Fall, dass mein Laptop ebenfalls den oben genannten Gesetzen zum Opfer fällt.

Auf dieser Grundlage und nachdem ich zweieinhalb Monate mit der praktischen Erforschung einiger weniger geeigneter Optionen verbracht hatte, beschloss ich auf eigene Gefahr ein anderes Tool von einem mir damals unbekannten Startup namens ZeroTier auszuprobieren. Was später nie bereut wurde.

In diesen Neujahrsferien habe ich versucht zu verstehen, ob sich die Situation mit den Inhalten seit diesem denkwürdigen Moment geändert hat. Ich habe ein selektives Audit für die Verfügbarkeit von Artikeln zu diesem Thema durchgeführt und dabei die Quelle herangezogen - Habr. Auf Wunsch von "ZeroTier", in dessen Suchergebnissen nur drei Artikel erwähnt werden, und nicht ein einziger, auch wenn nur eine kurze Beschreibung vorliegt. Und das trotz der Tatsache, dass unter ihnen eine Übersetzung eines Artikels des Gründers von ZeroTier, Inc. ist. - Adam Ierymenko .

Die Ergebnisse enttäuschten mich und veranlassten mich, genauer über ZeroTier zu sprechen, wodurch moderne „Suchende“ nicht mehr denselben Weg wie ich einschlagen mussten.

Also, was bist du?


Der Entwickler positioniert ZeroTier als intelligenten Ethernet-Switch für den Planeten Erde.

„Dies ist ein verteilter Netzwerkhypervisor, der auf einem kryptografisch sicheren globalen Peer-to-Peer-Netzwerk (P2P) basiert. Ein SDN-ähnliches Tool für Unternehmen, mit dem virtuelle Netzwerke über physische Netzwerke, sowohl lokale als auch globale, organisiert werden können und das die Möglichkeit bietet, nahezu jede Anwendung oder jedes Gerät zu verbinden. “

Dies ist eher eine Marketingbeschreibung, die sich nun mit technologischen Merkmalen beschäftigt.


▍ Kernel:


Der ZeroTier Network Hypervisor ist eine eigenständige Netzwerk-Virtualisierungs-Engine, die ein Ethernet-Netzwerk ähnlich wie VXLAN über ein global verschlüsseltes Peer-to-Peer-Netzwerk (P2P) emuliert.

Die in ZeroTier verwendeten Protokolle sind originell, obwohl sie VXLAN und IPSec ähneln und aus zwei konzeptionell getrennten, aber eng verwandten Ebenen bestehen: VL1 und VL2.

Link zur Dokumentation

▍VL1 ist auf seine eigene Weise eine grundlegende Peer-to-Peer-Transportschicht (P2P) - ein „virtuelles Kabel“.


"Ein globales Rechenzentrum erfordert einen" globalen Schrank "mit Kabeln."

In herkömmlichen Netzwerken bezieht sich L1 (OSI-Schicht 1) auf die tatsächlichen Kabel oder Funkkanäle, über die Daten übertragen werden, und auf die physischen Chips der Sende- / Empfangsgeräte, die sie modulieren und demodulieren. VL1 ist ein Peer-to-Peer-Netzwerk (P2P), das dasselbe tut und bei Bedarf Verschlüsselung, Authentifizierung und andere Netzwerk-Tricks verwendet, um virtuelle Kabel zu organisieren.

Darüber hinaus geschieht dies automatisch, schnell und ohne dass ein Benutzer einen neuen ZeroTier-Knoten startet.

Um dies zu erreichen, ist VL1 ähnlich wie das Domain Name System organisiert. Das Netzwerk basiert auf einer Gruppe von Root-Servern mit hohem Zugriff, deren Rolle der Rolle von DNS-Root-Nameservern ähnelt. Derzeit werden die wichtigsten (planetarischen) Root-Server vom Entwickler verwaltet - ZeroTier, Inc. und werden als kostenloser Service angeboten.

Es ist jedoch möglich, benutzerdefinierte Stammserver (Monde) zu erstellen, die Folgendes ermöglichen:

  • Reduzierung der Infrastrukturabhängigkeit ZeroTier, Inc .; Dokumentationslink
  • Steigerung der Produktivität durch Minimierung von Verzögerungen;
  • arbeiten Sie wie gewohnt weiter, wenn die Internetverbindung unterbrochen wird.

Anfangs starten Knoten ohne direkte Verbindungen untereinander.

Jeder Peer in VL1 verfügt über eine eindeutige 40-Bit-ZeroTier-Adresse (10 Hexadezimalstellen), die im Gegensatz zu IP-Adressen eine verschlüsselte Kennung ist, die keine Routendaten enthält. Diese Adresse wird aus dem öffentlichen Teil des öffentlichen / privaten Schlüsselpaars berechnet. Die Knotenadresse, der öffentliche Schlüssel und der private Schlüssel bilden zusammen ihre Identität.

Member ID: df56c5621c       |       ZeroTier address of node 

In Bezug auf die Verschlüsselung ist dies ein Anlass für einen separaten Artikel.

Link zur Dokumentation

Um die Kommunikation herzustellen, senden Peers zuerst Pakete entlang des Stammserverbaums „nach oben“. Wenn diese Pakete durch das Netzwerk gesendet werden, initiieren sie die zufällige Erstellung von direkten Kanälen entlang dieses Pfades. Der Baum versucht ständig, sich selbst zu „kollabieren“, um sich für das gespeicherte Routenschema zu optimieren.

Der Peer-to-Peer-Einrichtungsmechanismus sieht wie folgt aus:


  1. Knoten A möchte ein Paket an Knoten B senden, aber da er den direkten Pfad nicht kennt, sendet er es in Aufwärtsrichtung an Knoten R (Moon, Benutzer-Root-Server).
  2. Wenn der Knoten R eine direkte Verbindung mit dem Knoten B hat, leitet er das Paket dort weiter. Andernfalls sendet es das Paket in Aufwärtsrichtung, bis es die Planetenwurzeln erreicht.Die Planetenwurzeln kennen alle Knoten, so dass das Paket schließlich den Knoten B erreicht, wenn es online ist.
  3. Knoten R sendet auch eine Nachricht mit dem Namen "Rendezvous" an Knoten A, die Hinweise darüber enthält, wie er Knoten B erreichen kann. Währenddessen sendet der Stammserver, der das Paket an Knoten B weiterleitet, ein "Rendezvous", das ihn darüber informiert, wie er erreichen kann Knoten A.
  4. Die Knoten A und B empfangen ihre Nachrichten an das Rendezvous und versuchen, Testnachrichten aneinander zu senden. Dabei wird versucht, die Lücken in NAT oder den zustandsgesteuerten Firewalls auf dem Weg zu durchbrechen. Wenn dies funktioniert, wird eine direkte Verbindung hergestellt und die Pakete gehen nicht mehr in "Gärten".

Wenn keine direkte Verbindung hergestellt werden kann, wird die Verbindung über das Relais fortgesetzt und der Versuch, eine direkte Verbindung herzustellen, wird fortgesetzt, bis ein positives Ergebnis erzielt wird.

VL1 verfügt auch über andere Funktionen zum Herstellen einer direkten Verbindung, einschließlich Peer-to-Peer-Erkennung von LANs, Portvorhersage für symmetrische IPv4-NAT-Durchquerung und explizite Portzuordnung mithilfe von uPnP und / oder NAT-PMP, sofern im lokalen physischen LAN verfügbar.

Link zur Dokumentation

▍VL2 - VXLAN-ähnliches Ethernet-Virtualisierungsprotokoll mit SDN-Verwaltungsfunktionen. Eine vertraute Kommunikationsumgebung für Betriebssysteme und Anwendungen ...


Im Gegensatz zu VL1 muss der Benutzer direkt an der Erstellung von VL2-Netzwerken (VLANs) und der Verbindung von Knoten mit diesen sowie an deren Verwaltung teilnehmen. Er kann dies mit einem Netzwerkcontroller tun. Tatsächlich handelt es sich um einen normalen ZeroTier-Knoten, bei dem die Funktionen des Controllers auf zwei Arten gesteuert werden: entweder direkt durch Ändern von Dateien oder, wie der Entwickler nachdrücklich empfiehlt, mithilfe der veröffentlichten API.

Diese Methode zur Verwaltung virtueller Netzwerke von ZeroTier ist für einen einfachen Laien nicht sehr praktisch. Daher gibt es mehrere GUIs:

  • Einer vom Entwickler ZeroTier, der als vom SaaS-Modell bereitgestellte Public Cloud-Lösung mit vier Abonnementplänen erhältlich ist, einschließlich kostenlos, jedoch in Bezug auf die Anzahl der verwalteten Geräte und den Grad des Supports begrenzt
  • Der zweite stammt von einem unabhängigen Entwickler, der in seiner Funktionalität etwas vereinfacht ist, aber als private Open Source-Lösung für die Verwendung vor Ort oder auf Cloud-Ressourcen verfügbar ist.

Die VL2-Schicht wird über VL1 implementiert und von dieser transportiert. Gleichzeitig erbt es die Verschlüsselung und Authentifizierung des Endpunkts der VL1-Ebene und verwendet seine asymmetrischen Schlüssel zum Signieren und Überprüfen von Anmeldeinformationen. Mit der VL1-Schicht können Sie VL2 implementieren, ohne sich um die vorhandene Topologie des physischen Netzwerks kümmern zu müssen. Das heißt, Konnektivitätsprobleme und Routing-Effizienz sind Aufgaben auf VL1-Ebene. Es ist wichtig zu verstehen, dass keine Verbindung zwischen virtuellen VL2-Netzwerken und VL1-Pfaden besteht. Wie beim VLAN-Multiplexing in einem kabelgebundenen LAN besteht zwischen zwei Knoten, die mehrere gemeinsame Netzwerkmitgliedschaften haben, nur noch ein VL1-Pfad (virtuelles Kabel).

Jedes VL2-Netzwerk (VLAN) wird durch die 64-Bit-Adresse (16 Hexadezimalziffern) des ZeroTier-Netzwerks identifiziert, die die 40-Bit-Adresse des ZeroTier-Controllers und eine 24-Bit-Nummer enthält, die das von diesem Controller erstellte Netzwerk identifiziert.

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

Wenn ein Knoten einem Netzwerk beitritt oder eine Netzwerkkonfigurationsaktualisierung anfordert, sendet er eine Netzwerkkonfigurationsanforderungsnachricht an den Netzwerkcontroller (über Ebene VL1). Der Controller verwendet dann die VL1-Adresse des Knotens, um ihn im Netzwerk zu finden und ihm die entsprechenden Zertifikate, Anmeldeinformationen und Konfigurationsinformationen zu senden. Aus der Sicht von virtuellen VL2-Netzwerken können VL1-ZeroTier-Adressen als Portnummern auf einem riesigen virtuellen Switch von globaler Größe betrachtet werden.

Alle Anmeldeinformationen, die von Netzwerkcontrollern an die an diesem Netzwerk teilnehmenden Knoten ausgegeben werden, werden mit dem geheimen Schlüssel des Controllers signiert, damit alle Netzwerkteilnehmer sie überprüfen können. Anmeldeinformationen haben vom Controller erstellte Zeitstempel, die relative Vergleiche ermöglichen, ohne auf die lokale Systemuhr des Knotens zugreifen zu müssen.

Anmeldeinformationen werden nur an ihre Besitzer ausgegeben und dann an Peers gesendet, die Daten mit anderen Knoten im Netzwerk austauschen möchten. Auf diese Weise kann das Netzwerk auf eine enorme Größe skaliert werden, ohne dass eine große Menge von Anmeldeinformationen auf den Knoten zwischengespeichert werden muss oder ständig auf den Netzwerkcontroller zugegriffen werden muss.

ZeroTier-Netzwerke unterstützen Multicast über ein einfaches Publish / Subscribe-System.

Link zur Dokumentation

Wenn ein Knoten Multicast-Mailing für eine bestimmte Verteilergruppe empfangen möchte, kündigt er anderen Mitgliedern des Netzwerks, mit dem er verbunden ist, und dem Netzwerkcontroller die Mitgliedschaft in dieser Gruppe an. Wenn ein Knoten Multicast-Mailing senden möchte, greift er gleichzeitig auf den Cache der letzten Veröffentlichungen zu und fordert regelmäßig weitere Veröffentlichungen an.

Broadcast (Ethernet ff: ff: ff: ff: ff: ff) wird als Multicast-Gruppe betrachtet, der sich alle Mitglieder anschließen. Es kann auf Netzwerkebene deaktiviert werden, um den Datenverkehr zu reduzieren, wenn es nicht benötigt wird.

ZeroTier emuliert einen echten Ethernet-Switch. Diese Tatsache ermöglicht die Kombination der erstellten virtuellen Netzwerke mit anderen Ethernet-Netzwerken (kabelgebundenes LAN, WiFi, virtuelle Rückwandplatine usw.) auf Datenverbindungsebene unter Verwendung einer herkömmlichen Ethernet-Brücke.

Um als Brücke zu fungieren, muss der Netzwerkcontroller den Netzwerkknoten als solchen kennzeichnen. Dieses Schema wird aus Sicherheitsgründen implementiert, da normale Netzwerkknoten keinen Datenverkehr von einer anderen Quelle als ihrer MAC-Adresse senden dürfen. Die von Bridges festgelegten Knoten verwenden auch einen speziellen Modus des Multicast-Adressierungsalgorithmus, der während der Gruppenabonnements und der Replikation des gesamten Broadcast-Verkehrs und der ARP-Anforderungen aggressiver und adressiver mit ihnen interagiert.

Der Switch kann auch öffentliche und Ad-hoc-Netzwerke, einen QoS-Mechanismus und einen Netzwerkregel-Editor erstellen.

▍Node:


ZeroTier One ist ein Dienst, der auf Laptops, Desktops, Servern, virtuellen Maschinen und Containern ausgeführt wird und über einen virtuellen Netzwerkport wie einen VPN-Client Verbindungen zu einem virtuellen Netzwerk herstellt.

Nach der Installation und dem Starten des Dienstes können Sie mit den 16-stelligen Adressen eine Verbindung zu virtuellen Netzwerken herstellen. Jedes Netzwerk sieht aus wie ein virtueller Netzwerkanschluss im System, der sich wie ein normaler Ethernet-Anschluss verhält.

ZeroTier One ist derzeit für die folgenden Betriebssysteme und Systeme verfügbar.

Betriebssysteme:

  • Microsoft Windows - MSI-Installationsprogramm x86 / x64
  • MacOS - PKG-Installationsprogramm
  • Apple iOS - App Store
  • Android - Play Store
  • Linux - DEB / RPM
  • FreeBSD - FreeBSD-Paket

NAS:

  • Synology NAS
  • QNAP NAS
  • WD MyCloud NAS

Andere:

  • Docker - Docker-Datei
  • OpenWRT - Community-Port
  • App-Einbettung - SDK (libzt)

Zusammenfassend würde ich sagen, dass ZeroTier ein hervorragendes und schnelles Tool ist, um Ihre physischen, virtuellen oder Cloud-Ressourcen in einem gemeinsamen lokalen Netzwerk zu kombinieren, mit der Möglichkeit, es in VLANs zu unterteilen und ohne einen einzigen Fehlerpunkt.

Darauf mit einem theoretischen Teil in einem Format des ersten Artikels über ZeroTier für Habr - wahrscheinlich alles! Im nächsten Artikel möchte ich die Erstellung einer virtuellen Netzwerkinfrastruktur auf der Basis von ZeroTier in der Praxis demonstrieren, bei der VDS mit einer privaten Open-Source-GUI-Vorlage als Netzwerkcontroller verwendet wird.

Sehr geehrte Leser! Verwenden Sie in Ihren Projekten die ZeroTier-Technologie? Wenn nicht, welche Tools verwenden Sie, um Ihre Ressourcen in einem gemeinsamen Netzwerk zu kombinieren?

Source: https://habr.com/ru/post/de484178/


All Articles