L’unità è rossa, l’interfaccia esiste e il tunnel funziona in gran parte, che è la combinazione più confusa possibile. La configurazione è una sequenza: prima si crea l’interfaccia, poi seguono indirizzi, rotte, impostazioni del resolver e qualsiasi comando hook. Un fallimento al quarto passo lascia i primi tre al loro posto, quindi il nome dell’interfaccia è prova che l’avvio è iniziato, non che è terminato. Un solo fatto in più avrebbe risparmiato la confusione: il passo che ha fallito.

Lo stato parziale è il fallimento normale

Quel comportamento è da attendersi invece che da trattare come corruzione. L’interfaccia è la parte più economica della configurazione e la più facile da lasciare indietro, ed è anche la parte che fa sembrare la macchina mezzo funzionante.

Ciò che non esiste ancora è tutto quello che è venuto dopo il passo fallito. Se il fallimento è stato nella fase del resolver, gli indirizzi e le rotte ci sono e il DNS no. Se è stata una rotta, il tunnel ha un indirizzo e nessun percorso che lo attraversi.

La conseguenza è una macchina che risponde ad alcune prove e fallisce in altre, ed è per questo che le persone concludono che il servizio lampeggia quando in realtà non è mai partito correttamente. Un servizio che non è mai terminato non può lampeggiare. Può solo fallire ripetutamente per lo stesso motivo.

Trova il primo passo che fallisce

Leggi il journal dell’unità invece del solo stato attuale, e leggilo dall’inizio dell’esecuzione fallita. L’ultima riga ti dice il codice di uscita; il primo errore ti dice cosa riparare.

Questi comandi stampano lo stato dell’unità, il journal di avvio di quell’unità e lo stato vivo del tunnel:

systemctl status wg-quick@wg0
journalctl -u wg-quick@wg0 -b --no-pager | tail -40
wg show
ip -4 addr show dev wg0

Un errore del resolver, una rotta che esiste già, un hook uscito con codice diverso da zero e un fallimento di analisi della configurazione compaiono tutti in quella finestra, e ognuno nomina il proprio componente. Indovinare solo dallo stato dell’interfaccia ignora tutte queste informazioni.

Tre condizioni che decidono la riparazione

Decidi se stai ripulendo, riparando sul posto o rimuovendo l’unità dal percorso di avvio, e deciderlo prima di digitare qualsiasi cosa.

Se l’interfaccia è rotta ma la configurazione è corretta, ripulisci e ricomincia. Se la configurazione è sbagliata, correggila e ripulisci comunque prima, perché avviare un secondo gestore sopra uno stato parziale produce due proprietari per una sola interfaccia. Se il fallimento è un componente di sistema mancante, come un assistente del resolver che la macchina non ha, installa o rimuovi la dipendenza di proposito invece di modificare l’unità finché non smette di lamentarsi.

Quei tre casi coprono la maggior parte di ciò che sembra un’unità rossa misteriosa. La domanda che distingue è se lo stesso fallimento si verificherebbe su una macchina con stato pulito, e la risposta di solito viene dalla prima riga di errore.

Ripulisci prima di riprovare

Un nuovo tentativo sopra uno stato esistente può fallire per un motivo nuovo e nascondere quello originale. Porta giù l’interfaccia con lo stesso strumento che l’ha creata, poi conferma che non è rimasto nulla.

Non eliminare interfacce non correlate e non reimpostare lo stack di rete dell’host. Entrambe sono azioni grandi per riparare un oggetto piccolo, e trasformano un singolo tunnel fallito in una macchina le cui altre connessioni vanno ristabilite. L’ambito corretto è una interfaccia e l’unità che la possiede. Qualcosa di più ampio richiede un motivo scritto prima che accada.

Dimostra il tunnel, non l’unità

Un’unità verde significa che la sequenza di avvio è uscita con zero. Non significa che un pacchetto abbia raggiunto l’altro lato, né che il resolver sia stato impostato come volevi.

Invia una richiesta attraverso il tunnel e leggi lo stato che l’ha prodotta:

systemctl is-active wg-quick@wg0
wg show wg0 latest-handshakes
ping -c 3 10.63.0.1
resolvectl query internal.example.net

Una stretta di mano senza risposta ti dice comunque che il tunnel si è formato e che il lato remoto è silenzioso, che è un problema diverso da un’unità che non è mai partita. Tieni lo stato dell’unità, la stretta di mano e il risultato della richiesta in un solo record, perché falliscono in modo indipendente e solo la combinazione descrive il sistema.

Articoli correlati