
"Er zijn verschillende manieren om een oplossing te creëren (een probleem op te lossen), maar de duurste en/of populairste manier is niet altijd de meest effectieve!"
Преамбула
Ongeveer drie jaar geleden stuitte ik tijdens de ontwikkeling van een extern model voor noodherstel op een obstakel dat niet meteen was opgemerkt: een gebrek aan informatie over nieuwe, originele oplossingen voor netwerkvirtualisatie in communitybronnen.
Het algoritme van het ontwikkelde model was als volgt gepland:
- Een externe gebruiker die contact met mij opnam en wiens computer ooit weigerde op te starten, met de melding "systeemschijf niet gedetecteerd/niet geformatteerd", startte de computer op via een USB-stick.
- Tijdens het opstartproces maakt het systeem automatisch verbinding met een beveiligd, privé lokaal netwerk, dat naast het systeem zelf ook het werkstation van de beheerder bevat (in dit geval een laptop) en een NAS-knooppunt.
- Vervolgens maak ik verbinding om de schijfpartities opnieuw te animeren of om er gegevens uit te halen.
In eerste instantie heb ik dit model geïmplementeerd met behulp van een VPN-server op een lokale router in een netwerk onder mijn beheer, en vervolgens op een gehuurde VDS. Maar zoals vaak gebeurt en volgens de eerste wet van Chisholm, zal het netwerk van de internetprovider "uitvallen" als het regent. Ook kunnen er geschillen ontstaan tussen bedrijven. De "energie" van de serviceprovider zal dan verdwijnen...
Daarom heb ik besloten om eerst de basisvereisten te formuleren waaraan het benodigde gereedschap moet voldoen. Het eerste is decentralisatie. Ten tweede, aangezien ik meerdere van dergelijke USB-sticks heb, heeft elke stick een apart, geïsoleerd netwerk. Ten derde, snelle verbinding met het netwerk van verschillende apparaten en eenvoudig beheer daarvan, ook in het geval dat mijn laptop ook slachtoffer wordt van de hierboven genoemde wet.
Op basis hiervan, en na twee en een halve maand praktisch onderzoek te hebben gedaan naar verschillende niet erg geschikte opties, besloot ik, op eigen risico, een andere tool te proberen van een mij toen nog onbekende startup, genaamd ZeroTier. Waar ik later geen spijt van heb gehad.
Tijdens de nieuwjaarsvakantie probeerde ik te achterhalen of de situatie op inhoudelijk gebied is veranderd sinds dat memorabele moment. Daarom heb ik een selectieve audit uitgevoerd van artikelen over dit onderwerp. Ik heb Habr als bron gebruikt. Voor de zoekopdracht “ZeroTier” zijn er slechts drie artikelen die het in de zoekresultaten vermelden, en geen enkel artikel met zelfs maar een korte beschrijving. En dat terwijl er zich onder deze teksten een vertaling bevindt van een artikel dat door de oprichter van ZeroTier, Inc. zelf is geschreven. — .
De resultaten waren teleurstellend en brachten mij ertoe om uitgebreider over ZeroTier te praten, zodat moderne ‘zoekers’ niet dezelfde route hoefden te bewandelen als ik.
Dus wat ben jij?
De ontwikkelaar positioneert ZeroTier als een intelligente Ethernet-switch voor de planeet Aarde.
"Het is een gedistribueerde netwerkhypervisor gebouwd op een cryptografisch veilig wereldwijd peer-to-peer (P2P) netwerk. Een SDN-tool, vergelijkbaar met een enterprise switch, ontworpen om virtuele netwerken mogelijk te maken bovenop fysieke netwerken, zowel lokaal als wereldwijd, met de mogelijkheid om vrijwel elke applicatie of elk apparaat te verbinden."
Dit is meer een marketingbeschrijving, nu gaat het over de technologische mogelijkheden.
▍Kern:
De ZeroTier-netwerkhypervisor is een zelfstandige netwerkvirtualisatie-engine die een Ethernet-netwerk, vergelijkbaar met VXLAN, emuleert op basis van een wereldwijd gecodeerd peer-to-peer (P2P)-netwerk.
De protocollen die in ZeroTier worden gebruikt, zijn origineel, hoewel ze qua uiterlijk lijken op VXLAN en IPSec. Ze bestaan uit twee conceptueel gescheiden, maar nauw verwante lagen: VL1 en VL2.
→
▍VL1 is een basis peer-to-peer (P2P) transportlaag, een soort "virtuele kabel".
"Voor een wereldwijd datacenter is een 'wereldwijde kast' met kabels nodig."
In conventionele netwerken verwijst L1 (OSI-laag 1) naar de daadwerkelijke kabels of draadloze radiokanalen die gegevens vervoeren en de fysieke chips in de zend-/ontvangstapparaten die de gegevens moduleren en demoduleren. VL1 is een peer-to-peer (P2P)-netwerk dat hetzelfde doet, waarbij gebruik wordt gemaakt van encryptie, authenticatie en andere netwerktrucs om virtuele kabels naar behoefte te organiseren.
Bovendien gebeurt dit automatisch, snel en zonder dat de gebruiker een nieuw ZeroTier-knooppunt hoeft te starten.
Om dit te bereiken, is VL1 op een vergelijkbare manier georganiseerd als het domeinnaamsysteem. De kern van het netwerk wordt gevormd door een groep rootservers met een hoge beschikbaarheid. Deze rootservers hebben een vergelijkbare rol als DNS-rootnameservers. Momenteel worden de belangrijkste (planetaire) rootservers beheerd door de ontwikkelaar - ZeroTier, Inc. en worden ze als gratis service aangeboden.
Het is echter mogelijk om aangepaste rootservers (luns) te creëren die het volgende toestaan:
- de afhankelijkheid van de infrastructuur van ZeroTier, Inc. verminderen;
- de productiviteit verbeteren door vertragingen te minimaliseren;
- blijven normaal functioneren als uw internetverbinding wegvalt.
Aanvankelijk worden knooppunten gelanceerd zonder directe verbindingen met elkaar.
Elke peer op VL1 heeft een uniek ZeroTier-adres van 40 bits (10 hexadecimale cijfers). Dit adres is, in tegenstelling tot IP-adressen, een gecodeerde identificatie die geen routeringsinformatie bevat. Dit adres wordt berekend op basis van het openbare gedeelte van het openbare/privé-sleutelpaar. Het adres, de publieke sleutel en de privésleutel van een knooppunt vormen samen de identiteit van het knooppunt.
Member ID: df56c5621c
|
ZeroTier address of nodeWat encryptie betreft, is dit reden voor een apart artikel.
→
Om communicatie tot stand te brengen, sturen peers eerst pakketten omhoog door de root-serverboom. Terwijl deze pakketten door het netwerk reizen, initiëren ze de willekeurige creatie van directe links langs de weg. De boom probeert voortdurend zichzelf te 'inklappen' om zichzelf te optimaliseren voor de routekaart die hij opslaat.
Het mechanisme voor het tot stand brengen van een peer-to-peerverbinding is als volgt:

