ZeroTier mostra il membro come OK, la rete è unita, e non c'è ancora nessun indirizzo da pingare. Questa combinazione sembra un bug ed è di solito una configurazione divisa: approvare un membro è un interruttore, assegnargli un indirizzo è un altro. Una rete può accettare un dispositivo e non assegnargli mai nulla, perché il pool o la modalità di assegnazione non è mai stato configurato.

Leggi entrambi i lati prima di cambiare uno dei due. La risposta è visibile in due punti, e solo uno di essi è sul controller.

Autorizzazione e assegnazione sono interruttori diversi

L'autorizzazione risponde se questo nodo può partecipare alla rete. L'assegnazione degli indirizzi risponde a cosa gli dà la rete una volta che partecipa, e quella risposta viene da un pool di indirizzi più una modalità di assegnazione. Nessuna delle due impostazioni implica l'altra. Una è un permesso e l'altra è un'allocazione.

La configurazione di un controller di solito comprende una rotta gestita, un intervallo di indirizzi e la modalità che decide se si usa l'assegnazione automatica. Copiare un identificatore di rete da un altro ambiente porta l'appartenenza e nulla di quella configurazione.

Per questo un dispositivo può sembrare sano nell'elenco dei membri mentre la sua colonna dell'indirizzo assegnato resta vuota. Il controller lo ha accettato e non ha nulla da dare. Entrambe le affermazioni sono vere allo stesso tempo.

LayerWhat it decidesWhere it is configured
MembershipWhether the node may joinMember authorization on the network
PoolWhich addresses exist to hand outNetwork address range
Assignment modeWhether they are handed out automaticallyNetwork v4/v6 assignment settings

Leggere lo stato effettivo del membro

Chiedi al client cosa ha ricevuto davvero invece di cosa intendeva il controller. L'elenco semplice mostra le colonne di stato e indirizzo, e la forma JSON mostra la configurazione di rete che il client ha applicato, compresi gli indirizzi e le rotte gestite.

zerotier-cli listnetworks
zerotier-cli -j listnetworks | jq '.networks[] | {nwid, status, assignedAddresses}'

Confronta i due output per lo stesso identificatore di rete, non per gli adattatori fisici che compaiono nell'elenco del sistema operativo stesso. Una riga che segnala OK con un insieme di indirizzi vuoto conferma la lacuna di assegnazione e non un guasto di connettività. Leggere la riga sbagliata è l'altra metà di questo errore.

Uno stato ACCESS_DENIED rimanda all'autorizzazione, e quella è un'altra riparazione. Se il comando non riesce affatto a leggere il token di autenticazione locale, il problema sono i permessi locali e non un rifiuto del controller, e la correzione è sulla macchina dove sei seduto.

Quando il client ignora ciò che il controller invia

Il client ha le proprie impostazioni che decidono se la configurazione gestita viene applicata. Un profilo che disattiva indirizzi gestiti, rotte gestite o la gestione della rotta predefinita scarterà ciò che la rete invia, e l'elenco dei membri continuerà a sembrare corretto dal lato del controller.

Quei flag influenzano solo il nodo locale. Cambiarli non altera ciò che ricevono gli altri membri e non ripara un pool che non è mai stato definito.

Quindi la diagnosi ha due rami: o il controller non ha nessun indirizzo da dare, o il client ha rifiutato quello che gli è stato dato. Portano a riparazioni diverse su macchine diverse. L'output JSON li distingue, perché l'indirizzo o è assente dalla configurazione della rete o è presente e manca nello stato applicato del client.

Cosa riparare invece di inventare un indirizzo

Digitare un indirizzo statico arbitrario è la terza opzione tentante e la peggiore. Un indirizzo casuale può entrare in collisione con un altro nodo, trovarsi fuori dalle rotte che la rete propaga o cadere in un intervallo che le regole del firewall trattano diversamente. Nasconde anche il pool mancante a chiunque guardi la rete in seguito. Ripara invece l'assegnazione, e lascia che controller e client concordino il risultato.

Chiedi all'amministratore cosa dovrebbe distribuire la rete, poi verifica che il pool copra l'intervallo previsto e che la modalità di assegnazione sia attiva. Riunisciti dopo la modifica invece di aspettarti che il client arrivi da solo subito a una nuova configurazione.

Quando compare un indirizzo, prova ciò che ti serviva davvero: un peer, un servizio o una sottorete dietro un gateway. Raggiungere una LAN dietro un membro richiede routing e inoltro oltre l'appartenenza, e l'accesso generale a internet richiede un nodo di uscita, quindi un indirizzo funzionante è l'inizio di quella prova e non la fine.

Articoli correlati