Dieses Dokument richtet sich an Softwareentwickler. Informationen zur Verwendung von ZeroTier finden Sie auf der Website, der Dokumentationsseite und im Diskussionsforum.
ZeroTier ist ein intelligenter programmierbarer Ethernet-Switch für den Planeten Erde. Es ermöglicht allen vernetzten Geräten, VMs, Containern und Anwendungen die Kommunikation, als ob sie sich alle im selben physischen Rechenzentrum oder in der gleichen Cloud-Region befänden.
Dies wird erreicht, indem ein kryptografisch adressiertes und sicheres Peer-to-Peer-Netzwerk (VL1 genannt) mit einer Ethernet-Emulationsschicht kombiniert wird, die VXLAN ähnelt (VL2 genannt). Unsere VL2-Ethernet-Virtualisierungsschicht umfasst erweiterte SDN-Funktionen für Unternehmen wie fein abgestimmte Zugriffskontrollregeln für Netzwerk-Mikrosegmentierung und Sicherheitsüberwachung.
Der gesamte ZeroTier-Verkehr wird Ende-zu-Ende mit geheimen Schlüsseln verschlüsselt, die nur Sie kontrollieren. Der meiste Datenverkehr fließt Peer-to-Peer, wir bieten jedoch eine kostenlose (aber langsame) Weiterleitung für Benutzer an, die keine Peer-to-Peer-Verbindungen herstellen können.
Die Ziele und Designprinzipien von ZeroTier sind unter anderem vom Originalpapier von Google BeyondCorp und dem Jericho Forum mit seiner Idee der „Deperimeterisierung“ inspiriert.
Weitere Informationen und vorgefertigte Binärpakete finden Sie auf der Website von ZeroTier. Apps für Android und iOS sind kostenlos in den App Stores von Google Play und Apple erhältlich.
ZeroTier ist unter der BSL-Version 1.1 lizenziert. Weitere Informationen finden Sie in LICENSE.txt und auf der ZeroTier-Preisseite. Die interne Nutzung von ZeroTier in Unternehmen und akademischen Einrichtungen sowie für nichtkommerzielle Zwecke ist kostenlos. Bestimmte Arten der kommerziellen Nutzung, wie das Erstellen von Closed-Source-Apps und -Geräten auf Basis von ZeroTier oder das Anbieten von ZeroTier-Netzwerkcontrollern und Netzwerkmanagement als SaaS-Dienst, erfordern eine kommerzielle Lizenz.
Eine kleine Menge Code von Drittanbietern ist ebenfalls in ZeroTier enthalten und unterliegt nicht unserer BSL-Lizenz. Unter AUTHORS.md finden Sie eine Liste des Codes von Drittanbietern, wo dieser enthalten ist, und die dafür geltenden Lizenzen. Der gesamte Code von Drittanbietern in ZeroTier ist großzügig lizenziert (MIT, BSD, Apache, Public Domain usw.).
Alles in der ZeroTier-Welt wird durch zwei Arten von Kennungen gesteuert: 40-Bit/10-stellige ZeroTier-Adressen und 64-Bit/16-stellige Netzwerk-IDs . Diese Bezeichner lassen sich leicht anhand ihrer Länge unterscheiden. Eine ZeroTier-Adresse identifiziert einen Knoten oder ein „Gerät“ (Laptop, Telefon, Server, VM, App usw.), während eine Netzwerk-ID ein virtuelles Ethernet-Netzwerk identifiziert, dem Geräte beitreten können.
ZeroTier-Adressen können als Portnummern auf einem riesigen, weltweiten Unternehmens-Ethernet-Smart-Switch betrachtet werden, der VLANs unterstützt. Netzwerk-IDs sind VLAN-IDs, denen diese Ports zugewiesen werden können. Ein einzelner Port kann mehr als einem VLAN zugewiesen werden.
Eine ZeroTier-Adresse sieht wie 8056c2e21c
aus und eine Netzwerk-ID sieht wie 8056c2e21c000001
aus. Netzwerk-IDs bestehen aus der ZeroTier-Adresse des primären Controllers dieses Netzwerks und einer beliebigen 24-Bit-ID, die das Netzwerk auf diesem Controller identifiziert. Netzwerk-Controller ähneln in etwa den SDN-Controllern in SDN-Protokollen wie OpenFlow. Wie bei der Analogie zwischen VXLAN und VL2 sollte dies jedoch nicht so verstanden werden, dass die Protokolle oder das Design gleich sind. Sie können unsere praktischen und kostengünstigen SaaS-gehosteten Controller unter my.zerotier.com verwenden oder Ihren eigenen Controller betreiben, wenn es Ihnen nichts ausmacht, mit JSON-Konfigurationsdateien herumzuspielen oder dafür Skripts zu schreiben.
Der Basispfad enthält den Haupteinstiegspunkt des ZeroTier One-Dienstes ( one.cpp
), Selbsttestcode, Makefiles usw.
artwork/
: Symbole, Logos usw.attic/
: alte Sachen und experimenteller Code, den wir als Referenz aufbewahren möchten.controller/
: die Referenznetzwerk-Controller-Implementierung, die standardmäßig auf Desktop- und Server-Build-Zielen erstellt und enthalten ist.debian/
: Dateien zum Erstellen von Debian-Paketen unter Linux.doc/
: Handbuchseiten und andere Dokumentation.ext/
: Bibliotheken von Drittanbietern, Binärdateien, die wir zur Vereinfachung auf einigen Plattformen (Mac und Windows) versenden, und Installationsunterstützungsdateien.include/
: Dateien für den ZeroTier-Kern einschließen.java/
: ein JNI-Wrapper, der mit unserer mobilen Android-App verwendet wird. (Die gesamte Android-App ist nicht Open Source, wird aber möglicherweise in Zukunft als Open Source bereitgestellt.)node/
: der virtuelle ZeroTier-Ethernet-Switch-Kern, der vollständig vom Rest des Codes getrennt ist und als eigenständige, vom Betriebssystem unabhängige Bibliothek erstellt werden kann. Hinweis für Entwickler: Verwenden Sie hier keine C++11-Funktionen, da wir möchten, dass dies auf alten eingebetteten Plattformen aufbaut, denen C++11-Unterstützung fehlt. C++11 kann an anderer Stelle verwendet werden.osdep/
: Code zur Unterstützung und Integration in Betriebssysteme, einschließlich plattformspezifischer Dinge, die nur für bestimmte Ziele erstellt wurden.rule-compiler/
: JavaScript-Regelsprachen-Compiler zum Definieren von Regeln auf Netzwerkebene.service/
: der ZeroTier One-Dienst, der den ZeroTier-Kern umschließt und VPN-ähnliche Konnektivität zu virtuellen Netzwerken für Desktops, Laptops, Server, VMs und Container bereitstellt.windows/
: Visual Studio-Lösungsdateien, Windows-Dienstcode und die Benutzeroberfläche der Windows-Taskleisten-App.zeroidc/
: OIDC-Implementierung, die vom ZeroTier-Dienst zum Anmelden bei SSO-fähigen Netzwerken verwendet wird. (Dieser Teil ist in Rust geschrieben und in Zukunft wird noch mehr Rust in diesem Repository erscheinen.) Bitte ziehen Sie Anfragen aus dem dev
.
Releases werden erstellt, indem dev
mit main
zusammengeführt und dann mit Tags versehen und Builds erstellt werden.
Um auf Mac und Linux zu erstellen, geben Sie einfach make
ein. Unter FreeBSD und OpenBSD ist gmake
(GNU make) erforderlich und kann über Pakete oder Ports installiert werden. Für Windows gibt es eine Visual Studio-Lösung in windows/
.
gmake
ein.binutils
ist erforderlich. Geben Sie zum Installieren pkg install binutils
ein./dev/tap0
bis /dev/tap3
).gmake
ein. Wenn Sie make selftest
eingeben, wird eine Zerotier-Selftest- Binärdatei erstellt, die verschiedene interne Komponenten testet und über einige Aspekte der Build-Umgebung berichtet. Es ist eine gute Idee, dies auf neuartigen Plattformen oder Architekturen auszuprobieren.
Wenn Sie „zerotier-one“ mit der Option -h
ausführen, wird Hilfe angezeigt.
Wenn Sie unter Linux und BSD aus dem Quellcode erstellt haben, können Sie den Dienst starten mit:
sudo ./zerotier-one -d
Bei den meisten Distributionen, macOS und Windows, startet das Installationsprogramm den Dienst und richtet ihn so ein, dass er beim Booten startet.
Es wird automatisch ein Home-Ordner für Ihr System erstellt.
Der Dienst wird über die JSON-API gesteuert, die standardmäßig unter 127.0.0.1:9993
verfügbar ist. Es lauscht auch auf 0.0.0.0:9993
, was nur verwendbar ist, wenn allowManagementFrom
in local.conf
richtig konfiguriert ist. Wir integrieren ein Zerotier-CLI -Befehlszeilendienstprogramm, um API-Aufrufe für Standardaufgaben wie das Beitreten und Verlassen von Netzwerken durchzuführen. Die Datei authtoken.secret im Home-Ordner enthält das geheime Token für den Zugriff auf diese API. Die API-Dokumentation finden Sie unter service/README.md.
Hier sind die Home-Ordner (standardmäßig) auf jedem Betriebssystem:
/var/lib/zerotier-one
/var/db/zerotier-one
/Library/Application Support/ZeroTier/One
ProgramDataZeroTierOne
(Das ist die Standardeinstellung. Der Basisordner „Shared App Data“ kann anders sein, wenn Windows mit einer nicht standardmäßigen Laufwerksbuchstabenzuweisung oder einem nicht standardmäßigen Laufwerksbuchstabenlayout installiert wird.)Für die meisten Benutzer funktioniert es einfach.
Wenn Sie eine lokale System-Firewall betreiben, empfehlen wir das Hinzufügen von Regeln, die Zerotier zulassen. Wenn Sie Binärdateien für Windows installiert haben, sollte dies automatisch erfolgen. Bei anderen Plattformen ist je nach Konfiguration möglicherweise eine manuelle Bearbeitung der lokalen Firewall-Regeln erforderlich.
Weitere Informationen finden Sie auf der Dokumentationsseite.
Die Mac-Firewall finden Sie unter „Sicherheit“ in den Systemeinstellungen. Linux verfügt über eine Vielzahl von Firewall-Konfigurationssystemen und -Tools.
Überprüfen Sie unter CentOS /etc/sysconfig/iptables
auf IPTables-Regeln. Informationen zu anderen Distributionen finden Sie in der Dokumentation Ihrer Distribution. Sie müssen auch die Benutzeroberflächen oder Dokumentation für kommerzielle Firewall-Anwendungen von Drittanbietern wie Little Snitch (Mac), McAfee Firewall Enterprise (Windows) usw. überprüfen, wenn Sie eine dieser Anwendungen ausführen. Einige Unternehmensumgebungen verfügen möglicherweise über zentral verwaltete Firewall-Software, daher müssen Sie sich möglicherweise auch an die IT-Abteilung wenden.
ZeroTier One-Peers finden sich automatisch gegenseitig und kommunizieren direkt über ein lokales kabelgebundenes LAN, wenn der eingehende UDP-Port 9993 geöffnet ist . Wenn dieser Port gefiltert wird, können sie die LAN-Ankündigungspakete der anderen nicht sehen. Wenn Sie eine schlechte Leistung zwischen Geräten im selben physischen Netzwerk feststellen, überprüfen Sie deren Firewall-Einstellungen. Ohne LAN-Auto-Location müssen Peers einen „Loopback“-NAT-Traversal versuchen, der manchmal fehlschlägt und in jedem Fall erfordert, dass jedes Paket Ihren externen Router zweimal durchquert.
Benutzer hinter bestimmten Arten von Firewalls und „symmetrischen“ NAT-Geräten können möglicherweise überhaupt keine direkte Verbindung zu externen Peers herstellen. ZeroTier bietet nur begrenzte Unterstützung für die Portvorhersage und versucht , symmetrische NATs zu durchlaufen, aber das funktioniert nicht immer. Wenn die P2P-Verbindung fehlschlägt, werden UDP-Pakete von unseren Relay-Servern weitergeleitet, was zu einer langsameren Leistung führt. Einige NAT-Router verfügen über einen konfigurierbaren NAT-Modus. Wenn Sie diesen auf „Full Cone“ einstellen, wird dieses Problem behoben. Wenn Sie dies tun, können Sie möglicherweise auch eine magische Verbesserung für Dinge wie VoIP-Telefone, Skype, BitTorrent, WebRTC, bestimmte Spiele usw. feststellen, da alle diese NAT-Traversal-Techniken verwenden, die unseren ähneln.
Wenn eine Firewall zwischen Ihnen und dem Internet den UDP-Verkehr von ZeroTier blockiert, greifen Sie als letztes Mittel auf TCP-Tunneling zu Rootservern über Port 443 zurück (https-Identitätswechsel). Dies funktioniert fast überall, ist jedoch im Vergleich zu UDP oder direkter Peer-to-Peer-Konnektivität sehr langsam .
Weitere Hilfe finden Sie in unserer Wissensdatenbank.
Prometheus-Metriken sind am API-Endpunkt /metrics
verfügbar. Dieser Endpunkt ist durch einen in metricstoken.secret
gespeicherten API-Schlüssel geschützt, um unerwünschte Informationslecks zu verhindern. Zu den Informationen, die aus den Metriken gewonnen werden können, gehören verbundene Netzwerke und Peers, mit denen Ihre Instanz kommuniziert.
Die Zugriffskontrolle erfolgt über die ZeroTier-Steuerungsschnittstelle selbst und metricstoken.secret
. Dies kann als Bearer-Authentifizierungstoken über das HTTP-Header-Feld X-ZT1-Auth
gesendet oder als ?auth=<token>
an die URL angehängt werden. Sie können die aktuellen Metriken über cURL
mit dem folgenden Befehl anzeigen:
// Linux
curl -H "X-ZT1-Auth: $(sudo cat /var/lib/zerotier-one/metricstoken.secret)" http://localhost:9993/metrics
// macOS
curl -H "X-ZT1-Auth: $(sudo cat /Library/Application Support/ZeroTier/One/metricstoken.secret)" http://localhost:9993/metrics
// Windows PowerShell (Admin)
Invoke-RestMethod -Headers @{'X-ZT1-Auth' = "$(Get-Content C:ProgramDataZeroTierOnemetricstoken.secret)"; } -Uri http://localhost:9993/metrics
Um einen Scrape-Job in Prometheus auf dem Computer zu konfigurieren, auf dem ZeroTier ausgeführt wird, fügen Sie Folgendes zu Ihrer Prometheus scrape_config
hinzu:
- job_name: zerotier-one
honor_labels: true
scrape_interval: 15s
metrics_path: /metrics
static_configs:
- targets:
- 127.0.0.1:9993
labels:
group: zerotier-one
node_id: $YOUR_10_CHARACTER_NODE_ID
authorization:
credentials: $YOUR_METRICS_TOKEN_SECRET
Wenn keine dieser Methoden wünschenswert ist, ist es wahrscheinlich möglich, Metriken über Prometheus Proxy oder ein anderes Tool zu verteilen. Hinweis: Wir haben dies nicht intern getestet, funktionieren aber wahrscheinlich mit der richtigen Konfiguration.
Metriken sind auch auf der Festplatte im Arbeitsverzeichnis von ZeroTier verfügbar:
// Linux /var/lib/zerotier-one/metrics.prom
// macOS /Library/Application Support/ZeroTier/One/metrics.prom
//Windows C:ProgramDataZeroTierOnemetrics.prom
Metrikname | Etiketten | Metriktyp | Beschreibung |
---|---|---|---|
zt_packet | Pakettyp, Richtung | Schalter | Anzahl der ZeroTier-Pakettypen |
zt_packet_error | Fehlertyp, Richtung | Schalter | ZeroTier-Paketfehler |
zt_data | Protokoll, Richtung | Schalter | Anzahl der Bytes, die ZeroTier gesendet oder empfangen hat |
zt_num_networks | Messgerät | Anzahl der Netzwerke, mit denen diese Instanz verbunden ist | |
zt_network_multicast_groups_subscribed | Netzwerk-ID | Messgerät | Anzahl der Multicast-Gruppen, die Netzwerke abonniert haben |
zt_network_packets | Netzwerk-ID, Richtung | Schalter | Anzahl der ein-/ausgehenden Pakete pro Netzwerk |
zt_peer_latency | node_id | Histogramm | Peer-Latenz (ms) |
zt_peer_path_count | node_id, Status | Messgerät | Anzahl der Pfade zum Peer |
zt_peer_packets | node_id, Richtung | Schalter | Anzahl der Pakete zu/von einem Peer |
zt_peer_packet_errors | node_id | Schalter | Anzahl eingehender Paketfehler von einem Peer |
Wenn Sie andere Kennzahlen verfolgen möchten, fragen Sie uns in einem Problem oder senden Sie uns eine Pull-Anfrage!
Unter http://localhost:9993/app/ gibt es einen statischen HTTP-Dateiserver, der zum Hosten von Single Page Apps geeignet ist.
Verwenden Sie zerotier-cli info -j
um das HomeDir Ihres Zerotier-One-Dienstes zu finden
cd $ZT_HOME
sudo mkdir -p app/app1
sudo mkdir -p app/appB
echo ' <html><meta charset=utf-8><title>appA</title><body><h1>hello world A ' | sudo tee app/appA/index.html
echo ' <html><meta charset=utf-8><title>app2</title><body><h1>hello world 2 ' | sudo tee app/app2/index.html
curl -sL http://localhost:9993/app/appA http://localhost:9993/app/app2
Besuchen Sie dann http://localhost:9993/app/app1/ und http://localhost:9993/app/appB/.
Anfragen an „Pfade nicht vorhanden“ geben den App-Root „index.html“ zurück, wie es bei SPAs üblich ist. Wenn Sie möchten, können Sie Javascript schreiben, das mit der Dienst- oder Controller-API kommuniziert.