Loki näyttää saman IKE-pyynnön kahdesti, joku osoittaa mobiililinkkiä ja tiketti suljetaan arvauksella. Se arvaus on myytti: toistuva paketti on havainto yhdestä vaihdosta, ei linkin diagnoosi. Uudelleenlähetys on normaalia käyttäytymistä omilla säännöillään, ja se näkyy terveillä poluilla aina, kun vastaus on hidas. Seuraa vastausta ennen kuin syytät rajapintaa.

Myytti: toistuva pyyntö todistaa häviön yhdellä linkillä

Kaksi eri asiaa tuottaa kaksoiskappaleen, eikä kumpikaan nimeä syyllistä. Pyytäjä voi toistaa pyynnön, koska vastausta ei tullut, tai kaappauspiste voi näyttää saman paketin kahdesti sen mukaan, mihin se on pinossa kiinnitetty. Naputus, joka näkee saapuvan ja lähtevän liikenteen samalla isännällä, kirjaa mielellään yhden paketin kahdeksi, eikä lokia lukeva operaattori voi erottaa niitä ilman vaihdon tunnisteita. Kohtele kaksoiskappaletta ajastintapahtumana, kunnes pystyt sanomaan, kumman kahdesta pidät kädessäsi.

Kaksi uplinkia pahentaa sekaannusta parantamisen sijaan. Yksi lokirivi nimeää yhden rajapinnan, kun taas vastaus on voinut lähteä toisen kautta, joten viestin rajapinta kuvaa, missä paketti nähtiin, ei keskustelun muotoa. Siksi ensimmäinen kysymys on, mitä vaihtoa katsot, ei mikä linkki on viallinen.

Mitä uudelleenlähetys itse asiassa kertoo

IKEv2:ssa uudelleenlähetys toimii näin: pyytäjä toistaa pyynnön, kun vastausta ei ole saapunut, ja vastaaja voi lähettää välimuistiin tallennetun vastauksensa uudelleen laskematta uutta. Viestitunnisteet kuuluvat siihen vaihtoon, ja juuri se tekee samalla tunnisteella toistuvan pyynnön tunnistettavaksi protokollan työksi eikä uudeksi yritykseksi. Alkuyritys tarvitsee korrelointiin usein enemmän kuin lähdeosoitteen tai aloittajan SPI:n, joten alustan oma vaihtotietue on parempi kuin pakettiluettelo. IKEv1 noudattaa eri sääntöjä eri tunnisteilla, eikä toimittajan varoitus kaksoiskappaleesta ensimmäisessä paketissa tarkoita samaa kaikissa versioissa.

Uudelleenlähetyksen aikaleima siis kertoo, että ajastin vanheni. Se ei kerro, mikä hyppy oli hidas, eikä varmasti kerro, että operaattori on syyllinen. Ne ovat erillisiä väitteitä, ja vain jälkimmäinen on hyödyllinen tiketissä.

Käytännön seuraus on kirjata vaihto ennen johtopäätöstä. Merkitse paikallinen vastaanotto-osoite, käytännön valitsema vastauspolku, vastapuolen monikko ja vaihdon tunnisteet yhteen paikkaan, koska jokainen niistä vastaa eri kysymykseen, kun tietuetta luetaan myöhemmin.

Neljä havaintopistettä yhtenä ketjuna

Ajattele vaihtoa ketjun neljänä lenkkinä, ei neljänä erillisenä katselupaikkana. Lenkki pitää todisteen tai jää tuntemattomaksi, ja ketju on vain niin informatiivinen kuin sen heikoin kirjattu lenkki. Alla oleva taulukko on luettelo: mitä kukin sijainti voi todeta ja mitä se jättää koskematta.

SijaintiTodiste, jonka se voi antaaMitä se jättää avoimeksi
Aloittaja lähettääPyyntö lähti tältä isännältäPääsikö se vastapuolelle
Vastaaja vastaanottaaPyyntö saapuiTuotettiinko vastaus
Vastaaja lähettääVastaus lähti yhdyskäytävältäNoudattiko se aiottua polkua
Aloittaja vastaanottaaVaihto valmistuiHyväksyikö käytäntö tuloksen

