Die Linux-Kommandozeile hält einen Satz leistungsfähiger Werkzeuge bereit, mit denen Sie Fehlern in der Netzwerkkonfiguration oder im Netz selbst schnell auf die Spur kommen.
Linux und andere Systeme auf Unix-Grundlage bieten in aller Regel mehrere Alternativen zum Lösen eines Problems. Das mag Anwendern mit weniger Erfahrung gelegentlich etwas verwirren, gehört aber zu den bestimmenden Merkmalen der Open-Source-Welt. Netzwerk-Tools bildet da keine Ausnahme: Hier finden Sie eine Reihe von nützlichen Programmen – einige mit ähnlichen Aufgaben, aber auch solche mit einzigartiger Funktion – zum Konfigurieren und Verwalten von Netzwerkverbindungen sowie zur Suche und Behebung von Fehlern.
Dieser Artikel stellt die gängigsten Werkzeuge für die Arbeit mit Netzwerken vor. Er setzt dabei voraus, dass Sie mindestens über grundlegende Kenntnisse von TCP/IP-Netzwerkkonzepten wie Adressierung, Namensauflösung und Routing verfügen ([1],[2]).
Schnittstellen
Der Befehl ifconfig war und ist immer noch auf vielen Systemen das Standardwerkzeug für die Konfiguration von Netzwerkschnittstellen. Auf neueren Linux-Systemen finden Sie zusätzlich den Befehl ip, hinter dem sich nicht nur eine Neuauflage von Ifconfig verbirgt, sondern der als Arbeitspferd einer neuen Generation von Netzwerkprogrammen arbeitet.
Das Programm ip integriert nicht nur die Funktion einiger älterer Tools, sondern bietet eine einheitliche Syntax für alle Funktionen. Im Gegensatz dazu bilden die im Paket net-tools bereitgestellten Werkzeuge, zu denen auch Ifconfig zählt, eine breite Sammlung von eigenständigen Hilfsprogrammen, die voneinander unabhängig entstanden.
Ip gehört zum Paket iproute. Dank der Ähnlichkeit zwischen den einzelnen Werkzeugen aus diesem Paket konfigurieren Sie Ihr Netzwerk viel einfacher, denn Sie brauchen keine unterschiedliche Syntax für die einzelnen Funktionen zu erlernen. Darüber hinaus müssen Sie nicht immer im Kopf behalten, welches Werkzeug gerade für welche Funktion nötig wäre, denn Ip bringt viele der Fähigkeiten von ifconfig, route und arp unter einem Dach mit.
Ein Kommando von ip sieht in der allgemeinen Form wie folgt aus:
$ ip Optionen Objekt Kommando
Beim Objekt handelt es sich etwa um link für Netzwerkschnittstellen, addr für IP-Adressen, route für Routen und so weiter. Der Befehl ip unterstützt neben den genannten noch mehrere anderen Objekte – die Manpage des Tools liefert weitere Details.
Im Kontext von ip ist ein Link-Objekt ein (physikalisches oder virtuelles) Netzwerkgerät. Die Details zu einer solchen Schnittstelle erhalten Sie mittels des Befehls ip addr show (Listing 1).
Listing 1
$ ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:19:d1:a1:3e:b9 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.203/24 brd 192.168.1.255 scope global eth0
inet6 fe80::219:d1ff:fea1:3eb9/64 scope link
valid_lft forever preferred_lft forever
In den meisten Fällen liefert das Kommando show die grundlegenden Parameter zu einem angegebenen Objekt. Geben Sie kein solches explizit an, zeigt es die Informationen für alle betreffenden Objekte an. Zum Beispiel erhalten Sie mittels ip addr show Informationen zu den Adressen aller Netzwerkschnittstellen. Gegebenenfalls verwenden Sie list statt show. Das kommt der Vorstellung entgegen, das das System Geräte eher auflistet als “zeigt”.
Die in Listing 1 gezeigte Form des Befehls ip addr arbeitet mit drei Parametern: show dev eth0. Das Kommando show arbeitet also als ein Befehl-im-Befehl mit den Argumenten dev eth0. Das zeigt, dass die Befehle mit Ip in der Regel etwas komplexer ausfallen als die Entsprechungen mit Ifconfig: Dort hieße der selbe Befehl einfach ifconfig eth0.
Möchten Sie eine virtuelle Schnittstelle eth0:1 hinzufügen, sieht der entsprechende Befehl wie folgt aus:
# ip addr add 192.168.1.42 dev eth0:1
In diesem Fall dienen die Parameter 192.168.1.42 dev eth0:1 als Argumente für den Befehl add. Dieses Beispiel weist dem Gerät eth0:1 die IP-Adresse 192.168.1.42 zu. Den Ip-Befehl verwenden Sie auch zum Aktivieren und Deaktivieren von Schnittstellen:
# ip link set up dev eth1
Hier kommt das Kommando set zum Einsatz. Die Befehle set und view gehören zum link-Objekt. Als Alternative für das Aktivieren einer Netzwerkschnittstelle bietet sich der Befehl ifup an. Dahinter verbirgt sich eigentlich ein Shellskript, welches das System beim Hochfahren aus der Datei /etc/init.d/network zum Aktivieren der Schnittstelle aufruft. Wie zu erwarten, gibt es auch ein Kommando ifdown, bei dem es sich jedoch lediglich um einen symbolischen Link auf Ifup handelt.
TIPP
Der Befehl ip erlaubt, die Namen der Objekte abzukürzen. Meist genügt der erste Buchstabe des Objektbezeichners, etwa ip l für ip link oder ip a für ip addr. Beachten Sie jedoch, dass es einige Objekte mit gleichen Anfangsbuchstaben gibt, zum Beispiel address und addrlabel. Sie können Abkürzungen nicht nur für Objekte, sondern auch für Befehle verwenden. Statt ip addr show dev eth0 genügt auch ip a s eth0.
Routing
Traditionell definieren und verwalten Sie Routen über den Befehl route. Mit ip route steht eine modernere Alternative zur Verfügung. Das Hinzufügen einer Route sieht bei den beiden Tools wie folgt aus:
# route add -net 192.168.42.0/24 gw 192.168.1.99 # ip route add 192.168.42.0/24 via 192.168.1.99
Das Format gleicht im Grunde genommen dem beim Hinzufügen von IP-Adressen. Beachten Sie, dass beide Befehle die Route für einen gesamten Bereich von IP-Adressen (192.168.42.0/24 – im CIDR-Format) hinzufügen und diese Route einer Router-Adresse zuweisen – mit dem Argument gw (engl. “gateway”) im Route-Befehl und dem intuitiveren via bei ip route.
Geben Sie den Befehl ip route ohne irgendein modifizierendes Argument ein, erhalten Sie eine Liste der vorkonfigurierten Routen, wobei die Ausgabe etwas eingängigere Informationen enthält als jene von Route. Ein Beispiel dafür finden Sie in Listing 2, das die Ausgaben der beiden Tools auf einem Notebook zeigt.
Listing 2
$ route Kernel-IP-Routentabelle Ziel Router Genmask Flags Metric Ref Use Iface 192.168.1.0 * 255.255.255.0 U 1 0 0 eth0 192.168.1.0 * 255.255.255.0 U 2 0 0 eth1 link-local * 255.255.0.0 U 1000 0 0 eth1 default gateway 0.0.0.0 UG 0 0 0 eth0 $ ip route 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.105 metric 1 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.106 metric 2 169.254.0.0/16 dev eth1 scope link metric 1000 default via 192.168.1.1 dev eth0 proto static
Namen und Zahlen
Das Address Resolution Protocol ARP ermittelt die physikalische Hardware-Adresse, die zu der IP-Adresse eines Rechners gehört. Ursprünglich nutzte und verwaltete der Befehl arp die gleichnamigen Tabellen. Auch hierfür stellt Ip einen Ersatz bereit. Das Objekt heißt in diesem Fall neigh (engl.: “neighbor”, Nachbar). Beispiele für die Ausgabe der zwei Befehle zeigt Listing 3. In beiden Fällen enthält die Ausgabe die IP-Adresse (192.168.1.111), die Link-Layer-Adresse (lladdr 00:30:05:0c:0b:23) sowie das physische Gerät (eth0), das mit dieser Adresse verbunden ist.
Listing 3
$ arp 192.168.1.111 Adresse Hardware-Typ Hardware-Adresse Optionen Maske Schnittstelle 192.168.1.111 ether 00:30:05:0c:0b:23 C eth0 $ ip neigh show 192.168.1.1 192.168.1.111 dev eth0 lladdr 00:30:05:0c:0b:23 REACHABLE
Benutzer bauen eine Verbindung zu einem entfernten Rechner eher über den Hostnamen als über die IP-Adresse auf. Computer aber müssen die IP-Adresse verwenden und wandeln den Namen daher automatisch via DNS zurück in Zahlen. Ob das Umwandeln von Namen und Adressen klappt, prüfen Sie entweder mit dem Tool nslookup oder mit host. Beiden Programme gehören zum Paket bind-utils. Der Befehl nslookup bietet dabei mehr Funktionalität und liefert eine umfangreichere Ausgabe als host.
Fehler beheben
Nachdem Sie Routen definiert haben, überzeugen Sie sich zuerst davon, ob die Pakete entfernte Hosts tatsächlich erreichen. Dazu verwenden Sie dazu das Werkzeug ping und geben dabei als Argument entweder den Hostnamen oder die IP-Adresse an (Listing 4).
Listing 4
$ ping -c4 192.168.1.111 PING 192.168.1.111 (192.168.1.111) 56(84) bytes of data. 64 bytes from 192.168.1.111: icmp_seq=1 ttl=128 time=0.309 ms 64 bytes from 192.168.1.111: icmp_seq=2 ttl=128 time=0.361 ms 64 bytes from 192.168.1.111: icmp_seq=3 ttl=128 time=0.316 ms 64 bytes from 192.168.1.111: icmp_seq=4 ttl=128 time=0.318 ms --- 192.168.1.111 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2998ms rtt min/avg/max/mdev = 0.309/0.326/0.361/0.020 ms
Die Option -c (engl. “count”) begrenzt dabei die Anzahl der übermittelten Pakete. Ohne diese Einschränkung sendet Ping fortlaufend Testpakete, bis Sie es über [Strg]+[C] beenden. In der Ausgabe von Ping sehen Sie einen Bericht für jedes Paket mit den Informationen über den Erfolg der Verbindungsaufnahme und die entsprechenden Antwortzeiten.
Um die Route der Pakete bis zum Ziel zu überprüfen, verwenden Sie entweder das traditionelle traceroute oder das neuere Hilfsprogramm tracepath, das wie Ping zum Paket iputils gehört. Obwohl es sich bei Traceroute um das ältere Programm handelt, kennt es mehr Optionen als Tracepath. Letzteres nimmt im Prinzip als Parameter nur ein Ziel (Adresse oder Hostname) sowie eine Port-Nummer entgegen. Ansonsten können Sie lediglich über -l die Paketlänge angeben und mittels -n die Namensauflösung deaktivieren. Traceroute dagegen kennt rund ein Dutzend Parameter von Time-to-live-Werten über Maximum Hops bis zum Typ der Schnittstelle.
Erachten Sie den Verlauf der Pakete als ineffizient oder unerwartet, erfahren Sie über route oder ip route, welche Routen konfiguriert sind. Beachten Sie, dass Sie nur diejenige Route sehen, die in der lokalen Maschine konfiguriert ist; möglicherweise liegt das Problem jedoch an anderer Stelle.
Es kommt vor, dass ein bestimmter Router explizit so konfiguriert ist, keine Angaben auszugeben. Von Tracepath erhalten Sie in diesem Fall keine Ausgabe. Das bedeutet aber nicht, dass mit dem Ziel keine Verbindung möglich wäre (was Sie wiederum mit Ping prüfen). Es bedeutet lediglich, dass der dazwischen liegende Router die Anfrage von Tracepath (oder Traceroute) einfach nicht beantwortet.
Weitere Tools für die Fehlerbehebung stehen Ihnen mit dem Befehl netstat zur Verfügung. Er gibt Informationen über Verbindungen sowie Routing-Tabellen und umfangreiche Statistiken für Schnittstellen aus. Hier zu erwähnen ist noch das neuere Tool ss, das zwar ein Teil des iproute-Pakets bildet und sich auf Sockets und Verbindungen konzentriert (Listing 5). Weitere Informationen entnehmen Sie der Manpage von ss.
Listing 5
$ ss -r State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.1.105:57633 hydra.ntm-gmbh.de:ssh ESTAB 0 0 192.168.1.105:50981 grape.canonical.com:https ESTAB 0 8 192.168.1.105:40217 defendo.local:24800
Letzter Schliff
Wollen Sie überprüfen, ob Sie einen entfernten Rechner erreichen, bietet der Befehl ping immer die einfachste Lösung. Wenn ein Ping funktioniert, können Sie davon ausgehen, dass das Netzwerk richtig konfiguriert ist (oder zumindest gut genug, damit Pakete an ihrem Bestimmungsort ankommen).
Um sicher zu gehen, dass wirklich alles passt, überprüfen Sie, ob Sie den entfernten Rechner sowohl über den Hostnamen als auch über die IP-Adresse erreichen. Erreichen Sie die Maschine lediglich über die Adresse, jedoch nicht mit dem Hostnamen, dann liegt das Problem höchstwahrscheinlich beim DNS. Dasselbe gilt für den umgekehrten Fall: Der Eintrag für den Host verweist dann auf eine falsche IP-Adresse.
Können Sie weder mit dem Hostnamen noch mit der IP-Adresse eine Verbindung zu einem entfernten Rechner herstellen, fangen Sie am besten beim lokalen Rechner an und arbeiten sich dann Schritt für Schritt weiter nach außen vor. Die erste Frage lautet, ob TCP/IP auf dem lokalen System richtig konfiguriert ist. Das prüfen Sie mit ip addr.
Senden Sie dann einen Ping an den Router, um sicherzustellen, dass Sie mit ihm verbunden sind. Klappt das, dann versuchen Sie Ping gleich mit einer anderen Adresse jenseits des Routers, um festzustellen, ob dieser die Pakete auch weiterleitet. Haben Sie immer noch nicht entdeckt, wo das Problem liegen könnte, geben Traceroute oder Tracepath mehr Auskunft darüber, wo genau die Pakete verlorengehen.
Glossar
-
CIDR
-
Classless Inter-Domain Routing [3]. Ein Verfahren zur effizienteren Nutzung des IP-Adressraums und um die Größe der Routing-Tabellen zu reduzieren.
Infos
[1] Netzwerkprotokolle: Achim Leitner, “Netz-Geheimnisse”, LU 11/2005, S. 40, https://www.linux-community.de/9483
[2] TCP/IP-Basics: Kristian Kißling, “Pfade durch den Dschungel”, LU 12/2006, S. 34, https://www.linux-community.de/11811
[3] Classless Inter-Domain Routing: http://de.wikipedia.org/wiki/Classless_Inter-Domain_Routing





