Корисник пријављује да интерна апликација ради са једне машине, а не успева са друге, док ping који покренете са приступника успева у оба случаја. Уз више тунела једнаке цене то није противречност. Сваки ток се поставља на сопствени следећи скок, па ваша провера и корисничка сесија једноставно могу користити различите путеве. Преглед у наставку репродукује тај избор пре било какве промене.

Један ping, више могућих путева

Када рута има више од једног следећег скока уз исту цену, усмеривач мора изабрати један по пакету. Већина имплементација хешира поља из пакета, обично изворишну и одредишну адресу заједно са протоколом и портовима, како би одговори остали на истом путу. Различите апликације, па и различите везе једне апликације, дају различите хешеве.

Зато дијагностика са приступника доказује тако мало. Сопствена провера приступника има своје адресе и портове, а тиме и свој хеш. Може завршити на здравом тунелу док корисник стално завршава на поквареном.

Како платформа бира следећи скок

Репродукујте избор уместо да нагађате. Питајте језгро коју би руту користило за исто извориште и одредиште као неуспела сесија. То претраживање укључује поља која обично претраживање одредишта игнорише. Покрените га и са радног клијента и упоредите два одговора:

ip route get 10.20.5.7 from 10.20.0.14

Новија издања iproute2 прихватају и протокол и одредишни порт, што је важно када их хеш укључује. Упоредите тај излаз са истим претраживањем са радног клијента и разлика је доказ који вам је недостајао.

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

Пратите неуспели ток, а не табелу рута

Табела рута наводи оба тунела и по дефиницији изгледа исправно. Питање је шта сваки тунел ради са пакетом након што буде изабран. Проверите да оба носе исте заштићене префиксе, исту дозволу прослеђивања и повратни пут који стиже до истог клијента.

Обратите пажњу на уређаје са стањем у средини. Ако захтев изађе кроз један тунел, а одговор се врати кроз други, заштитни зид или NAT који никада није видео изворни ток одбациће га. Оба тунела исправно прослеђују промет, а веза ипак пада.

Проверите и MTU по путу. Пут са додатном инкапсулацијом смањује искористиву величину, а пренос који успе на једном тунелу запне на другом тачно на величини где се мањи ломи.

Упоредите један пут по један

Где дизајн допушта одржавање, избаците један тунел из употребе и поновите корисников задатак. Ако квара нестане, проблем припада путу који сте уклонили, а следећи корак је упоредити његову конфигурацију са суседном, а не преиспитивати табелу усмеравања.

Упоредите стварну апликацију, а не поновљене ping-ове. Забележите прати ли квар одређени следећи скок, величину пакета или прелаз након поновног повезивања, јер та три обрасца упућују на различите поправке.

На крају запишите зашто се путеви сматрају еквивалентним и како би квар требало да избаци један од њих из употребе. Вишепутост је безбедна само када су путеви доиста заменљиви, а то је пројектна тврдња коју вреди проверити, а не претпоставити.

Повезани чланци