Podvojeni paketi IKE: poiščite manjkajoči prehod
Ponovljena zahteva IKE je dogodek časovnika, ne diagnoza. Zgradite eno verigo dokazov od pobudnika do odgovora, s pravilnimi identifikatorji različice.
Dnevnik prikazuje isto zahtevo IKE dvakrat, nekdo pokaže na mobilno povezavo in zahtevek se zapre s ugibanjem. To ugibanje je mit: ponovljen paket je opažanje o eni izmenjavi, ne diagnoza povezave. Ponovno pošiljanje je običajno vedenje z lastnimi pravili in se pojavi na zdravih poteh vedno, ko je odgovor počasen. Sledite odgovoru, preden obtožite vmesnik.
Mit: ponovljena zahteva dokazuje izgubo na eni povezavi
Dve različni stvari ustvarita dvojnik in nobena ne imenuje krivca. Prosilec lahko zahtevo ponovi, ker ni prejel odgovora, ali lahko točka zajema prikaže isti paket dvakrat zaradi tega, kjer je priključena na sklad. Sonda, ki vidi vhod in izhod na istem gostitelju, bo z veseljem zabeležila en paket kot dva, in operater, ki bere ta dnevnik, ne more razlikovati brez identifikatorjev izmenjave. Obravnavajte dvojnik kot dogodek časovnika, dokler ne morete reči, katerega od dveh držite.
Dve povezavi poslabšata zmedo, namesto da bi jo izboljšali. Ena vrstica dnevnika imenuje en vmesnik, medtem ko je odgovor morda odšel skozi drugega, zato vmesnik v sporočilu opisuje, kje je bil paket viden, in ne oblike pogovora. Zato je prvo vprašanje, katero izmenjavo gledate, in ne, katera povezava je okvarjena.
Kaj vam ponovno pošiljanje v resnici pove
V IKEv2 ponovno pošiljanje deluje takole: prosilec ponovi zahtevo, ko odgovor ni prispel, odgovarjalec pa lahko znova pošlje svoj shranjeni odgovor, namesto da bi izračunal novega. Identifikatorji sporočil pripadajo tej izmenjavi in prav zato je ponovljena zahteva z istim identifikatorjem prepoznavna kot delo protokola in ne kot nov poskus. Začetni poskus za korelacijo pogosto potrebuje več kot naslov vira ali SPI pobudnika, zato lastni zapis izmenjave platforme premaga seznam paketov. IKEv1 sledi drugim pravilom z drugimi identifikatorji, opozorilo dobavitelja o podvojenem prvem paketu pa ne pomeni istega v vseh različicah.
Torej časovni žig ponovnega pošiljanja pove, da je časovnik potekel. Ne pove, kateri skok je bil počasen, in zagotovo ne pove, da je kriv operater. To so ločene trditve in v zahtevku je uporabna le druga.
Praktična posledica je, da izmenjavo zabeležite, preden sklepate. Zapišite lokalni naslov prejema, pot odgovora, ki jo je izbrala politika, par nasprotne strani in identifikatorje izmenjave na enem mestu, ker vsak od njih odgovarja na drugo vprašanje, ko se zapis bere pozneje.
Štiri opazovalne točke kot ena veriga
O izmenjavi razmišljajte kot o štirih členih verige, ne kot o štirih ločenih mestih za ogled. Člen nosi dokaz ali ostane neznan, veriga pa je le toliko informativna, kolikor je njen najšibkejši zabeleženi člen. Spodnja tabela je popis: kaj lahko vsak položaj ugotovi in kaj pusti nedotaknjeno.
| Položaj | Dokaz, ki ga lahko zagotovi | Kaj pusti odprto |
|---|---|---|
| Pobudnik pošlje | Zahteva je zapustila tega gostitelja | Ali je dosegla nasprotno stran |
| Odgovarjalec prejme | Zahteva je prispela | Ali je bil ustvarjen odgovor |
| Odgovarjalec pošlje | Odgovor je zapustil prehod | Ali je sledil predvideni poti |
| Pobudnik prejme | Izmenjava je bila dokončana | Ali je politika sprejela rezultat |
Verigo izpolnite le tam, kjer imate dostop, preostanek pa označite kot neznan, namesto da bi ga izpeljali. Kavelj, ki beleži pakete na enem stroju, ne pove nič o tem, kaj je prejel oddaljeni stroj, in vrstica dnevnika, da je bila zahteva videna, ni dokaz, da je kdaj odšel odgovor. Poštene vrzeli so bolj uporabne kot popoln videz zapisa, zgrajenega iz ugibanj.
Poiščite prvi manjkajoči prehod
Prehodite verigo od pobudnika navzven in se ustavite pri prvem členu brez dokaza. Če prehod nikoli ne zabeleži zahteve, je napaka na poti pred njim. Ko prehod znova in znova beleži isto zahtevo, odjemalec pa nikoli ne zabeleži odgovora, je sumljiva povratna smer: naslov vira, prevajanje in filtriranje na vsaki meji, ki jo nadzorujete. Če odgovor prispe in odjemalec vseeno ne napreduje, je vprašanje zapustilo transport in postalo politika ali stanje.
Med primerjanjem držite nasprotno stran in protokol nespremenjena in ne pozabite, da zakasnitev, izguba, politika in stanje vsak ustvarijo drugo časovnico. Mobilno omrežje ni samodejno vzrok in fiksna linija ni samodejno dovolj zanesljiva za vsako zahtevo. Zajemite obe smeri, dokler je izmenjava živa:
tcpdump -ni any -vv 'udp port 500 or udp port 4500'
Ko se dostop ustavi pred oddaljenim koncem, zapis še vedno pomaga, če pove, kje se ustavi. Zajem samo na pobudniku lahko pokaže zahtevo, ki odhaja, in nobenega odgovora, ki prihaja, kar zoži napako na vse po tem kavlju, ne da bi se pretvarjali, da vemo, kateri skok jo je spustil. Oddaljene člene označite kot neznane in pustite naslednji osebi z dostopom, da jih izpolni. Tako zapisano ostane pošteno in še vedno kratko.
Primerjajte, preden karkoli spremenite. Ponavljanje iste zahteve proti isti nasprotni strani z istim protokolom ohranja spremenljivke preštete, medtem ko ponastavitev, obnovitev ključa ali sprememba politike med zajemi uniči primerjavo. Če je sprememba neizogibna, zajemite takoj po njej, da pred in po še vedno opisujeta isto izmenjavo.
Kaj pove uporabno poročilo
Poročilo, vredno ukrepanja, poveže eno zahtevo z njenim odgovorom in imenuje prvi korak, za katerim ni dokaza. Ta stavek preživi branje teden dni pozneje s strani inženirja, ki ga ni bilo tam, in da naslednji osebi izhodišče namesto osumljenca.
Nikoli ne oslabite preverjanj identitete in ne razširite dovoljenega nabora protokolov samo zato, da bi preverili teorijo ponovnega pošiljanja. Shranite izvirne pakete in zapise dogodkov pred vsako ponastavitvijo, ker ponastavitev uniči natanko gradivo, ki ste ga nameravali zbrati, in izbriše časovnico, ki je kazala, kje se je izmenjava ustavila.
Mit je, da en dvojnik dokazuje krivdo operaterja. Resnica je, da en dvojnik dokazuje, da je časovnik potekel, in odgovor živi na poti odgovora.