Samma IKEv2-identitet på två iPhones? De ansluter växelvis
En profil kopierad till två enheter ger gatewayen en peer i stället för två. Se peer-tabellen fyllas och tömmas, och utfärda sedan ett värde per enhet.
Två telefoner, en profil och ett mönster som verkar övernaturligt tills någon tittar på gatewayen. En enhet håller tunneln, den andra ansluter och den första tappar den inom sekunder. Den första återansluter och den andra faller. Batterisparande, Wi-Fi-roaming och operatörens NAT får skulden, medan den verkliga orsaken sitter i ett textfält som kopierades med allt annat. IKEv2 identifierar en peer med ett namn, och båda telefonerna visar samma namn.
Identiteten är nyckeln som servern lagrar dig under
Inuti ett IKEv2-utbyte anger varje sida vem den är: initiativtagaren skickar en lokal identifierare, svararen svarar med sin egen och svararen kontrollerar också identiteten som initiativtagaren hävdade mot policyn. Gatewayen håller sitt tillstånd per identitet i stället för per enhet, eftersom en enhet inte är något den kan se. Två telefoner med en identifierare kommer därför som en peer, och det andra utbytet måste skriva över det första. Problemet syns bara medan båda används, och därför återskapar ett test med en telefon det aldrig.
Inget av detta är en bugg i klienten. Klienten skickade exakt det profilen sa åt den att skicka.
Hur kollisionen ser ut från gatewayen
Titta på peer-listan medan båda telefonerna är vakna och i bruk. En kollision visar en enda post vars adress ändras när telefonerna byter, och räknaren för aktiva sessioner når aldrig två. Nedtagning på begäran ser annorlunda ut, och att skilja dem kräver en observation i stället för en teori.
| Observation | Shared identity | Idle teardown |
|---|---|---|
| Peer entries while both are awake | One, with a changing address | One per phone, or none |
| What triggers the drop | The other device connecting | Time without traffic |
| What restores it | The other device disconnecting | Any app needing the tunnel |
Skriv ned båda händelserna med tidsstämplar medan det händer. Ett avbrott som sammanfaller med den andra enhetens anslutning pekar på identifieraren, och ett avbrott som kommer ett inaktivt intervall efter det sista paketet pekar på en timer.
Varifrån dubbletterna kommer
Att exportera en fungerande konfiguration och bara redigera serveradressen ger en andra fil där den första filens identitet fortfarande finns kvar. Det är den vanliga vägen till det här felet, och det händer oftast vid snabb introduktion av en liten grupp.
Fältnamnen gör det lätt att missa. Den fjärran identifieraren namnger gatewayen som telefonen förväntar sig, och att kopiera den är korrekt. Den lokala identifieraren namnger den här enheten för gatewayen, och att kopiera det värdet är hela problemet.
Utfärda ett värde per enhet
Använd något som är unikt för enheten och stabilt under hela dess livstid, som enhetsidentifieraren från inventariet eller ett värde som ditt hanteringssystem genererar per registrering. En avdelningsetikett, ett delat tjänstekontonamn eller användarens e-postadress kolliderar alla så snart personen har en andra enhet.
Generera nyttolasten per enhet i stället för att distribuera en fil. Notera vilket värde som hör till vilken enhet, så att ett byte inte återställer den gamla profilen och skickar den nya telefonen rakt tillbaka i samma kollision.
Kontrollera även serversidan. En gateway som mappar identiteten till en fast tunneladress kan fortfarande kollidera när två olika identifierare får samma tilldelning, så bekräfta att poolen har plats och att tilldelningarna inte är låsta per användare.
Verifiera med båda telefonerna vakna
Anslut den första, nå en privat resurs, anslut sedan den andra och låt båda vara inaktiva i en minut. Båda sessionerna ska bestå och peer-listan ska visa två identiteter. Lås och lås upp varje telefon för att bekräfta att inaktivitetsfallet fortfarande beter sig korrekt.
Om en enskild session fortfarande faller en gång om dagen utan att något annat ansluter, är identiteten inte längre den misstänkta. Gå vidare till inaktiva timers och serverns sessionsgränser i stället för att redigera profilen igen.