Ce document est rédigé pour un public de développeurs de logiciels. Pour plus d'informations sur l'utilisation de ZeroTier, consultez : le site Web, le site de documentation et le forum de discussion.
ZeroTier est un commutateur Ethernet programmable intelligent pour la planète Terre. Il permet à tous les appareils, machines virtuelles, conteneurs et applications en réseau de communiquer comme s'ils résidaient tous dans le même centre de données physique ou dans la même région cloud.
Ceci est accompli en combinant un réseau peer to peer sécurisé et adressé cryptographiquement (appelé VL1) avec une couche d'émulation Ethernet quelque peu similaire à VXLAN (appelée VL2). Notre couche de virtualisation Ethernet VL2 comprend des fonctionnalités SDN d'entreprise avancées telles que des règles de contrôle d'accès précises pour la micro-segmentation du réseau et la surveillance de la sécurité.
Tout le trafic ZeroTier est crypté de bout en bout à l'aide de clés secrètes que vous seul contrôlez. La plupart du trafic circule en peer to peer, même si nous proposons un relais gratuit (mais lent) pour les utilisateurs qui ne peuvent pas établir de connexions peer to peer.
Les objectifs et les principes de conception de ZeroTier s'inspirent entre autres de l'article original de Google BeyondCorp et du Jericho Forum avec sa notion de « dépérimétisation ».
Visitez le site de ZeroTier pour plus d'informations et des packages binaires prédéfinis. Les applications pour Android et iOS sont disponibles gratuitement sur les magasins d'applications Google Play et Apple.
ZeroTier est sous licence BSL version 1.1. Voir LICENSE.txt et la page de tarification ZeroTier pour plus de détails. ZeroTier peut être utilisé gratuitement en interne dans les entreprises et les établissements universitaires et à des fins non commerciales. Certains types d'utilisation commerciale, tels que la création d'applications et d'appareils à code source fermé basés sur ZeroTier ou l'offre de contrôleurs réseau ZeroTier et de gestion de réseau en tant que service SaaS, nécessitent une licence commerciale.
Une petite quantité de code tiers est également incluse dans ZeroTier et n'est pas soumise à notre licence BSL. Voir AUTHORS.md pour une liste du code tiers, où il est inclus et les licences qui s'y appliquent. Tout le code tiers de ZeroTier est sous licence libérale (MIT, BSD, Apache, domaine public, etc.).
Tout dans le monde ZeroTier est contrôlé par deux types d'identifiants : les adresses ZeroTier 40 bits/10 chiffres et les identifiants réseau 64 bits/16 chiffres. Ces identifiants se distinguent facilement par leur longueur. Une adresse ZeroTier identifie un nœud ou un « appareil » (ordinateur portable, téléphone, serveur, VM, application, etc.) tandis qu'un ID réseau identifie un réseau Ethernet virtuel auquel peuvent rejoindre des appareils.
Les adresses ZeroTier peuvent être considérées comme des numéros de port sur un énorme commutateur intelligent Ethernet d'entreprise à l'échelle planétaire prenant en charge les VLAN. Les ID réseau sont des ID VLAN auxquels ces ports peuvent être attribués. Un seul port peut être attribué à plusieurs VLAN.
Une adresse ZeroTier ressemble à 8056c2e21c
et un ID réseau à 8056c2e21c000001
. Les ID réseau sont composés de l'adresse ZeroTier du contrôleur principal de ce réseau et d'un ID arbitraire de 24 bits qui identifie le réseau sur ce contrôleur. Les contrôleurs réseau sont à peu près analogues aux contrôleurs SDN dans les protocoles SDN comme OpenFlow, bien que, comme pour l'analogie entre VXLAN et VL2, cela ne doive pas être interprété comme impliquant que les protocoles ou la conception sont identiques. Vous pouvez utiliser nos contrôleurs hébergés SaaS pratiques et peu coûteux sur my.zerotier.com ou exécuter votre propre contrôleur si cela ne vous dérange pas de jouer avec les fichiers de configuration JSON ou d'écrire des scripts pour le faire.
Le chemin de base contient le point d'entrée principal du service ZeroTier One ( one.cpp
), le code d'auto-test, les makefiles, etc.
artwork/
: icônes, logos, etc.attic/
: vieux trucs et code expérimental que nous voulons conserver pour référence.controller/
: l'implémentation du contrôleur réseau de référence, qui est construite et incluse par défaut sur les cibles de build de bureau et de serveur.debian/
: fichiers pour construire des paquets Debian sous Linux.doc/
: pages de manuel et autres documentations.ext/
: bibliothèques tierces, binaires que nous livrons pour plus de commodité sur certaines plateformes (Mac et Windows) et fichiers de support d'installation.include/
: inclure des fichiers pour le noyau ZeroTier.java/
: un wrapper JNI utilisé avec notre application mobile Android. (L'ensemble de l'application Android n'est pas open source mais pourrait le devenir à l'avenir.)node/
: le cœur du commutateur Ethernet virtuel ZeroTier, conçu pour être entièrement séparé du reste du code et pouvant être construit comme une bibliothèque autonome indépendante du système d'exploitation. Note aux développeurs : n'utilisez pas les fonctionnalités C++11 ici, car nous voulons que cela s'appuie sur d'anciennes plates-formes embarquées qui ne prennent pas en charge C++11. C++11 peut être utilisé ailleurs.osdep/
: code pour prendre en charge et intégrer les systèmes d'exploitation, y compris des éléments spécifiques à la plate-forme conçus uniquement pour certaines cibles.rule-compiler/
: compilateur de langage de règles JavaScript pour définir des règles au niveau du réseau.service/
: le service ZeroTier One, qui englobe le noyau ZeroTier et fournit une connectivité de type VPN aux réseaux virtuels pour les ordinateurs de bureau, les ordinateurs portables, les serveurs, les machines virtuelles et les conteneurs.windows/
: fichiers de solution Visual Studio, code de service Windows et interface utilisateur de l’application de la barre des tâches Windows.zeroidc/
: implémentation OIDC utilisée par le service ZeroTier pour se connecter aux réseaux compatibles SSO. (Cette partie est écrite en Rust, et d'autres Rust apparaîtront dans ce référentiel à l'avenir.) Veuillez retirer les demandes de la branche dev
.
Les versions sont effectuées en fusionnant dev
avec main
, puis en marquant et en réalisant des builds.
Pour construire sur Mac et Linux, tapez simplement make
. Sur FreeBSD et OpenBSD, gmake
(GNU make) est requis et peut être installé à partir de packages ou de ports. Pour Windows, il existe une solution Visual Studio dans windows/
.
gmake
pour construire.binutils
est requis. Tapez pkg install binutils
pour installer./dev/tap0
à /dev/tap3
).gmake
pour construire. Taper make selftest
construira un binaire d'autotest de niveau zéro dont l'unité teste divers composants internes et rend compte de quelques aspects de l'environnement de construction. C'est une bonne idée d'essayer cela sur de nouvelles plates-formes ou architectures.
L'exécution de zerotier-one avec l'option -h
affichera de l'aide.
Sous Linux et BSD, si vous avez construit à partir des sources, vous pouvez démarrer le service avec :
sudo ./zerotier-one -d
Sur la plupart des distributions, macOS et Windows, le programme d'installation démarrera le service et le configurera pour qu'il démarre au démarrage.
Un dossier personnel pour votre système sera automatiquement créé.
Le service est contrôlé via l'API JSON, qui est disponible par défaut à 127.0.0.1:9993
. Il écoute également 0.0.0.0:9993
, ce qui n'est utilisable que si allowManagementFrom
est correctement configuré dans local.conf
. Nous incluons un utilitaire de ligne de commande Zerotier-cli pour effectuer des appels d'API pour des tâches standard telles que rejoindre et quitter des réseaux. Le fichier authtoken.secret dans le dossier de base contient le jeton secret permettant d'accéder à cette API. Voir service/README.md pour la documentation de l'API.
Voici où se trouvent les dossiers de départ (par défaut) sur chaque système d'exploitation :
/var/lib/zerotier-one
/var/db/zerotier-one
/Library/Application Support/ZeroTier/One
ProgramDataZeroTierOne
(c'est la valeur par défaut. Le dossier de base « données d'application partagées » peut être différent si Windows est installé avec une attribution ou une disposition de lettre de lecteur non standard.)Pour la plupart des utilisateurs, cela fonctionne.
Si vous exécutez un pare-feu système local, nous vous recommandons d'ajouter des règles autorisant le niveau zéro. Si vous avez installé des binaires pour Windows, cela devrait se faire automatiquement. D'autres plates-formes peuvent nécessiter une modification manuelle des règles de pare-feu locales en fonction de votre configuration.
Consultez le site de documentation pour plus d'informations.
Le pare-feu Mac se trouve sous « Sécurité » dans les Préférences Système. Linux dispose d'une variété de systèmes et d'outils de configuration de pare-feu.
Sur CentOS, vérifiez /etc/sysconfig/iptables
les règles IPTables. Pour les autres distributions, consultez la documentation de votre distribution. Vous devrez également vérifier les interfaces utilisateur ou la documentation des applications de pare-feu commerciales tierces telles que Little Snitch (Mac), McAfee Firewall Enterprise (Windows), etc. si vous en exécutez une. Certains environnements d'entreprise peuvent disposer d'un logiciel de pare-feu géré de manière centralisée, vous devrez donc peut-être également contacter le service informatique.
Les homologues ZeroTier One se localiseront automatiquement et communiqueront directement sur un réseau local câblé si le port UDP entrant 9993 est ouvert . Si ce port est filtré, ils ne pourront pas voir les paquets d'annonces LAN des autres. Si vous rencontrez des performances médiocres entre les appareils sur le même réseau physique, vérifiez les paramètres de leur pare-feu. Sans la localisation automatique du réseau local, les pairs doivent tenter une traversée NAT de « bouclage », ce qui échoue parfois et nécessite dans tous les cas que chaque paquet traverse votre routeur externe deux fois.
Les utilisateurs derrière certains types de pare-feu et de périphériques NAT « symétriques » peuvent ne pas être en mesure de se connecter directement à des homologues externes. ZeroTier a une prise en charge limitée pour la prédiction de port et tentera de traverser des NAT symétriques, mais cela ne fonctionne pas toujours. Si la connectivité P2P échoue, vous renverrez les paquets UDP sur nos serveurs relais, ce qui ralentira les performances. Certains routeurs NAT ont un mode NAT configurable, et le définir sur « cône complet » éliminera ce problème. Si vous faites cela, vous constaterez peut-être également une amélioration magique pour des éléments tels que les téléphones VoIP, Skype, BitTorrent, WebRTC, certains jeux, etc., car tous utilisent des techniques de traversée NAT similaires aux nôtres.
Si un pare-feu entre vous et Internet bloque le trafic UDP de ZeroTier, vous recourrez au tunneling TCP de dernier recours vers les serveurs racine sur le port 443 (usurpation d'identité https). Cela fonctionnera presque partout, mais est très lent par rapport à UDP ou à la connectivité directe peer to peer.
Une aide supplémentaire peut être trouvée dans notre base de connaissances.
Les métriques Prometheus sont disponibles au point de terminaison de l'API /metrics
. Ce point de terminaison est protégé par une clé API stockée dans metricstoken.secret
pour éviter les fuites d'informations indésirables. Les informations pouvant être glanées à partir des métriques incluent les réseaux rejoints et les homologues avec lesquels votre instance communique.
Le contrôle d'accès se fait via l'interface de contrôle ZeroTier elle-même et metricstoken.secret
. Celui-ci peut être envoyé sous forme de jeton d'authentification du porteur, via le champ d'en-tête HTTP X-ZT1-Auth
, ou ajouté à l'URL sous la forme ?auth=<token>
. Vous pouvez voir les métriques actuelles via cURL
avec la commande suivante :
// 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
Pour configurer une tâche de scrape dans Prometheus sur la machine sur laquelle ZeroTier est exécuté, ajoutez ceci à votre Prometheus scrape_config
:
- 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
Si aucune de ces méthodes n'est souhaitable, il est probablement possible de distribuer des métriques via Prometheus Proxy ou un autre outil. Remarque : Nous n'avons pas testé cela en interne, mais nous fonctionnerons probablement avec la configuration correcte.
Les métriques sont également disponibles sur disque dans le répertoire de travail de ZeroTier :
// Linux /var/lib/zerotier-one/metrics.prom
// macOS /Bibliothèque/Application Support/ZeroTier/One/metrics.prom
//Windows C:ProgramDataZeroTierOnemetrics.prom
Nom de la métrique | Étiquettes | Type métrique | Description |
---|---|---|---|
zt_packet | type_paquet, direction | Comptoir | Nombre de types de paquets ZeroTier |
zt_packet_error | type_erreur, direction | Comptoir | Erreurs de paquets ZeroTier |
zt_data | protocole, direction | Comptoir | nombre d'octets que ZeroTier a transmis ou reçus |
zt_num_networks | Jauge | nombre de réseaux auxquels cette instance est jointe | |
zt_network_multicast_groups_subscribe | identifiant_réseau | Jauge | nombre de réseaux de groupes de multidiffusion auxquels sont abonnés |
zt_network_packets | network_id, direction | Comptoir | nombre de paquets entrants/sortants par réseau |
zt_peer_latency | ID_noeud | Histogramme | latence des pairs (ms) |
zt_peer_path_count | node_id, statut | Jauge | nombre de chemins vers peer |
zt_peer_packets | node_id, direction | Comptoir | nombre de paquets vers/depuis un homologue |
zt_peer_packet_errors | ID_noeud | Comptoir | nombre d'erreurs de paquets entrants provenant d'un homologue |
S'il y a d'autres mesures que vous aimeriez voir suivies, demandez-nous dans un problème ou envoyez-nous une Pull Request !
Il existe un serveur de fichiers http statique adapté à l'hébergement d'applications à page unique à l'adresse http://localhost:9993/app/.
Utilisez zerotier-cli info -j
pour trouver le homeDir de votre service zerotier-one
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
Ensuite, visitez http://localhost:9993/app/app1/ et http://localhost:9993/app/appB/
Les requêtes vers des chemins n'existent pas renvoient la racine de l'application index.html, comme c'est l'habitude pour les SPA. Si vous le souhaitez, vous pouvez écrire du javascript qui communique avec l'API du service ou du contrôleur.