Een gebruiker meldt dat de interne toepassing vanaf de ene machine werkt en vanaf een andere faalt, terwijl de ping die u vanaf de gateway uitvoert in beide gevallen slaagt. Met meerdere tunnels van gelijke kosten is dat geen tegenspraak. Elke stroom wordt op zijn eigen volgende hop geplaatst, dus uw test en de sessie van de gebruiker gebruiken misschien gewoon verschillende paden. De onderstaande uiteenzetting reproduceert die keuze voordat er iets wordt gewijzigd.

Eén ping, meerdere mogelijke paden

Wanneer een route meer dan één volgende hop met dezelfde kosten heeft, moet de router er één per pakket kiezen. De meeste implementaties hashen velden uit het pakket, doorgaans de bron- en bestemmingsadressen samen met het protocol en de poorten, zodat antwoorden op hetzelfde pad blijven. Verschillende toepassingen, of zelfs verschillende verbindingen van één toepassing, leveren verschillende hashes op.

Daarom bewijst een diagnose vanaf de gateway zo weinig. De eigen test van de gateway heeft zijn eigen adressen en poorten, en dus zijn eigen hash. Hij kan op de gezonde tunnel belanden terwijl de gebruiker op de kapotte blijft belanden.

Hoe het platform een volgende hop kiest

Reproduceer de keuze in plaats van er een gok naar te doen. Vraag de kernel welke route hij zou gebruiken voor dezelfde bron en bestemming als de falende sessie. Die opzoeking omvat velden die een gewone bestemmingsopzoeking negeert. Voer hem ook vanaf een werkende client uit en vergelijk de twee antwoorden:

ip route get 10.20.5.7 from 10.20.0.14

Nieuwere iproute2-versies aanvaarden ook het protocol en de bestemmingspoort, wat telt wanneer de hash ze omvat. Vergelijk die uitvoer met dezelfde opzoeking vanaf een werkende client, en het verschil is het bewijs dat u miste.

ObservationLikely causeFirst check
Ping works, application failsA different flow hash selects another tunnelPer-flow lookup from the client's address
Some users fail, others do notOne tunnel lacks a prefix or selectorCompare both tunnels' installed routes
Fails only at larger sizesTunnels have different effective MTUProbe the same size over each path
Fails after a reconnectStateful asymmetry between pathsSession state on both gateways

Volg de falende stroom, niet de routetabel

De routetabel vermeldt beide tunnels en ziet er per definitie juist uit. De vraag is wat elke tunnel met het pakket doet zodra het gekozen is. Controleer dat beide dezelfde beschermde prefixen, dezelfde doorstuurtoestemming en een terugpad dragen dat dezelfde client bereikt.

Let op stateful apparaten in het midden. Als een verzoek via de ene tunnel vertrekt en het antwoord via de andere terugkomt, zal een firewall of NAT die de oorspronkelijke stroom nooit heeft gezien, het laten vallen. De twee tunnels sturen verkeer elk correct door, en de verbinding faalt alsnog.

Controleer ook de MTU per pad. Een pad met een extra inkapseling verkleint de bruikbare grootte, en een overdracht die op de ene tunnel slaagt, stokt op de andere precies bij de grootte waar de kleinere breekt.

Vergelijk één pad tegelijk

Waar het ontwerp onderhoud toelaat, neem één tunnel uit dienst en herhaal de taak van de gebruiker. Als de storing verdwijnt, hoort het probleem bij het pad dat u verwijderde, en de volgende stap is de configuratie ervan met die van de buur te vergelijken in plaats van de routetabel opnieuw te bekijken.

Vergelijk de echte toepassing, niet herhaalde pings. Noteer of de storing een bepaald volgende hop, een pakketgrootte of een overgang na opnieuw verbinden volgt, want die drie patronen wijzen op verschillende reparaties.

Schrijf ten slotte op waarom de paden als gelijkwaardig gelden en hoe een storing er één buiten dienst hoort te nemen. Multipath is alleen veilig wanneer de paden echt uitwisselbaar zijn, en dat is een ontwerpuitspraak die het waard is te controleren in plaats van aan te nemen.

Gerelateerde artikelen