Per què traceroute mor en una sola direcció a través d’un túnel VPN
Un rastreig que es completa en una direcció i imprimeix asteriscos en l’altra sol ser un problema de diagnòstic. Compareu mètodes de sonda, camins de tornada i una petició real.
La sortida de traceroute que es completa en una direcció i imprimeix files d’asteriscos en l’altra sembla un encaminament asimètric, i normalment no ho és. Cada salt mostrat necessita que la sonda arribi, que un router decideixi respondre i que la resposta torni i es faci coincidir amb la sonda. Trenqueu qualsevol d’aquests enllaços i la fila es converteix en un asterisc mentre el túnel continua transportant dades.
El rastreig és una prova sobre el diagnòstic abans que una prova sobre el transport. La pregunta que val la pena fer és quin dels tres enllaços ha fallat, i la resposta ve dels paquets, no de la forma de la sortida.
Un asterisc és una resposta que falta, no un salt que falta
Traceroute avança cap enfora enviant sondes el TTL de les quals expira un router més enllà a cada ronda. Un router que descarta una sonda expirada hauria de retornar un missatge ICMP Time Exceeded que s’anomena a si mateix, i l’eina imprimeix aquest nom. El que l’eina espera realment és que aquest missatge arribi dins d’un temps d’espera. Si el router respon des d’una adreça d’origen diferent, limita la freqüència amb què genera errors o descarta la sonda sense dir res, la ronda no produeix res imprimible.
Cap d’aquests resultats diu que el camí d’anada estigui trencat. Un asterisc és un informe sobre correu sense resposta, no sobre un camí buit.
El mètode de la sonda decideix amb quin filtre us trobeu
El mètode per defecte a Linux sol ser un port de destinació UDP amb un número alt, tracert de Windows envia ressons ICMP, i a Linux se li pot indicar que utilitzi ICMP o TCP en lloc d’això. Cadascun sembla un tipus diferent de trànsit per a un tallafoc amb estat o un grup de seguretat del núvol. Comparar un rastreig UDP d’un costat amb un rastreig ICMP de l’altre compara dos experiments diferents. Fixeu el mètode, la família d’adreces, l’adreça d’origen i el temps d’espera abans de qualificar els resultats de diferència.
Per a una comparació justa, executeu el rastreig des dels equips que realment porten el trànsit i no des d’una porta d’enllaç que reenvia en nom seu. Un rastreig generat pel router utilitza la seva pròpia adreça d’origen i la seva política de sortida, que poden ser més estrictes que qualsevol cosa que vegi un client. Anoteu la invocació exacta perquè la propera persona la pugui repetir.
El valor del temps d’espera és l’altra meitat de l’experiment, i és fàcil deixar-lo fora de les notes. Una espera de dos segons en un camí congestionat informa d’asteriscos on una espera de cinc segons informa de salts. Manteniu el valor idèntic entre execucions perquè la comparació segueixi tractant de la xarxa.
El camí de tornada és una ruta pròpia
Un error ICMP és un paquet ordinari amb el seu propi origen i destinació, i necessita una ruta de tornada cap al rastrejador. Si la política del túnel porta els prefixos de la LAN però no l’adreça del router que va generar l’error, el missatge surt per un camí que no us pot arribar. El filtratge de respostes el pot descartar fins i tot quan la ruta existeix, perquè el paquet arriba d’una adreça inesperada en una interfície inesperada. Això és un desajustament al pla de diagnòstic i no una fallada de l’aplicació.
Eixamplar cada selector fins que el rastreig es completi fa la imatge més bonica i la política pitjor. Repareu l’adreça de diagnòstic concreta, o accepteu l’asterisc i proveu l’aplicació d’una altra manera.
Confirmeu el túnel amb una petició real
Un handshake TCP al port propi del servei exercita el reenviament, l’encaminament de tornada i el filtratge en la direcció que importa. Les ordres següents s’executen als dos extrems i comparen què pot obrir cada costat. Substituïu el port del servei i el nom de la interfície del túnel per la vostra configuració.
traceroute -I -n -w 2 203.0.113.40
traceroute -T -p 443 -n -w 2 203.0.113.40
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' --max-time 5 http://203.0.113.40:8080/health
ss -tan state established
Llegiu primer les dues execucions de traceroute: si l’execució ICMP mostra salts i la TCP no, la diferència és de mètode, no de camí. Després preneu el resultat de curl com a resposta a nivell d’aplicació, perquè un intercanvi completat amb un codi d’estat raonable vol dir que els camins d’anada i de tornada funcionen per a trànsit real. El llistat de sockets mostra si la connexió està establerta, cosa que cap rastreig us pot dir.
Un túnel que transporta una sessió interactiva en les dues direccions mentre un traceroute imprimeix asteriscos és sa i simplement poc fotogènic. Guardeu la sortida de les ordres de cada costat com a registre i tracteu els salts que falten com una pregunta oberta sobre el diagnòstic i no com un veredicte sobre la VPN.