Samme IKEv2-identitet på to iPhones? De kobler til på skift
Én profil kopiert til to enheter gir gatewayen én peer i stedet for to. Se peer-tabellen fylles og tømmes, og utsted deretter en verdi per enhet.
To telefoner, én profil og et mønster som virker overnaturlig til noen ser på gatewayen. Én enhet holder tunnelen, den andre kobler til, og den første mister den innen sekunder. Den første kobler til på nytt, og den andre faller ut. Batterisparing, Wi-Fi-roaming og operatørens NAT får skylden, mens den egentlige årsaken sitter i et tekstfelt som ble kopiert med alt annet. IKEv2 identifiserer en peer ved et navn, og begge telefonene viser det samme.
Identiteten er nøkkelen serveren lagrer deg under
Inne i en IKEv2-utveksling oppgir hver side hvem den er: initiativtakeren sender en lokal identifikator, respondereren svarer med sin egen, og respondereren kontrollerer også identiteten initiativtakeren hevdet, mot policyen. Gatewayen holder tilstanden sin per identitet i stedet for per enhet, fordi en enhet ikke er noe den kan se. To telefoner med én identifikator kommer derfor som én peer, og den andre utvekslingen må overskrive den første. Problemet viser seg bare mens begge er i bruk, og derfor gjenskaper en test med én telefon det aldri.
Ingenting av dette er en feil i klienten. Klienten sendte nøyaktig det profilen ba den sende.
Hvordan kollisjonen ser ut fra gatewayen
Se på peer-listen mens begge telefonene er våkne og i bruk. En kollisjon viser én oppføring der adressen endres når telefonene bytter, og telleren for aktive økter når aldri to. Nedtaking på forespørsel ser annerledes ut, og å skille dem krever én observasjon i stedet for 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 begge hendelsene med tidsstempler mens det skjer. Et brudd som sammenfaller med den andre håndsettets tilkobling peker på identifikatoren, og et brudd som kommer én inaktiv periode etter den siste pakken, peker på en timer.
Hvor duplikatene kommer fra
Å eksportere én fungerende konfigurasjon og bare redigere serveradressen gir en andre fil der den første filens identitet fortsatt er inne. Det er den vanlige veien til denne feilen, og den skjer vanligvis når en liten gruppe tas i bruk i all hast.
Feltnavnene gjør det lett å overse. Den eksterne identifikatoren navngir gatewayen telefonen forventer, og å kopiere den er riktig. Den lokale identifikatoren navngir dette håndsettet overfor gatewayen, og å kopiere den verdien er hele problemet.
Utsted en verdi per enhet
Bruk noe som er unikt for håndsettet og stabilt gjennom hele levetiden, som enhetsidentifikatoren fra inventaret eller en verdi styringssystemet ditt genererer per registrering. En avdelingsetikett, et delt tjenestekontonavn eller brukerens e-postadresse kolliderer alle så snart den personen har en andre enhet.
Generer nyttelasten per enhet i stedet for å distribuere én fil. Noter hvilken verdi som hører til hvilket håndsett, slik at en utskifting ikke gjenoppretter den gamle profilen og sender den nye telefonen rett tilbake i samme kollisjon.
Kontroller serversiden også. En gateway som mapper identiteten til en fast tunneladresse kan fortsatt kollidere når to forskjellige identifikatorer får samme tildeling, så bekreft at poolen har plass og at tildelingene ikke er låst per bruker.
Verifiser med begge telefonene våkne
Koble til den første, nå en privat ressurs, koble deretter til den andre og la begge være inaktive i ett minutt. Begge øktene skal vedvare, og peer-listen skal vise to identiteter. Lås og lås opp hver telefon for å bekrefte at inaktivtilfellet fortsatt oppfører seg riktig.
Hvis én enkelt økt fortsatt faller ut én gang om dagen uten at noe annet kobler til, er ikke identiteten lenger den mistenkte. Gå videre til inaktive timere og serverens øktsgrenser i stedet for å redigere profilen på nytt.