Naudotojas praneša, kad vidinė programa veikia iš vieno kompiuterio ir nepavyksta iš kito, o ping, kurį paleidžiate iš tinklo vartų, pavyksta abiem atvejais. Esant keliems vienodos kainos tuneliams, tai ne prieštaravimas. Kiekvienas srautas padedamas ant savo kito šuolio, todėl jūsų patikra ir naudotojo sesija gali tiesiog naudoti skirtingus kelius. Toliau pateikta eiga atkuria šį pasirinkimą prieš ką nors keičiant.

Vienas ping, keli galimi keliai

Kai maršrutas turi daugiau nei vieną kitą šuolį ta pačia kaina, maršrutizatorius turi pasirinkti vieną kiekvienam paketui. Dauguma implementacijų maišo paketo laukus, paprastai šaltinio ir paskirties adresus kartu su protokolu ir prievadais, kad atsakymai liktų tame pačiame kelyje. Skirtingos programos, net skirtingi vienos programos ryšiai, sukuria skirtingas maišas.

Štai kodėl diagnostika iš tinklo vartų įrodo taip mažai. Pačių vartų patikra turi savo adresus ir prievadus, taigi ir savo maišą. Ji gali nusileisti ant sveiko tunelio, kol naudotojas vis nusileidžia ant sugedusio.

Kaip platforma pasirenka kitą šuolį

Atkurkite pasirinkimą, o ne spėkite jį. Paklauskite branduolio, kokį maršrutą jis naudotų tam pačiam šaltiniui ir paskirčiai kaip nepavykstanti sesija. Ši paieška apima laukus, kurių paprasta paskirties paieška nepaiso. Paleiskite ją ir iš veikiančio kliento bei palyginkite du atsakymus:

ip route get 10.20.5.7 from 10.20.0.14

Naujesni iproute2 leidimai taip pat priima protokolą ir paskirties prievadą, o tai svarbu, kai maiša juos apima. Palyginkite tą išvestį su ta pačia paieška iš veikiančio kliento, ir skirtumas yra įrodymas, kurio jums trūko.

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

Sekite nepavykstantį srautą, o ne maršrutų lentelę

Maršrutų lentelė išvardija abu tunelius ir pagal apibrėžimą atrodo teisinga. Klausimas, ką kiekvienas tunelis daro su paketu, kai jis pasirenkamas. Patikrinkite, ar abu neša tuos pačius apsaugotus prefiksus, tą patį persiuntimo leidimą ir grįžimo kelią, pasiekiantį tą patį klientą.

Atkreipkite dėmesį į būsenos įrenginius viduryje. Jei užklausa išeina per vieną tunelį, o atsakymas grįžta per kitą, ugniazė arba NAT, kuris niekada nematė pradinio srauto, ją numes. Abu tuneliai teisingai persiunčia srautą, o ryšys vis tiek nutrūksta.

Patikrinkite ir MTU kiekvienam keliui. Kelias su papildoma inkapsuliacija sumažina naudingą dydį, o perdavimas, kuris pavyksta vienu tuneliu, kitame sustoja būtent ties tuo dydžiu, kai mažesnis lūžta.

Palyginkite vieną kelią vienu metu

Kur projektas leidžia techninę priežiūrą, išimkite vieną tunelį iš tarnybos ir pakartokite naudotojo užduotį. Jei gedimas dingsta, problema priklauso pašalintam keliui, o kitas žingsnis yra palyginti jo konfigūraciją su kaimyno, o ne iš naujo nagrinėti maršrutizavimo lentelę.

Palyginkite tikrąją programą, o ne pakartotinius ping. Užrašykite, ar gedimas seka tam tikrą kitą šuolį, paketo dydį ar perėjimą po prisijungimo iš naujo, nes šie trys modeliai rodo skirtingus remontus.

Galiausiai užrašykite, kodėl keliai laikomi lygiaverčiais ir kaip gedimas turėtų išimti vieną iš jų iš tarnybos. Daugiatakis režimas saugus tik tada, kai keliai tikrai keičiami, ir tai yra projektinis teiginys, kurį verta patikrinti, o ne daryti prielaidą.

Susiję straipsniai