Täytä ketjua vain siellä, missä sinulla on pääsy, ja merkitse loput tuntemattomiksi sen sijaan että päättelet ne. Koukku, joka tallentaa paketteja yhdellä koneella, ei kerro mitään siitä, mitä kaukainen kone vastaanotti, eikä lokirivi siitä, että pyyntö nähtiin, ole todiste siitä, että vastaus koskaan lähti. Rehelliset aukot ovat hyödyllisempiä kuin arvauksista rakennettu täydelliseltä näyttävä tietue.

Löydä ensimmäinen puuttuva siirtymä

Kävele ketju aloittajasta ulospäin ja pysähdy ensimmäiseen lenkkiin, jolla ei ole todistetta. Jos yhdyskäytävä ei koskaan kirjaa pyyntöä, vika on sitä edeltävällä polulla. Kun yhdyskäytävä kirjaa saman pyynnön toistuvasti, mutta asiakas ei koskaan kirjaa vastausta, epäilyttävä on paluusuunta: lähdeosoite, käännös ja suodatus jokaisella rajoituksella, jota hallitset. Jos vastaus saapuu eikä asiakas silti etene, kysymys on jättänyt kuljetuksen ja muuttunut käytännöksi tai tilaksi.

Pidä vastapuoli ja protokolla kiinteinä vertaillessasi ja muista, että viive, häviö, käytäntö ja tila tuottavat kukin erilaisen aikajanan. Mobiiliverkko ei ole automaattisesti syy, eikä kiinteä linja ole automaattisesti tarpeeksi luotettava kaikkiin vaatimuksiin. Kaappaa molemmat suunnat, kun vaihto on käynnissä:

tcpdump -ni any -vv 'udp port 500 or udp port 4500'

Kun pääsy loppuu ennen kaukaista päätä, tietue auttaa silti, jos se kertoo, mihin se loppuu. Kaappaus vain aloittajalla voi näyttää lähtevän pyynnön ja saapumattoman vastauksen, mikä kaventaa vian kaikkeen tuon koukun jälkeen teeskentelemättä tietävänsä, mikä hyppy sen pudotti. Merkitse kaukaiset lenkit tuntemattomiksi ja anna seuraavan pääsyn omaavan henkilön täyttää ne. Näin kirjoitettuna tietue pysyy rehellisenä ja silti lyhyenä.

Vertaa ennen kuin muutat mitään. Saman pyynnön toistaminen samalle vastapuolelle samalla protokollalla pitää muuttujat laskettavina, kun taas nollaus, avaimen uusinta tai käytännön muokkaus kaappausten välillä tuhoaa vertailun. Jos muutos on välttämätön, kaappaa heti sen jälkeen, jotta ennen ja jälkeen kuvaavat edelleen samaa vaihtoa.

Mitä hyödyllinen raportti sanoo

Toimimisen arvoinen raportti yhdistää yhden pyynnön sen vastaukseen ja nimeää ensimmäisen vaiheen, jonka takana ei ole todistetta. Se lause kestää lukemisen viikkoa myöhemmin insinöörin toimesta, joka ei ollut paikalla, ja antaa seuraavalle henkilölle aloituspaikan epäillyn sijaan.

Älä koskaan heikennä henkilöllisyyden tarkistuksia äläkä laajenna sallittua protokollajoukkoa vain testataksesi uudelleenlähetysteoriaa. Tallenna alkuperäiset paketit ja tapahtumatietueet ennen mitään nollausta, koska nollaus tuhoaa juuri sen materiaalin, jonka aioit kerätä, ja pyyhkii ajoituksen, joka näytti, mihin vaihto juuttui.

Myytti on, että yksi kaksoiskappale todistaa operaattorin syyllisyyden. Todellisuus on, että yksi kaksoiskappale todistaa ajastimen vanhentuneen, ja vastaus elää vastauspolulla.

Aiheeseen liittyvät artikkelit