Traceroute: Wo lang laufen meine TCP-Pakete?
Inspiriert vom letzten Chaosradio-Podcast ( CR182: Klempner des Internets ) habe ich nach langer Zeit mal wieder mit dem Tool traceroute herumgespielt. Mit traceroute kann man erfahren, welchen Weg die TCP-Pakete auf dem Weg von mir zu einem gewünschten Zielserver gehen. Ich war bislang immer von der Vorstellung fasziniert, daß wenn ich in die Adresszeile meines Browsers einen amerikanischen Webserver - z.B. "www.whitehouse.gov" - eingebe, meine Datenpakete mit Mops-Geschwindigkeit durch tausende Kilometer lange Glasfaserkabel, welche tief am Boden des Antlantiks liegen, hindurchjagen. In der Chaosradio-Folge wurde ich allerdings belehrt, daß es sein kann, daß mir statt eines Servers in Amerika (möglicherweise direkt in Washington) irgendeine lumpige Kiste in Europa oder anderswo antwortet. Wie kann das sein?
Das Zauberwort in diesem Zusammenhang heißt Content Delivery Network (CDN). Was für mich etwas entzaubernd wirkte, macht aber im WWW mit seinen Millionen Usern und Traffic-intensiven Angeboten viel Sinn. Wenn jetzt z.B. eine große amerikanische Software-Firma Ihre dortigen Server mit irgendeinem großerem Update-Paket bespielt, welches sich auch viele User in Europa herunterladen wollen, so werden die teuren unterseeischen Glasfaserkabel unnötig mit dem millionenfachem Download eines Downloads belastet. Stattdessen also wird das Downloadpaket auf einer Serverfarm irgendwo in Europa kopiert. Wenn jetzt ein User aus Europa z.B. auf den Downloadlink klickt, werden die hierdurch verursachten Datenpakete automatisch durch den ISP anstelle durch das Seekabel an die Serverfarm irgendwo in Europa geroutet. Der User in Europa bekommt davon überhaupt nichts mit. Im Endeffekt funktioniert das mit den CDNs wie bei Mirror- oder Spiegelserver, nur daß der Spiegelserver durch z.T. dynamische Routing-Metriken automatisch zugewiesen wird.
Einen ersten Hinweis auf CDNs liefert der Linux-Befehl host . Host löst einen Servernamen in eine IP-Adresse auf oder umgekehrt (DNS Lookup Tool). Für whitehouse.gov ergibt sich bspw. folgende Ausgabe:
www.whitehouse.gov is an alias for www.whitehouse.gov.edgesuite.net.
www.whitehouse.gov.edgesuite.net is an alias for www.eop-edge-lb.akadns.net.
www.eop-edge-lb.akadns.net is an alias for a1128.h.akamai.net.
a1128.h.akamai.net has address 80.239.216.25
a1128.h.akamai.net has address 80.239.216.65
Akamai ist hierbei einer der großen CDN-Player. Den Weg der Pakete zwischen mir und dem Server kann man nun mit dem Tool traceroute herausbekommen. Unter meinem Ubuntu-Linux benötige ich für traceroute root-Rechte. Alternativ kann man mit
das SUID-Bit so setzen, daß fortan auch nicht-privilegierte User traceroute ausführen können. Dann:
traceroute to whitehouse.gov (23.62.144.110), 30 hops max, 60 byte packets
1 router (192.168.1.1) 1.773 ms 4.403 ms 4.824 ms
2 dslb-084-063-096-001.pools.arcor-ip.net (84.63.96.1) 13.606 ms * *
3 * 145.254.9.209 (145.254.9.209) 19.099 ms 19.766 ms
4 92.79.213.146 (92.79.213.146) 24.942 ms 28.850 ms 29.570 ms
5 amsix-amsN.netarch.akamai.com (195.69.145.208) 30.278 ms 32.154 ms 33.461 ms
6 a23-62-144-110.deploy.akamaitechnologies.com (23.62.144.110) 35.482 ms 34.723 ms 34.258 ms
Der erste Eintrag (Zeile beginnend mit 1) ist mein DSL-Router im lokalen Netz. Dann geht es weiter über meinen Provider Arcor. Schon nach wenigen Stationen endet das Paket bei einem Akamai-Server. Blöd ist nur, daß man nicht mit Sicherheit herausfindet, wo die Server stehen. Es gibt im Internet einige Dienste, wo man anhand der IP-Adresse den Standort eines Rechners/Servers herausfinden kann. Für die Akamei-Server ergeben sich jedenfalls Standorte in den USA. Das könnte aber auch daran liegen, daß Akamai seinen Firmensitz dort hat und dort vielleicht auch die IP-Adressen für ihre weltweit verteilten Serverkisten bekommt.
Ein viel "schöneres" Beispiel ohne Akamai-Gedöns ergibt sich, wenn man die Route zum Webserver der University of Colorado nachvollzieht. Hierzu habe ich ein Perl-Skript als Overlay für traceroute geschrieben. Das Perl-Skript "trace.pl" ruft im wesentlichen traceroute auf. Für jede Zeile mit IP-Adresse wird der Standort des Servers mit Hilfe der Datenbank von hostip.info ermittelt und mit ausgegeben:
traceroute to colorado.edu (128.138.129.98), 30 hops max, 60 byte packets
1 router (192.168.1.1) 1.418 ms 4.078 ms 4.493 ms n/a, n/a
2 dslb-084-063-096-001.pools.arcor-ip.net (84.63.96.1) 13.228 ms * * Koeln, GERMANY
3 * 145.254.9.209 (145.254.9.209) 18.716 ms 19.350 ms Köln, GERMANY
4 92.79.214.98 (92.79.214.98) 31.327 ms 31.956 ms 32.553 ms Unknown City?, Unknown Country?
5 ae53.edge7.Frankfurt1.Level3.net (195.16.162.101) 69.866 ms 70.553 ms 71.139 ms Unknown city, GERMANY
6 vlan60.csw1.Frankfurt1.Level3.net (4.69.154.62) 36.007 ms 36.865 ms 35.951 ms Unknown city, UNITED STATES
7 ae-61-61.ebr1.Frankfurt1.Level3.net (4.69.140.1) 38.739 ms 28.386 ms 26.407 ms TORONTO, ON, CANADA
8 ae-47-47.ebr2.Paris1.Level3.net (4.69.143.142) 36.198 ms * 27.158 ms Unknown city, UNITED STATES
9 ae-44-44.ebr2.Washington1.Level3.net (4.69.137.62) 109.701 ms 107.838 ms 107.461 ms New York, NY, UNITED STATES
10 ae-5-5.ebr2.Washington12.Level3.net (4.69.143.222) 108.223 ms 106.636 ms 107.725 ms Unknown city, UNITED STATES
11 ae-6-6.ebr2.Chicago2.Level3.net (4.69.148.146) 125.247 ms 118.641 ms 119.263 ms Unknown city, UNITED STATES
12 ae-1-100.ebr1.Chicago2.Level3.net (4.69.132.113) 147.412 ms 146.873 ms 149.045 ms Chicago, IL, UNITED STATES
13 ae-3-3.ebr2.Denver1.Level3.net (4.69.132.61) 143.811 ms 143.699 ms 143.686 ms Chicago, IL, UNITED STATES
14 ae-2-52.edge3.Denver1.Level3.net (4.69.147.104) 145.746 ms 146.288 ms 146.529 ms Unknown city, UNITED STATES
15 UNIVERSITY.edge3.Denver1.Level3.net (209.245.23.202) 146.713 ms 146.353 ms 146.537 ms Aurora, CO, UNITED STATES
16 hut-juniper.colorado.edu (128.138.81.249) 146.281 ms 148.069 ms 151.993 ms Boulder, CO, UNITED STATES
17 its-hut.colorado.edu (128.138.81.9) 144.229 ms 144.655 ms 144.572 ms Boulder, CO, UNITED STATES
18 www.colorado.edu (128.138.129.98) 147.279 ms 147.470 ms 147.483 ms Boulder, CO, UNITED STATES
Zuerst passiert das Paket ein Arcor-Rechenzentrum in Köln. Dann gehts weiter nach Frankfurt ins Netz des internationalen Kommunikationsdienstleisters Level3. Frankfurt (DE-CIX) ist einer der großen europäischen Knotenpunkte des Internets . Hier sitzen viele Internetservice-Provider (ISPs) und tauschen sich dort Pakete zwischen Ihren Netzen aus. An den Knotenpunkten wird faktisch aus den ganzen dort vertretenen ISP- und CDN-Netzen das große Internet geknüpft. In den folgenden Zeilen sieht man beim Vergleich der Hostnamen und Lokations-Infos schon, daß letztere nicht so genau sind. Vor dem Sprung über den Atlantik gibt es nämlich noch eine Zwischenstation in Paris (und Paris liegt nicht in den USA). Am Ende nimmt ein Server in Boulder am Campus der Uni Colorado die Pakete entgegen.
Das Skript trace.pl ist Free Software und kann am Ende dieses Beitrags heruntergeladen werden und unter den Bedingungen der GPL v3 weiterverwendet werden. Statt des IP-Location-Services von hostip.info könnte man noch auf die Datenbanken von http://software77.net/geo-ip/ oder https://www.ipligence.com/ zugreifen.