L’handshake è fresco in wg show, l’endpoint è corretto, le chiavi non sono mai cambiate — e ping dice ancora che non c’è rotta verso il peer. Avete cambiato la sottorete del tunnel un’ora fa. Quel sintomo è la firma di una discrepanza di prefisso e non di un problema di chiavi: WireGuard ha completato l’handshake e poi ha scartato i dati perché un indirizzo di origine non corrisponde più a ciò che il peer ricevente accetterà. Ci sono due modi sensati per attuare un cambio di sottorete, e falliscono in punti diversi.

Due modi per attuare il cambio, e quanto costa ciascuno

L’opzione A è la rinumerazione sul posto: modificate l’indirizzo dell’interfaccia, gli intervalli dei peer, le rotte e ogni copia della configurazione, poi ricaricate. L’opzione B è costruire una seconda interfaccia sul nuovo prefisso accanto a quella vecchia, spostare i peer e rimuovere la vecchia interfaccia quando il traffico si è davvero spostato.

A: renumber in placeB: parallel interface
DowntimeThe reload window, per hostNone if peers are added to both
RollbackRe-apply the previous filesPoint peers back at the old interface
RiskHalf-applied change: new address, old rangesTwo live interfaces with overlapping intent
EffortSmall, if the deployment has one ownerHigher, and needs a cleanup step
FitsTwo or three peers you controlMany peers, remote sites, or no maintenance window

È lo stato applicato a metà che rende pericolosa l’opzione A, perché non sembra rotto. L’interfaccia sale, l’handshake riesce e solo il percorso dei dati fallisce. L’opzione B costa più lavoro ma tiene vivo un percorso funzionante mentre trovate ogni riferimento.

Cosa deve muoversi insieme dalla vostra parte

Quattro cose sull’host locale descrivono la stessa sottorete, e cambiare l’una è cambiare tutte: l’indirizzo dell’interfaccia, l’AllowedIPs di ogni peer, la rotta che il sistema usa per quelle destinazioni e qualunque cosa il gestore installi per voi. Con wg-quick, le ultime due vengono generate dalla configurazione ogni volta che l’interfaccia sale, quindi una copia obsoleta reinstalla in silenzio il prefisso vecchio.

Confrontate ciò che è configurato con ciò che è vivo invece di fidarvi di uno dei due:

wg show
wg showconf wg0
ip addr show wg0
ip route get 10.90.0.5

La ricerca della rotta è il passo che la gente salta. Risponde a cosa farebbe davvero il kernel per una destinazione, compresa una rotta più specifica lasciata da un gestore o da un runtime di container. Se segnala un’interfaccia diversa da quella del tunnel, la configurazione non è il problema.

Per un’interfaccia in esecuzione, applicate il file modificato senza smontare il tunnel:

wg syncconf wg0 <(wg-quick strip wg0)

Questo aggiorna peer e intervalli sul posto. Non aggiorna l’indirizzo dell’interfaccia né le rotte, perché non sono impostazioni di WireGuard — quindi una rinumerazione richiede comunque di ricreare l’interfaccia o di cambiare l’indirizzo con ip, e poi di ricontrollare il routing.

Cosa deve muoversi insieme all’estremità remota

È qui che un cambio di sottorete di solito muore. AllowedIPs non è solo un suggerimento di routing; è anche l’elenco degli indirizzi di origine che un peer può presentare. Quando rinumera i client e lascia l’AllowedIPs del server sul prefisso vecchio, il server accetta l’handshake, riceve i pacchetti cifrati e li scarta perché l’origine interna non corrisponde a nessun intervallo che associa a quel peer. Nessun errore viene registrato e il client vede un timeout.

Aggiornate quindi il lato ricevente con intenzione: la voce del peer sul server deve elencare il nuovo prefisso del client, la rotta di ritorno del server deve puntare al tunnel per quel prefisso, e qualsiasi rete a valle dietro il server deve apprendere il nuovo percorso. Anche la politica del firewall che nominava l’intervallo vecchio richiede lo stesso trattamento, e così qualunque cosa faccia selezione in base all’origine.

La diagnostica che separa i due guasti è economica. Un handshake recente senza dati significa che il tunnel è su e che l’indirizzamento interno non concorda. Nessun handshake significa che state guardando raggiungibilità o chiavi. Non ruotate le chiavi per un problema di prefisso; azzera l’unica cosa che funzionava.

Copie obsolete che sopravvivono alla vostra modifica

Modificare un file non è lo stesso che cambiare il sistema in esecuzione, e le copie sono più numerose di quanto la gente si aspetti: l’unità o il gestore che possiede l’interfaccia, un secondo profilo con lo stesso nome in un’altra directory, un container con la configurazione incorporata in un’immagine, un’interfaccia del router con la propria versione modificata e un’app client che reimporta un tunnel salvato all’avvio. Ognuna può ripristinare il prefisso vecchio dopo che la vostra modifica sembra completa.

Anche i nomi viaggiano. Se la rotta numerica funziona ma il nome host fallisce, un record DNS interno o la configurazione di un servizio punta ancora al vecchio indirizzo del tunnel. Correggete il riferimento invece di allargare ogni intervallo dei peer, cosa che coprirebbe il vero problema e ingrandirebbe allo stesso tempo l’ACL di origine.

Tenete aperto un percorso di ripristino mentre lavorate: un secondo modo per entrare sull’host, una console seriale o un rollback pianificato dei file di configurazione. Un cambio di tunnel che vi chiude fuori dalla macchina che state cambiando è il modo più comune in cui questo compito diventa una serata.

Scegliere tra i due, e verificare il taglio

Scegliete A quando possedete ogni peer, il numero è piccolo e un’interruzione breve è accettabile. Scegliete B quando i peer sono mani remote che non controllate, quando un collegamento tra sedi deve restare attivo o quando non potete garantire che ogni copia venga aggiornata in un solo passaggio. In quel caso aggiungete il nuovo prefisso a entrambe le interfacce, spostate i peer uno alla volta, osservate il traffico sulla nuova e solo allora rimuovete la vecchia interfaccia e le sue rotte.

Con entrambe le opzioni, il cambio è fatto quando passano quattro controlli: l’handshake è recente, la ricerca della rotta per una destinazione del nuovo prefisso nomina il tunnel, un carico di qualche centinaio di byte passa in entrambe le direzioni, e lo stesso vale dopo un riavvio dell’host o del gestore. Il manuale di wg(8) è il riferimento su cosa significhi AllowedIPs in ciascuna direzione, e vale la pena rileggerlo prima di allargare un intervallo per far sparire un sintomo.

  • Handshake recente e nessun dato: guardate l’AllowedIPs sul ricevente prima di toccare le chiavi.
  • La ricerca della rotta indica l’interfaccia sbagliata: la rotta la possiede un gestore o un container, non il vostro file.
  • Indirizzo numerico a posto e nome host rotto: un riferimento vecchio, non un loop di routing.
  • Il cambio è completo solo quando, dopo un riavvio, si usa ancora il nuovo prefisso.

Articoli correlati