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á:
- pNastaví 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žby | Port | Protokol | Popis |
|---|---|---|---|
| ctf | 84 | tcp | Common Trace Facility |
| ctf | 84 | udp | Common Trace Facility |
| di-traceware | 3041 | tcp | di-traceware |
| di-traceware | 3041 | udp | di-traceware |
| rtraceroute | 3765 | tcp | Remote Traceroute |
| rtraceroute | 3765 | udp | Remote Traceroute |
| clever-ctrace | 6687 | tcp | CleverView for cTrace Message Service |
| speedtrace | 33334 | tcp | SpeedTrace TraceAgent |
| speedtrace-disc | 33334 | udp | SpeedTrace TraceAgent Discovery |
| traceroute | 33434 | tcp | traceroute use |
| traceroute | 33434 | udp | traceroute use |
| mtrace | 33435 | udp | IP Multicast Traceroute |
| dccp-ping | dccp | ping/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.