Un usuari informa que l’aplicació interna funciona des d’una màquina i falla des d’una altra, i que el ping que executeu des de la passarel·la té èxit en tots dos casos. Amb diversos túnels d’igual cost, això no és cap contradicció. Cada flux es col·loca en un següent salt propi, de manera que la vostra sonda i la sessió de l’usuari poden simplement fer servir camins diferents. El recorregut següent reprodueix aquesta tria abans de canviar res.

Un ping, diversos camins possibles

Quan una ruta té més d’un següent salt amb el mateix cost, l’encaminador n’ha de triar un per paquet. La majoria d’implementacions fan un hash de camps del paquet, normalment les adreces d’origen i de destinació juntament amb el protocol i els ports, perquè les respostes es quedin al mateix camí. Aplicacions diferents, o fins i tot connexions diferents d’una mateixa aplicació, produeixen valors hash diferents.

Per això un diagnòstic des de la passarel·la demostra tan poc. La sonda de la passarel·la té les seves pròpies adreces i ports, i per tant el seu propi hash. Pot caure al túnel sa mentre l’usuari continua caient al trencat.

Com tria la plataforma un següent salt

Reproduïu la tria en lloc d’endevinar-la. Pregunteu al nucli quina ruta faria servir per a la mateixa adreça d’origen i de destinació que la sessió que falla. Aquesta consulta inclou camps que una consulta simple de destinació ignora. Executeu-la també des d’un client que funciona i compareu les dues respostes:

ip route get 10.20.5.7 from 10.20.0.14

Les versions més noves d’iproute2 també accepten el protocol i el port de destinació, cosa que importa quan el hash els inclou. Compareu aquesta sortida amb la mateixa consulta des d’un client que funciona, i la diferència és la prova que us faltava.

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

Seguiu el flux que falla, no la taula d’encaminament

La taula de rutes llista tots dos túnels i, per definició, sembla correcta. La pregunta és què fa cada túnel amb el paquet un cop triat. Verifiqueu que tots dos porten els mateixos prefixos protegits, el mateix permís de reenviament i un camí de tornada que arribi al mateix client.

Fixeu-vos en els dispositius amb estat pel mig. Si una petició surt per un túnel i la resposta torna per l’altre, un tallafoc o un NAT que mai no ha vist el flux original la descartarà. Els dos túnels reenvien el trànsit correctament i la connexió continua fallant.

Comproveu també l’MTU per camí. Un camí amb una encapsulació extra redueix la mida útil, i una transferència que té èxit per un túnel s’encalla per l’altre exactament a la mida on es trenca el més petit.

Compareu un camí alhora

On el disseny permeti manteniment, traieu un túnel de servei i repetiu la tasca de l’usuari. Si la fallada desapareix, el problema és del camí que heu tret, i el següent pas és comparar-ne la configuració amb la del veí en lloc de tornar a examinar la taula d’encaminament.

Compareu l’aplicació real, no pings repetits. Anoteu si la fallada segueix un següent salt concret, una mida de paquet o una transició després de reconnectar, perquè aquests tres patrons apunten a reparacions diferents.

Finalment, anoteu per què els camins es consideren equivalents i com hauria de treure un d’ells de servei una fallada. El multipath només és segur quan els camins són realment intercanviables, i això és una afirmació de disseny que val la pena comprovar en lloc de suposar.

Articles relacionats