Waarom routes met gelijke kosten VPN-storingen moeilijk zichtbaar maken
Wanneer meerdere tunnels dezelfde kosten delen, kan elke stroom een andere nemen. Een geslaagde ping zegt niets over het pad dat uw toepassing werkelijk gebruikt.
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.
| Observation | Likely cause | First check |
|---|---|---|
| Ping works, application fails | A different flow hash selects another tunnel | Per-flow lookup from the client's address |
| Some users fail, others do not | One tunnel lacks a prefix or selector | Compare both tunnels' installed routes |
| Fails only at larger sizes | Tunnels have different effective MTU | Probe the same size over each path |
| Fails after a reconnect | Stateful asymmetry between paths | Session 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.