Uvažujme o tracepath ako o nástroji na diagnostiku siete:

tracepath peterbabic.com

Výstup môže byť prekvapivý:

 1?: [LOCALHOST]               pmtu 1500
 1:  _gateway                                    0.748ms
 1:  _gateway                                    0.676ms
 2:  192.168.66.1                                1.564ms
 3:  no reply
 4:  no reply
 5:  no reply
 6:  abc.bcd.def.tld                            30.697ms asymm  7
 7:  no reply
 8:  no reply
 8:  no reply
 9:  no reply
10:  no reply
     ...
30:  no reply
     Too many hops: pmtu 1500
     Resume: pmtu 1500

V ideálnom prípade sa nájde skutočná cesta. Namiesto toho sa dosiahne maximálny počet skokov. Cesta však existuje:

traceroute peterbabic.com

Traceroute vráti cestu v menej ako 10 skokoch (TTL). Mattov traceroute vypíše ekvivalent:

mtr -w peterbabic.com

Oba výstupy sú tu vynechané. Otázka je, prečo má tracepath problém?

Počiatočný port #

Vyskúšal som všetky možnosti, ktoré tracepath ponúka, no bez úspechu. Jedna možnosť je záhadná:

- p Nastaví počiatočný cieľový port, ktorý sa má použiť

Čo znamená počiatočný port? tracepath nie je uvedený medzi dobre známymi portmi.

Dobre známe porty #

Existujú však dobre známe porty obsahujúce reťazec *trace*:

Názov službyPortProtokolPopis
ctf84tcpCommon Trace Facility
ctf84udpCommon Trace Facility
di-traceware3041tcpdi-traceware
di-traceware3041udpdi-traceware
rtraceroute3765tcpRemote Traceroute
rtraceroute3765udpRemote Traceroute
clever-ctrace6687tcpCleverView for cTrace Message Service
speedtrace33334tcpSpeedTrace TraceAgent
speedtrace-disc33334udpSpeedTrace TraceAgent Discovery
traceroute33434tcptraceroute use
traceroute33434udptraceroute use
mtrace33435udpIP Multicast Traceroute
dccp-pingdccpping/traceroute using DCCP

Okrem traceroute som nepoznal žiadnu zo spomínaných služieb. Pozrel som sa na jeho manuál:

ZOZNAM DOSTUPNÝCH METÓD

default Tradičná, stará metóda trasovania. Používa sa predvolene.

Sondovacie pakety sú UDP datagramy s tzv. „nepravdepodobnými” cieľovými portmi. „Nepravdepodobný” port prvej sondy je 33434, potom sa pri každej ďalšej sonde zvyšuje o jedna. Keďže sa očakáva, že porty sú nepoužité, cieľový hostiteľ zvyčajne vráti „icmp unreach port” ako konečnú odpoveď. (Nikto nevie, čo sa stane, keď nejaká aplikácia počúva na takýchto portoch.)

Táto metóda je povolená pre neprivilegovaných používateľov.

Celkom zaujímavé čítanie. Kto to vedel?

Magické číslo 33434 #

Rozhodol som sa vyskúšať dobre známy port traceroute 33434 ako počiatočný port tracepath:

tracepath -p 33434 peterbabic.com

Cesta je nájdená!

Rozsah možností #

Zdá sa, že číslo portu sa inkrementuje od 33434, mal by teda existovať rozsah. Nápoveda na Wikipédii:

Na systémoch podobných Unixu traceroute predvolene posiela postupnosť paketov User Datagram Protocol (UDP) s číslami cieľových portov v rozsahu od 33434 do 33534;

Testovanie s vyšším počiatočným portom:

tracepath -p 33499 peterbabic.com

Cestu stále nájde. Moje testy ukazujú, že to funguje približne podľa vzorca:

počiatočný port = 33534 - ( požadované skoky + c )

Kde c je konštanta s hodnotou okolo 10. Nie som si istý prečo.

Záver #

Pri použití príkazu tracepath na nájdenie cesty k hostiteľovi cez sieť:

tracepath host.example.com

Ak príkaz skončí nepomocnou odpoveďou:

no reply
no reply
no reply
...
Too many hops.

Použite port 33434 ako počiatočný port:

tracepath -p 33434 host.example.com

Toto je 35. príspevok #100daystooffload.

Odkazy #