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.

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

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.

Relaterade artiklar