- Knooppunt A wil een pakket naar knooppunt B sturen, maar omdat het de directe route niet kent, stuurt het dit naar knooppunt R (moon, de rootserver van de gebruiker).
- Als knooppunt R een directe verbinding heeft met knooppunt B, wordt het pakket daarheen doorgestuurd. Anders wordt het pakket stroomopwaarts gestuurd totdat het de planetaire wortels bereikt. De planetaire wortels kennen alle knooppunten, dus als het online is, zal het pakket uiteindelijk knooppunt B bereiken.
- Knooppunt R stuurt ook een bericht, een zogenaamde rendez-vous, naar knooppunt A. Dit bericht bevat hints over hoe het knooppunt B kan bereiken. Ondertussen stuurt de rootserver, die het pakket doorstuurt naar knooppunt B, een rendez-vous waarin staat hoe het knooppunt A kan bereiken.
- Knooppunten A en B ontvangen hun rendez-vousberichten en proberen testberichten naar elkaar te sturen, in een poging om door eventuele NAT's of stateful firewalls heen te breken die ze onderweg tegenkomen. Als dit werkt, wordt er een directe verbinding tot stand gebracht en reizen de pakketten niet langer 'door de tuinen'.
Als er geen directe verbinding tot stand kan worden gebracht, wordt de communicatie via relay voortgezet en worden er directe verbindingspogingen voortgezet totdat een positief resultaat is behaald.
VL1 heeft daarnaast nog andere functies voor het tot stand brengen van directe connectiviteit, waaronder LAN-peerdetectie, poortvoorspelling voor symmetrische IPv4 NAT-traversal en expliciete poorttoewijzing met behulp van uPnP en/of NAT-PMP indien beschikbaar op het lokale fysieke LAN.
→
▍VL2 is een VXLAN-achtig Ethernet-netwerkvirtualisatieprotocol met SDN-beheerfuncties. Vertrouwde communicatieomgeving voor besturingssystemen en applicaties…
In tegenstelling tot VL1 is voor het creëren van VL2-netwerken (VLAN's), het verbinden van knooppunten hiermee en het beheren ervan, directe deelname van de gebruiker vereist. Hij kan dit doen met behulp van een netwerkcontroller. In essentie is het een regulier ZeroTier-knooppunt, waarbij de controllerfuncties op twee manieren worden aangestuurd: rechtstreeks, door bestanden te wijzigen, of, zoals de ontwikkelaar sterk aanbeveelt, via de gepubliceerde API.
Deze methode voor het beheren van ZeroTier virtuele netwerken is niet erg handig voor de gemiddelde gebruiker, daarom zijn er verschillende GUI's:
- Eén van de ontwikkelaar ZeroTier, beschikbaar als een publieke cloud SaaS-oplossing met vier abonnementen, inclusief gratis, maar beperkt in het aantal beheerde apparaten en het ondersteuningsniveau
- De tweede is van een onafhankelijke ontwikkelaar. De functionaliteit is enigszins vereenvoudigd, maar de oplossing is beschikbaar als een privé-opensourceoplossing voor gebruik on-premise of op cloudbronnen.
De VL2-laag is bovenop VL1 geïmplementeerd en wordt erdoor getransporteerd. Daarbij erft het de VL1-eindpuntversleuteling en -authenticatie en worden de asymmetrische sleutels gebruikt om referenties te ondertekenen en te verifiëren. Met VL1 kan VL2 worden geïmplementeerd zonder dat er rekening hoeft te worden gehouden met de bestaande fysieke netwerktopologie. Dat wil zeggen dat problemen met connectiviteit en routeringsefficiëntie taken zijn op VL1-niveau. Het is belangrijk om te begrijpen dat er geen verbinding bestaat tussen VL2-virtuele netwerken en VL1-paden. Net als bij VLAN-multiplexing op een bekabeld LAN hebben twee knooppunten die meerdere netwerklidmaatschappen delen, nog steeds maar één VL1-pad (virtuele kabel) tussen hen in.
Elk VL2-netwerk (VLAN) wordt geïdentificeerd door een 64-bits (16 hexadecimale cijfers) ZeroTier-netwerkadres, dat het 40-bits ZeroTier-adres van de controller en een 24-bits nummer bevat dat het netwerk identificeert dat door die controller is gemaakt.
Network ID: 8056c2e21c123456
| |
| Network number on controller
|
ZeroTier address of controllerWanneer een knooppunt zich bij een netwerk aansluit of een update van de netwerkconfiguratie aanvraagt, stuurt het een Network Configuration Request-bericht (via VL1) naar de netwerkcontroller. Vervolgens gebruikt de controller het VL1-adres van het knooppunt om het knooppunt op het netwerk te lokaliseren en de juiste certificaten, referenties en configuratiegegevens naar het knooppunt te sturen. Vanuit het perspectief van een virtueel VL2-netwerk kunnen ZeroTier VL1-adressen worden beschouwd als poortnummers op een grote virtuele switch op wereldwijde schaal.
Alle inloggegevens die door netwerkcontrollers worden uitgegeven aan knooppunten die deelnemen aan het netwerk, worden ondertekend met de geheime sleutel van de controller, zodat alle netwerkdeelnemers deze kunnen verifiëren. De inloggegevens zijn voorzien van tijdstempels die door de controller zijn gegenereerd, waardoor relatieve vergelijkingen mogelijk zijn zonder dat de lokale systeemklok van het knooppunt hoeft te worden geraadpleegd.
Inloggegevens worden alleen aan hun eigenaren verstrekt en vervolgens verzonden naar peers die gegevens willen uitwisselen met andere knooppunten in het netwerk. Hierdoor kan het netwerk worden opgeschaald naar grote omvang zonder dat er grote hoeveelheden inloggegevens op knooppunten hoeven te worden gecached of dat er voortdurend contact moet worden opgenomen met de netwerkcontroller.
ZeroTier-netwerken ondersteunen multicasting via een eenvoudig publicatie-/abonnementssysteem.
→
Wanneer een knooppunt een multicast voor een bepaalde broadcastgroep wenst te ontvangen, maakt het zijn lidmaatschap van die groep bekend aan andere leden van het netwerk waarmee het communiceert en aan de netwerkcontroller. Wanneer een knooppunt een multicast wil versturen, raadpleegt het tegelijkertijd de cache met recente publicaties en vraagt het periodiek om aanvullende publicaties.
Een broadcast (Ethernet ff:ff:ff:ff:ff:ff) wordt behandeld als een multicastgroep waarvan alle deelnemers lid zijn. Het kan op netwerkniveau worden uitgeschakeld om het verkeer te verminderen als het niet nodig is.
ZeroTier emuleert een echte Ethernet-switch. Dit feit maakt het mogelijk om het combineren van gecreëerde virtuele netwerken met andere Ethernet-netwerken (bekabeld lokaal netwerk, WiFi, virtuele backplane, enz.) op het niveau van de datalink, via een reguliere Ethernet-brug.
Om als brug te kunnen functioneren, moet een netwerkcontroller een netwerkknooppunt als zodanig aanwijzen. Deze regeling wordt om veiligheidsredenen ingevoerd, aangezien normale netwerkknooppunten geen verkeer mogen versturen vanaf een andere bron dan hun MAC-adres. Knooppunten die als bruggen zijn aangewezen, maken ook gebruik van een speciale multicastalgoritmemodus die agressiever en specifieker met de knooppunten samenwerkt bij het groeperen van abonnementen en het repliceren van al het broadcastverkeer en ARP-aanvragen.
De switch heeft ook de mogelijkheid om openbare en ad-hocnetwerken te creëren, een QoS-mechanisme en een netwerkregeleditor.
▍Knoop:
ZeroTier Eén is een service die draait op laptops, desktops, servers, virtuele machines en containers en die verbindingen biedt met een virtueel netwerk via een virtuele netwerkpoort, vergelijkbaar met een VPN-client.
Zodra de service is geïnstalleerd en gestart, kunt u verbinding maken met virtuele netwerken met behulp van hun 16-cijferige adressen. Elk netwerk verschijnt als een virtuele netwerkpoort op het systeem, die zich net als een gewone Ethernet-poort gedraagt.
ZeroTier One is momenteel beschikbaar voor de volgende besturingssystemen en systemen.
Besturingssystemen:
- Microsoft Windows — MSI-installatieprogramma x86/x64
- MacOS — PKG-installateur
- Apple iOS — App Store
- Android — Speelwinkel
- Linux — DEB/RPM
- FreeBSD — FreeBSD-pakket
NAS:
- Synology NAS
- QNAP-NAS
- WD MyCloud NAS
andere:
- havenarbeider — docker-bestand
- OpenWRT — gemeenschapshaven
- App-insluiting — SDK (libzt)
Om het bovenstaande samen te vatten, zou ik zeggen dat ZeroTier een geweldig en snel hulpmiddel is voor het combineren van uw fysieke, virtuele of cloudbronnen in een gemeenschappelijk lokaal netwerk. U kunt het netwerk bovendien opsplitsen in VLAN's en er is geen sprake van een enkelvoudig storingspunt.
Dat was waarschijnlijk alles wat betreft het theoretische gedeelte in het eerste artikel over ZeroTier voor Habr! In het volgende artikel zal ik in de praktijk demonstreren hoe u een virtuele netwerkinfrastructuur op basis van ZeroTier kunt maken. Hierbij wordt een VDS met een eigen open source GUI-sjabloon gebruikt als netwerkcontroller.
Beste lezers! Gebruikt u ZeroTier-technologie in uw projecten? Zo niet, welke hulpmiddelen gebruikt u om uw bronnen in een gemeenschappelijk netwerk te verbinden?
Bron: www.habr.com
