Este documento foi escrito para um público desenvolvedor de software. Para obter informações sobre como usar o ZeroTier, consulte: Site, Site de documentação e Fórum de discussão.
ZeroTier é um switch Ethernet programável inteligente para o planeta Terra. Ele permite que todos os dispositivos, VMs, contêineres e aplicativos em rede se comuniquem como se residissem no mesmo data center físico ou região de nuvem.
Isso é conseguido combinando uma rede ponto a ponto segura e endereçada criptograficamente (denominada VL1) com uma camada de emulação Ethernet um tanto semelhante à VXLAN (denominada VL2). Nossa camada de virtualização Ethernet VL2 inclui recursos avançados de SDN empresarial, como regras de controle de acesso refinadas para microssegmentação de rede e monitoramento de segurança.
Todo o tráfego ZeroTier é criptografado de ponta a ponta usando chaves secretas que somente você controla. A maior parte do tráfego flui ponto a ponto, embora ofereçamos retransmissão gratuita (mas lenta) para usuários que não conseguem estabelecer conexões ponto a ponto.
Os objetivos e princípios de design do ZeroTier são inspirados, entre outras coisas, no artigo original do Google BeyondCorp e no Jericho Forum com sua noção de "desperimetrização".
Visite o site do ZeroTier para obter mais informações e pacotes binários pré-construídos. Aplicativos para Android e iOS estão disponíveis gratuitamente nas lojas de aplicativos Google Play e Apple.
ZeroTier é licenciado sob a versão 1.1 do BSL. Consulte LICENSE.txt e a página de preços do ZeroTier para obter detalhes. ZeroTier é gratuito para uso interno em empresas e instituições acadêmicas e para fins não comerciais. Certos tipos de uso comercial, como a construção de aplicativos e dispositivos de código fechado baseados em ZeroTier ou a oferta de controladores de rede ZeroTier e gerenciamento de rede como um serviço SaaS, exigem uma licença comercial.
Uma pequena quantidade de código de terceiros também está incluída no ZeroTier e não está sujeita à nossa licença BSL. Consulte AUTHORS.md para obter uma lista de códigos de terceiros, onde estão incluídos e as licenças que se aplicam a eles. Todo o código de terceiros no ZeroTier é licenciado liberalmente (MIT, BSD, Apache, domínio público, etc.).
Tudo no mundo ZeroTier é controlado por dois tipos de identificadores: endereços ZeroTier de 40 bits/10 dígitos e IDs de rede de 64 bits/16 dígitos. Esses identificadores são facilmente distinguidos pelo seu comprimento. Um endereço ZeroTier identifica um nó ou “dispositivo” (laptop, telefone, servidor, VM, aplicativo, etc.), enquanto um ID de rede identifica uma rede Ethernet virtual que pode ser unida por dispositivos.
Os endereços ZeroTier podem ser considerados números de porta em um enorme switch inteligente Ethernet corporativo em todo o planeta que oferece suporte a VLANs. IDs de rede são IDs de VLAN aos quais essas portas podem ser atribuídas. Uma única porta pode ser atribuída a mais de uma VLAN.
Um endereço ZeroTier se parece com 8056c2e21c
e um ID de rede se parece com 8056c2e21c000001
. Os IDs de rede são compostos pelo endereço ZeroTier do controlador primário dessa rede e um ID arbitrário de 24 bits que identifica a rede neste controlador. Os controladores de rede são aproximadamente análogos aos controladores SDN em protocolos SDN como OpenFlow, embora, como acontece com a analogia entre VXLAN e VL2, isso não deva ser interpretado como implicando que os protocolos ou design são os mesmos. Você pode usar nossos controladores hospedados SaaS convenientes e baratos em my.zerotier.com ou executar seu próprio controlador se não se importar em mexer nos arquivos de configuração JSON ou escrever scripts para fazer isso.
O caminho base contém o ponto de entrada principal do serviço ZeroTier One ( one.cpp
), código de autoteste, makefiles, etc.
artwork/
: ícones, logotipos, etc.attic/
: material antigo e código experimental que queremos manter para referência.controller/
: a implementação do controlador de rede de referência, que é criada e incluída por padrão em destinos de compilação de desktop e servidor.debian/
: arquivos para construção de pacotes Debian no Linux.doc/
: páginas de manual e outras documentações.ext/
: bibliotecas de terceiros, binários que enviamos por conveniência em algumas plataformas (Mac e Windows) e arquivos de suporte à instalação.include/
: inclui arquivos para o núcleo ZeroTier.java/
: um wrapper JNI usado com nosso aplicativo móvel Android. (Todo o aplicativo Android não é de código aberto, mas poderá sê-lo no futuro.)node/
: o núcleo do switch Ethernet virtual ZeroTier, que foi projetado para ser totalmente separado do resto do código e capaz de ser construído como uma biblioteca independente do sistema operacional. Nota para desenvolvedores: não use recursos do C++ 11 aqui, pois queremos que isso seja construído em plataformas incorporadas antigas que não possuem suporte ao C++ 11. C++ 11 pode ser usado em outro lugar.osdep/
: código para suporte e integração com sistemas operacionais, incluindo coisas específicas da plataforma construídas apenas para determinados alvos.rule-compiler/
: compilador de linguagem de regras JavaScript para definir regras em nível de rede.service/
: o serviço ZeroTier One, que envolve o núcleo ZeroTier e fornece conectividade semelhante a VPN para redes virtuais para desktops, laptops, servidores, VMs e contêineres.windows/
: arquivos de solução do Visual Studio, código de serviço do Windows e a interface do usuário do aplicativo da barra de tarefas do Windows.zeroidc/
: implementação OIDC usada pelo serviço ZeroTier para fazer login em redes habilitadas para SSO. (Esta parte está escrita em Rust, e mais Rust aparecerão neste repositório no futuro.) Por favor, retire as solicitações do branch dev
.
Os lançamentos são feitos mesclando dev
em main
e, em seguida, marcando e fazendo compilações.
Para construir em Mac e Linux basta digitar make
. No FreeBSD e OpenBSD, gmake
(GNU make) é necessário e pode ser instalado a partir de pacotes ou ports. Para Windows existe uma solução Visual Studio em windows/
.
gmake
para construir.binutils
é necessário. Digite pkg install binutils
para instalar./dev/tap0
até /dev/tap3
).gmake
para construir. Digitar make selftest
criará um binário zerotier-selftest que testa a unidade vários componentes internos e relata alguns aspectos do ambiente de construção. É uma boa ideia tentar isso em novas plataformas ou arquiteturas.
Executar zerotier-one com a opção -h
mostrará ajuda.
No Linux e BSD, se você compilou a partir do código-fonte, poderá iniciar o serviço com:
sudo ./zerotier-one -d
Na maioria das distribuições, macOS e Windows, o instalador iniciará o serviço e o configurará para iniciar na inicialização.
Uma pasta pessoal para o seu sistema será criada automaticamente.
O serviço é controlado pela API JSON, que por padrão está disponível em 127.0.0.1:9993
. Ele também escuta em 0.0.0.0:9993
, que só pode ser usado se allowManagementFrom
estiver configurado corretamente em local.conf
. Incluímos um utilitário de linha de comando zerotier-cli para fazer chamadas de API para coisas padrão, como entrar e sair de redes. O arquivo authtoken.secret na pasta inicial contém o token secreto para acessar esta API. Consulte service/README.md para documentação da API.
É aqui que ficam as pastas iniciais (por padrão) em cada sistema operacional:
/var/lib/zerotier-one
/var/db/zerotier-one
/Library/Application Support/ZeroTier/One
ProgramDataZeroTierOne
(Esse é o padrão. A pasta base 'dados do aplicativo compartilhado' pode ser diferente se o Windows estiver instalado com uma atribuição de letra de unidade ou layout não padrão.)Para a maioria dos usuários, simplesmente funciona.
Se você estiver executando um firewall de sistema local, recomendamos adicionar regras que permitam nível zero. Se você instalou binários para Windows, isso deverá ser feito automaticamente. Outras plataformas podem exigir a edição manual de regras de firewall locais, dependendo da sua configuração.
Consulte o site de documentação para obter mais informações.
O firewall do Mac pode ser encontrado em “Segurança” nas Preferências do Sistema. O Linux possui uma variedade de sistemas e ferramentas de configuração de firewall.
No CentOS, verifique /etc/sysconfig/iptables
para regras de IPTables. Para outras distribuições consulte a documentação da sua distribuição. Você também terá que verificar as UIs ou a documentação de aplicativos comerciais de firewall de terceiros, como Little Snitch (Mac), McAfee Firewall Enterprise (Windows), etc., se estiver executando algum deles. Alguns ambientes corporativos podem ter software de firewall gerenciado centralmente, então talvez você também precise entrar em contato com a TI.
Os pares ZeroTier One se localizarão automaticamente e se comunicarão diretamente por meio de uma LAN com fio local se a porta UDP de entrada 9993 estiver aberta . Se essa porta for filtrada, eles não poderão ver os pacotes de anúncios da LAN uns dos outros. Se você estiver enfrentando baixo desempenho entre dispositivos na mesma rede física, verifique as configurações de firewall. Sem a localização automática da LAN, os pares devem tentar a travessia NAT de "loopback", que às vezes falha e, em qualquer caso, exige que cada pacote atravesse seu roteador externo duas vezes.
Os usuários atrás de certos tipos de firewalls e dispositivos NAT "simétricos" podem não conseguir se conectar diretamente a peers externos. ZeroTier tem suporte limitado para previsão de portas e tentará atravessar NATs simétricos, mas isso nem sempre funciona. Se a conectividade P2P falhar, você estará devolvendo pacotes UDP de nossos servidores de retransmissão, resultando em desempenho mais lento. Alguns roteadores NAT possuem um modo NAT configurável e configurá-lo para "cone completo" eliminará esse problema. Se você fizer isso, também poderá ver uma melhoria mágica em coisas como telefones VoIP, Skype, BitTorrent, WebRTC, certos jogos, etc., já que todos eles usam técnicas de passagem NAT semelhantes às nossas.
Se um firewall entre você e a Internet bloquear o tráfego UDP do ZeroTier, você retornará ao tunelamento TCP de último recurso para servidores raiz pela porta 443 (representação https). Isso funcionará em quase qualquer lugar, mas é muito lento em comparação com UDP ou conectividade ponto a ponto direta.
Ajuda adicional pode ser encontrada em nossa base de conhecimento.
As métricas do Prometheus estão disponíveis no endpoint da API /metrics
. Este endpoint é protegido por uma chave de API armazenada em metricstoken.secret
para evitar vazamento indesejado de informações. As informações que podem ser obtidas das métricas incluem redes unidas e pares com os quais sua instância está se comunicando.
O controle de acesso é feito por meio da própria interface de controle ZeroTier e metricstoken.secret
. Isso pode ser enviado como um token de autenticação do portador, por meio do campo de cabeçalho HTTP X-ZT1-Auth
ou anexado ao URL como ?auth=<token>
. Você pode ver as métricas atuais via cURL
com o seguinte comando:
// 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
Para configurar um trabalho de raspagem no Prometheus na máquina em que o ZeroTier está sendo executado, adicione isto ao seu 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
Se nenhum desses métodos for desejável, provavelmente será possível distribuir métricas por meio do Prometheus Proxy ou de alguma outra ferramenta. Nota: Não testamos isso internamente, mas provavelmente funcionará com a configuração correta.
As métricas também estão disponíveis em disco no diretório de trabalho do ZeroTier:
//Linux /var/lib/zerotier-one/metrics.prom
//macOS /Library/Application Support/ZeroTier/One/metrics.prom
//Windows C:ProgramDataZeroTierOnemetrics.prom
Nome da métrica | Etiquetas | Tipo de métrica | Descrição |
---|---|---|---|
zt_packet | tipo_pacote, direção | Contador | Contagens de tipo de pacote ZeroTier |
zt_packet_error | tipo_erro, direção | Contador | Erros de pacote ZeroTier |
zt_data | protocolo, direção | Contador | número de bytes que ZeroTier transmitiu ou recebeu |
zt_num_networks | Medidor | número de redes às quais esta instância está associada | |
zt_network_multicast_groups_subscribed | ID_da_rede | Medidor | número de redes de grupos multicast assinadas |
zt_network_packets | network_id, direção | Contador | número de pacotes de entrada/saída por rede |
zt_peer_latency | node_id | Histograma | latência de pares (ms) |
zt_peer_path_count | node_id, status | Medidor | número de caminhos para peer |
zt_peer_packets | node_id, direção | Contador | número de pacotes de/para um par |
zt_peer_packet_errors | node_id | Contador | número de erros de pacotes recebidos de um par |
Se houver outras métricas que você gostaria de ver rastreadas, pergunte-nos em um problema ou envie-nos uma solicitação pull!
Existe um servidor de arquivos http estático adequado para hospedar aplicativos de página única em http://localhost:9993/app/
Use zerotier-cli info -j
para encontrar o homeDir do seu serviço 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
Então visite http://localhost:9993/app/app1/ e http://localhost:9993/app/appB/
Não existem solicitações para caminhos que retornam a raiz do aplicativo index.html, como é habitual para SPAs. Se desejar, você pode escrever algum javascript que se comunique com a API do serviço ou do controlador.