Mit den leistungsfähigen Werkzeugen der Linux-Kommandozeile kommen Sie Fehlern in der Netzwerkkonfiguration oder im LAN selbst schnell auf die Spur.
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 bilden 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 [1] wie Adressierung, Namensauflösung und Routing verfügen [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
Bei Objekt handelt es sich beispielsweise 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 andere Objekte – die Manpage des Tools (man ip) 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, dass 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 derselbe 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
In einem lokalen Netz müssen Sie sich auf den Clients üblicherweise nur um eine einzige Route kümmern: Die zum “default gateway”, also zu demjenigen (DSL-)Router, über den Ihr LAN Verbindung zum Internet aufnimmt. Dieser dient meist auch als DHCP-Server und teilt den Clients daher bereits bei der Adresszuweisung die korrekte Gateway-Adresse mit – also seine eigene. Bei Verbindungsproblemen lohnt aber dennoch ein Blick auf die gesetzte Route.
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 beiden Tools ähnlich aus, einen direkten Vergleich bietet Listing 2.
Listing 2
$ 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 3, das die Routen für ein etwas komplexeres System mit zwei Schnittstellen (eth0 und eth1) zeigt.
Listing 3
$ 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
Manuell gesetzte Routen, wie jene aus den Beispielen in Listing 2, gehen bei einem Neustart des Systems verloren. Um dies zu verhindern und die Änderung permanent zu machen, müssen Sie die Konfigurationsdateien des jeweiligen Systems modifizieren. Unter Debian finden Sie die Einstellungen beispielsweise in /etc/network/interfaces, unter Fedora dagegen in /etc/sysconfig/network/scripts.
Namen und Zahlen
Das Address Resolution Protocol ARP ermittelt die physikalische Hardware-Adresse, die zu der IP-Adresse eines Rechners gehört. Das System stellt diese sogenannten MAC-Adressen fremder Systeme erst im Zug von Interaktionen mit diesen – etwa eines Pings oder einer anderweitigen Datenübertragung – fest und speichert sie dann in einem ARP-Cache zur weiteren Verwendung. Ursprünglich nutzte und verwaltete der Befehl arp die gleichnamigen Tabellen.
Auch für arp stellt Ip einen Ersatz bereit. Das Objekt heißt in diesem Fall neigh (engl.: “neighbor”, Nachbar). Beispiele für die Anwendung der zwei Befehle zeigt Listing 4. 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 4
$ 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. Beide 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 das Werkzeug ping und geben dabei als Argument entweder den Hostnamen oder die IP-Adresse an (Listing 5).
Listing 5
$ 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.
Ohne weitere Angaben sendet Ping seine Pakete im Sekundentakt. Dies ändern Sie bei Bedarf über die Option -i, hinter der Sie die Verzögerung zwischen den Paketen in Sekunden angeben. Um etwa jede halbe Sekunde einen Ping abzusetzen, verwenden Sie folgenden Befehl:
$ ping -i 0.5 192.168.1.111
Geben Sie den Schalter -f (“flood”) an, versendet Ping die Pakete ohne Verzögerung schnellstmöglich hintereinander, bis Sie den Vorgang mit [Strg]+[C] abbrechen. Ähnlich verhält sich die Option -l nn, die jedoch die Anzahl versendeter Pakete auf nn begrenzt. Das vielseitige Werkzeug Ping bietet noch eine ganze Reihe anderer Optionen, die Sie bei Interesse der Manpage des Tools (man ping) entnehmen.
Wege verfolgen
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 Portnummer 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 (-m) über Ports (-p) und Schnittstellen (-i) bis hin zum zu verwendenden Gateway (-g). Nähere Informationen entnehmen Sie bei Interesse der Manpage des Tools (man traceroute).
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 zurückzuliefern. Von Tracepath erhalten Sie in diesem Fall keine Ausgabe. Das heißt aber nicht, dass mit dem Ziel keine Verbindung möglich wäre (was Sie wiederum mit Ping prüfen). Es bedeutet lediglich, dass der dazwischenliegende 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 zu den Bestandteilen des iproute-Pakets zählt und sich auf Sockets und Verbindungen konzentriert (Listing 6). Weitere Informationen entnehmen Sie der Manpage des Werkzeugs (man ss).
Listing 6
$ ss -r State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.1.105:37761 localhost:ssh ESTAB 0 0 192.168.1.105:50981 www.linux-user.de:http ESTAB 0 8 192.168.1.105:40217 defendo.local:24800 [...]
Alleskönner Mtr
Zu den neueren Werkzeugen zur Netzwerkprüfung zählt Mtr, für das es auch eine grafische Oberfläche namens Xmtr gibt. Je nach verwendeter Distribution ist Mtr bereits vorinstalliert. Bei dem Tool handelt es sich quasi um eine Kreuzung aus Ping und Traceroute, das die Funktionen beider Programme mit einer interaktiven Anzeige kombiniert. Sie rufen es mit der IP-Adresse oder dem Hostnamen des zu prüfenden Ziels als Parameter auf:
$ mtr linux-user.de
Bis Sie das Programm mit [Q] wieder abbrechen, sendet es Pakete an das angegebene Ziel. Wie Abbildung 1 zeigt, protokolliert Mtr dabei die Hops auf dem Weg vom lokalen Rechner zum Ziel, die Anzahl der versendeten Pakete sowie die aktuelle, mittlere, niedrigste und höchste Antwortzeit. Außerdem hält es fest, welcher Prozentsatz der Pakete verloren ging. Dabei stellen Paketverluste prinzipiell keinen Beinbruch dar, solange die Gegenstelle grundsätzlich erreichbar bleibt.
Wie bei Ping und Traceroute können Sie Mtr mit der Option -i auf ein bestimmtes Interface ansetzen. Recht interessant ist auch der Schalter -r, der statt einer interaktiven Anzeige lediglich beim Beenden des Programms einen Report liefert (Listing 7). Typischerweise kommt er in Verbindung mit der Option -c nn zum Einsatz, mit der Sie die Anzahl nn der zu versendenden Pakete vorgeben. Ohne weitere Vorgabe liefert Mtr den Report nach 10 Paketen.
Listing 7
$ mtr -c 25 -r www.linux-user.de HOST: themis.ntm-gmbh.de Loss% Snt Last Avg Best Wrst StDev 1.|-- cleopatra.ntm-gmbh.de 0.0% 25 0.4 0.5 0.3 1.1 0.2 2.|-- welcome.ntm-gmbh.de 0.0% 25 0.8 1.3 0.6 4.1 1.1 3.|-- host-93-104-204-9.custome 0.0% 25 3.2 12.6 1.8 43.2 15.5 4.|-- xe-1-1-0.r3.muc7.m-online 0.0% 25 6.7 4.2 1.4 9.6 2.6 5.|-- xe-9-0-0.bar1.Munich1.Lev 0.0% 25 3.2 3.2 1.7 8.3 2.0 6.|-- ae-0-11.bar2.Munich1.Leve 0.0% 25 2.9 9.7 2.7 48.1 14.7 7.|-- ae-18-18.ebr2.Berlin1.Lev 0.0% 25 24.0 24.2 21.5 28.9 2.6 8.|-- ae-4-4.car2.Munich1.Level 0.0% 25 23.4 23.2 21.7 24.7 0.9 9.|-- ae-11-11.car1.Munich1.Lev 0.0% 25 21.8 23.9 21.7 31.1 3.0 10.|-- www.linux-user.de 0.0% 25 23.0 23.2 21.8 24.7 0.9
Legen Sie Wert auf etwas mehr optischen Schick, dann rufen Sie Mtr statt direkt auf der Kommandozeile über das grafische Frontend Xmtr auf (Abbildung 2).

Abbildung 2: Für Mtr gibt es in Form von Xmtr auch ein mittels Gtk+ umgesetztes grafisches Frontend.
Namensfrage
Das Domain Name System DNS übersetzt Domainnamen, wie sie in Web- und Mailadressen vorkommen, in die für das TCP/IP-Networking notwendigen numerischen IP-Adressen. Diese Namensauflösung geschieht für den Benutzer völlig transparent, solange der Rechner die Adresse eines funktionierenden DNS-Servers kennt.
Als klassische Werkzeuge zur DNS-Abfrage dienen auf den meisten Linux-Systemen, wie bereits erwähnt, nslookup und host aus dem Paket bindutils. Umfassendere Informationen liefert jedoch das Tool dig, der “domain information groper”. Im Wesentlichen nimmt Dig eine DNS-Abfrage vor und präsentiert dann deren Ergebnisse (Listing 8). Die Ausgabe zeigt auch, über welchen DNS-Server Dig die Namensauflösung vorgenommen hat – in unserem Beispiel war es einer von Google (Zeile 17).
Listing 8
$ dig linux-user.de ; <<>> DiG 9.8.1-P1 <<>> linux-user.de ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33242 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 0 ;; QUESTION SECTION: ;linux-user.de. IN A ;; ANSWER SECTION: linux-user.de. 3599 IN A 195.122.146.141 ;; Query time: 36 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Tue Apr 29 20:10:11 2014 ;; MSG SIZE rcvd: 47
Um einen bestimmten Nameserver zu nutzen – etwa, wenn auf dem als Standard eingestellten die Namensauflösung nicht klappt – übergeben Sie Dig dessen Adresse (in der ersten Zeile von Listing 9 die eines weiteren Google-DNS-Servers) hinter dem Schalter @. Darüber hinaus lässt sich Dig auch dazu einsetzen, beliebige Arten von DNS-Einträgen zu finden. So finden Sie zum Beispiel den zu einer Domain gehörenden Mailserver heraus (Listing 9, zweite Zeile).
Listing 9
$ dig @8.8.4.4 linux-user.de $ dig MX www.linux-user.de
Ablauf einer Diagnose
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 über den 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 verloren gehen.
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.
-
MAC-Adressen
-
Media Access Control Address. Eindeutige Hardware-Adresse jedes Netzwerkadapters, die als Identifikator des Geräts im Netzwerk dient. Besteht aus sechs Bytes (48 Bit), wovon die ersten drei eine Herstellerkennung enthalten.
Infos
[1] TCP/IP-Basics: Kristian Kißling, “Pfade durch den Dschungel”, LU 12/2006, S. 34, https://www.linux-community.de/11811
[2] Netzwerkprotokolle: Achim Leitner, “Netz-Geheimnisse”, LU 11/2005, S. 40, https://www.linux-community.de/9483
[3] Classless Inter-Domain Routing: http://de.wikipedia.org/wiki/Classless_Inter-Domain_Routing





