Tools für die Konfiguration und Fehlerbehebung von Netzwerkverbindungen

Aus LinuxUser 10/2011

Tools für die Konfiguration und Fehlerbehebung von Netzwerkverbindungen

© John Holst, Fotolia

Handliche Werkzeuge

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

LinuxUser 10/2011 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben