Due telefoni, un profilo e uno schema che sembra soprannaturale finché qualcuno non guarda il gateway. Un dispositivo tiene il tunnel, il secondo si connette e il primo lo perde in pochi secondi. Il primo si riconnette e il secondo cade. Si incolpano il risparmio energetico, il roaming Wi-Fi e il NAT dell’operatore, mentre la causa reale sta in un campo di testo copiato insieme a tutto il resto. IKEv2 identifica un peer tramite un nome, e entrambi i telefoni presentano lo stesso.

L’identità è la chiave sotto cui il server ti conserva

All’interno di uno scambio IKEv2 ogni parte dichiara chi è: l’iniziatore invia un identificatore locale, il risponditore risponde con il proprio, e il risponditore verifica anche l’identità dichiarata dall’iniziatore rispetto alla policy. Il gateway conserva il proprio stato per identità anziché per dispositivo, perché un dispositivo non è qualcosa che può vedere. Due telefoni con un solo identificatore arrivano quindi come un solo peer, e il secondo scambio deve sovrascrivere il primo. Il problema compare solo mentre entrambi sono in uso, ed è per questo che un test con un solo telefono non lo riproduce mai.

Niente di tutto ciò è un difetto del client. Il client ha inviato esattamente ciò che il profilo gli diceva di inviare.

Che aspetto ha la collisione dal gateway

Guardate l’elenco dei peer mentre entrambi i telefoni sono svegli e in uso. Una collisione mostra una sola voce il cui indirizzo cambia man mano che i telefoni si alternano, e il contatore delle sessioni attive non arriva mai a due. L’abbattimento su richiesta ha un aspetto diverso, e distinguerli richiede un’osservazione anziché una teoria.

ObservationShared identityIdle teardown
Peer entries while both are awakeOne, with a changing addressOne per phone, or none
What triggers the dropThe other device connectingTime without traffic
What restores itThe other device disconnectingAny app needing the tunnel

Annotate entrambi gli eventi con marche temporali mentre accade. Una caduta che coincide con la connessione dell’altro apparecchio punta all’identificatore, e una caduta che arriva un intervallo di inattività dopo l’ultimo pacchetto punta a un timer.

Da dove vengono i duplicati

Esportare una configurazione funzionante e modificare solo l’indirizzo del server produce un secondo file con l’identità del primo ancora dentro. È il percorso abituale verso questo guasto, e di solito accade durante l’onboarding frettoloso di un piccolo gruppo.

I nomi dei campi rendono facile trascurarlo. L’identificatore remoto nomina il gateway che il telefono si aspetta, e copiarlo è corretto. L’identificatore locale nomina questo apparecchio davanti al gateway, e copiare quel valore è l’intero problema.

Assegnate un valore per dispositivo

Usate qualcosa di unico per l’apparecchio e stabile per tutta la sua vita, come l’identificatore del dispositivo dall’inventario o un valore che il vostro sistema di gestione genera per ogni registrazione. Un’etichetta di reparto, un nome di account di servizio condiviso o l’indirizzo email dell’utente entrano tutti in collisione non appena quella persona ha un secondo dispositivo.

Generate il payload per dispositivo invece di distribuire un solo file. Registrate quale valore appartiene a quale apparecchio, così una sostituzione non ripristina il vecchio profilo e non rimanda il nuovo telefono direttamente nella stessa collisione.

Controllate anche il lato server. Un gateway che mappa l’identità su un indirizzo tunnel fisso può comunque entrare in collisione quando due identificatori diversi ricevono la stessa assegnazione, quindi confermate che il pool abbia spazio e che le assegnazioni non siano fissate per utente.

Verificate con entrambi i telefoni svegli

Collegate il primo, raggiungete una risorsa privata, poi collegate il secondo e lasciate entrambi inattivi per un minuto. Entrambe le sessioni dovrebbero persistere e l’elenco dei peer dovrebbe mostrare due identità. Poi bloccate e sbloccate ogni telefono per confermare che il caso di inattività si comporti ancora correttamente.

Se una singola sessione cade ancora una volta al giorno senza che nulla altro si connetta, l’identità non è più il sospetto. Passate ai timer di inattività e ai limiti di sessione del server invece di modificare di nuovo il profilo.

Articoli correlati