Je hebt de tunnel omhoog gebracht, de herkeysleuteltimer telt af, en beide richtingen lezen nog steeds nul pakketten. Niets in dat getallenpaar zegt dat de peer je tunnel heeft afgewezen: een geïnstalleerde CHILD SA met stille tellers geldt als de normale toestand van een associatie waar nog niets op is gematcht. Het werk is bewijzen dat een pakket had moeten matchen, en dan het punt vinden waar het het pad verliet dat de selectors beschrijven. Doe het één keer, in volgorde, en houd het verzoek identiek tussen de runs.

Wat een nulteller werkelijk bewijst

Een CHILD SA is een selectorpaar plus de sleutels en SPI die verkeer versleutelen dat binnen die bereiken valt. Er een installeren betekent alleen dat beide peers het over die bereiken en de afgeleide sleutels eens zijn; de kernel houdt hem uren vast zonder dat er één pakket aankomt. De vraag is dus nooit of de tunnel bestaat, maar of enig pakket dat je test verstuurde binnen de bereiken viel die de twee peers onderhandelden. Als dat niet gebeurde, blijven de tellers op nul en verloopt de associatie ongebruikt aan het einde van zijn levensduur.

Dat onderscheid verandert wat je eerst onderzoekt. Een afgewezen voorstel, een authenticatiefout, of een stervende IKE SA, komen allemaal in het log en in de SA-lijst naar voren, niet als een stille nul. Een tunnel die netjes onderhandelt en daarna stil blijft, wijst juist op matching, routing of de herkomst van het testverkeer.

Stuur een stroom die je kunt beschrijven voordat je hem stuurt

Kies een bestemming binnen het beschermde subnet en open er een nieuwe verbinding naartoe; een pagina die je een uur geleden laadde kan uit de cache komen, en een gecacht antwoord raakt de tunnel nooit. Schrijf dan vier waarden op terwijl het verzoek nog hypothetisch is: het bronadres dat de toepassing gaat binden, de bestemming, de adresfamilie en de naam of het selectorpaar van het kind dat je volgt. Die registratie is wat een platte teller omzet in een toetsbare bewering.

Het bronadres is de waarde die mensen overslaan, en het is degene die de test het vaakst breekt. Een laptop met een bekabeld adres, een Wi-Fi-adres en een tunneladres kan elk daarvan binden afhankelijk van de routelookup, en slechts één kan binnen het onderhandelde bereik liggen. Gebruik een hulpmiddel waarmee je de bron kunt vastzetten, zoals ping -I 10.1.0.5 10.2.0.9 of curl --interface 10.1.0.5, zodat het pakket niet stilzwijgend een ander adres kan kiezen. Wanneer de vastgezette run de tellers verzet en de niet-vastgezette run niet, heb je een routingprobleem gevonden in plaats van een IPsec-probleem.

Welke getallen je moet lezen, en waar ze wonen

Op Linux drukt ip -s xfrm state elke associatie af met een lifetime current:-regel waarvan het byte- en pakkettotaal alleen bij die SA horen, gevolgd door een stats:-regel voor replay- en fouttellingen. Bij een strongSwan-peer drukt swanctl --list-sas één in-regel en één out-regel per geïnstalleerd kind af, elk eindigend op een byte- en een pakkettelling; de oudere stroke-gereedschappen noemen hetzelfde paar bytes_i en bytes_o. Lees de twee richtingen apart, want degene die plat bleef is de bevinding. Ze bij elkaar optellen verbergt precies de asymmetrie die je zoekt.

Beide weergaven zijn per associatie, dus een herkey installeert een nieuw SPI-paar en je basislijn gaat terug naar nul zonder dat er iets stuk is. Noteer de SPI die je volgt voordat de herkeysleuteltimer afgaat, anders vergelijk je een nieuwe SA met een oud getal. Als uitgaand stijgt terwijl inkomend plat blijft, heeft de selector gematcht en is het antwoord nooit teruggekomen, wat het onderzoek naar de forwarding van de peer en zijn eigen beleid verschuift. De IKEv2-configuratiedocumentatie van strongSwan behandelt de levenscyclus van de kind-SA en de herkey-timing achter die cijfers.

Het observatiepunt is een aparte variabele van de herkomst van het pakket. Een hardware-offload kan de tellers van de associatie ophogen terwijl een software-opname op de interface niets laat zien, omdat geoffloadde pakketten de hook overslaan waar de opname op zit, en ingress kan op dezelfde manier afwijken. Als de twee het oneens zijn, gebruik de tellers om te antwoorden of er iets matchte en de opname om te antwoorden hoe het pakket eruitzag.

Route, selectors en waar het pakket geboren werd

Vergelijk drie dingen naast elkaar: de route die de kernel voor je bestemming kiest, het beleid dat verkeer de tunnel in stuurt, en het selectorpaar dat het kind onderhandelde. ip route get 10.2.0.9 from 10.1.0.5 noemt de interface en bron die de kernel zou gebruiken, wat vaak niet het paar is dat je aannam. ip xfrm policy toont de templates en selectors die lokaal zijn geïnstalleerd, terwijl swanctl --list-sas toont waar de peer mee instemde. Een lookup die het pakket via de fysieke interface naar buiten stuurt, bereikt het beleid helemaal niet, dus de tellers kunnen niet bewegen.

Mismatches komen in verschillende vormen die er vanaf een teller identiek uitzien. Een IPv6-bestemming buiten een IPv4-selector, een bronadres uit het verkeerde subnet en een beleid dat smaller is dan het kind produceren allemaal dezelfde nul. Repareer de smalste oorzaak eerst, want een selector alleen verbreden om een getal te verschuiven verandert wat de tunnel beschermt.

Dan is er de herkomst van het pakket, de val die een gateway voor zijn eigen operator zet. Verkeer dat de gateway zelf genereert wordt tegen output-beleid gematcht, terwijl een pakket dat hij voor een client doorstuurt tegen forward-beleid wordt gematcht, dus een ping vanaf de doos kan slagen op een pad dat geen enkele client ooit neemt.

Eén omkeerbare wijziging en een rapport dat een review overleeft

Wijzig één element, herhaal het identieke verzoek en lees dezelfde tellers. Elke firewallregel wissen of alle selectors tegelijk vervangen zal een getal verzetten en het bewijs vernietigen dat je vertelde waarom. Als de tweede run nog steeds nul toont, heb je één hypothese uitgesloten in plaats van de middag te verspillen.

Schrijf de bevinding op in een vorm die iemand anders kan reproduceren: kindnaam, geaccepteerde bereiken, de bron die je vastzette, de bestemming die je testte, de richting die op nul bleef, en de SPI die je las. Die zin scheidt een associatie die niemand gebruikte van een externe toepassing die het verkeer ontving en weigerde. Draai de wijziging terug wanneer hij de tellers niet verzette, en bewaar het record; de volgende persoon begint waar jij stopte. Niets in de tunnel hoefde opnieuw te worden gebouwd voor dit alles, en dat is het punt van matching controleren voordat je de configuratie aanraakt.

Gerelateerde artikelen