Von Zeit zu Zeit wurden Linux- und Unix-Benutzer mit verschiedenen Netzwerkproblemen konfrontiert. Viele dieser Probleme werden hier und in einigen anderen Fehlerbehebungsforen vorgestellt, aber sie sind sehr konkret und enthalten viele zusätzliche technische Informationen, und manchmal ist es ziemlich schwierig, den Hauptpunkt und den wahren Grund für fehlerhaftes Systemverhalten zu verstehen.
Mit dieser Frage möchte ich ein Community-Wiki starten Seite, die es ermöglicht, unsere Erfahrungen mit der Fehlerbehebung und dem Debuggen von Netzwerken zu verallgemeinern. Ich hoffe, dass die Linux- und Unix-Benutzer ihre Netzwerkprobleme mithilfe dieser Seite leichter erkennen und lösen („Teile und Herrsche“).
Die übergeordnete Seite dieser Seite sollte Best Practice zum Diagnostizieren von Problemen sein. Aber hier sollten wir uns auf die Fehlerbehebung der Netzwerkprobleme konzentrieren aus Benutzer- und Kernel-Space.
Ich nehme an, wenn Sie:
- Teilen Sie die Informationen über die Verwendung eines großartigen Netzwerkdiagnosetools mit konkreten Anwendungsbeispielen und Beispielen für Netzwerkfehler, die sie zu finden helfen.
- Teilen Sie den Link zum großartigen Netzwerk-Tutorial zu diesem Thema
- Erzählen Sie von einer allgemeinen Methode oder einem Rezept, das es ermöglicht, einige Klassen von Netzwerkproblemen anzugehen
- Teilen Sie Informationen über Ihr Toolset für Netzwerk-Debugging und -Fehlerbehebung
es würde perfekt zu diesem Thema passen.
Ich beginne damit, den Link zu verschiedenen Diagnosetools und dem 12 Jahre alten einfachen Tutorial zu teilen. Auch das Archlinux-Tutorial scheint aktuelle Informationen zu unserem Thema zu enthalten. Und um in die Linux-Netzwerke einzutauchen, müssen wir unbedingt Linux Networking-HOWTO besuchen.
Akzeptierte Antwort:
Ich denke, allgemeine Prinzipien der Netzwerkfehlerbehebung sind:
- Finden Sie heraus, auf welcher Ebene des TCP/IP-Stacks (oder eines anderen Stacks) das Problem auftritt.
- Verstehen Sie, was das richtige Systemverhalten ist und was eine Abweichung vom normalen Systemzustand ist
- Versuchen Sie, das Problem in einem Satz oder in mehreren Worten auszudrücken
- Verwenden Sie die erhaltenen Informationen aus dem fehlerhaften System, Ihre eigene Erfahrung und die Erfahrung anderer Personen (Google, verschiedene Foren usw.) und versuchen Sie, das Problem bis zum Erfolg (oder Misserfolg) zu lösen
- Wenn Sie scheitern, fragen Sie andere um Hilfe oder Rat
Ich selbst besorge mir normalerweise alle erforderlichen Informationen mit allen erforderlichen Tools und versuche, diese Informationen mit meiner Erfahrung abzugleichen. Die Entscheidung, auf welcher Ebene des Netzwerkstapels der Fehler enthalten ist, hilft, unwahrscheinliche Varianten abzuschneiden. Die Erfahrung anderer Menschen zu nutzen hilft, die Probleme schnell zu lösen, aber oft führt es dazu, dass ich ein Problem ohne sein Verständnis lösen kann und wenn dieses Problem erneut auftritt, ist es für mich unmöglich, es ohne das Internet erneut anzugehen.
Und im Allgemeinen weiß ich nicht, wie ich Netzwerkprobleme löse. Anscheinend gibt es in meinem Gehirn eine magische Funktion namens SolveNetworkProblem(information_about_system_state, my_experience, people_experience)
, die manchmal genau die richtige Antwort zurückgeben und manchmal auch fehlschlagen könnten (wie hier TCP stirbt auf einem Linux-Laptop).
Normalerweise verwende ich Dienstprogramme aus diesem Satz für das Netzwerk-Debugging:
ifconfig
(oderip link
,ip addr
) – um Informationen über Netzwerkschnittstellen zu erhaltenping
– zur Validierung, ob der Zielhost von meiner Maschine aus erreichbar ist.ping
Dies könnte auch für grundlegende DNS-Diagnosen verwendet werden – wir könnten den Host über die IP-Adresse oder den Hostnamen anpingen und dann entscheiden, ob DNS überhaupt funktioniert. Und danntraceroute
odertracepath
odermtr
um zu sehen, was auf dem Weg dorthin los ist.dig
– alles DNS diagnostizierendmesg | less
oderdmesg | tail
oderdmesg | grep -i error
– um zu verstehen, was der Linux-Kernel über Probleme denkt.netstat -antp
+| grep smth
– meine beliebteste Verwendung des netstat-Befehls, der Informationen über TCP-Verbindungen anzeigt. Oft führe ich eine Filterung mit grep durch. Siehe auch das neuess
Befehl (voniproute2
der neue Standard Suite von Linux-Netzwerktools) undlsof
wie inlsof -ai tcp -c some-cmd
.telnet <host> <port>
– ist sehr nützlich für die Kommunikation mit verschiedenen TCP-Diensten (z. B. auf SMTP-, HTTP-Protokollen), außerdem könnten wir die allgemeine Möglichkeit prüfen, sich mit einem TCP-Port zu verbinden.iptables-save
(unter Linux) – um das volle zu dumpen iptables-Tabellenethtool
– Abrufen aller Parameter der Netzwerkschnittstellenkarte (Status der Verbindung, Geschwindigkeit, Offload-Parameter …)socat
– das Tool der Schweizer Armee zum Testen aller Netzwerkprotokolle (UDP, Multicast, SCTP…). Besonders nützlich (mehr als Telnet) mit ein paar-d
Optionen.iperf
– zum Testen der Bandbreitenverfügbarkeitopenssl
(s_client
,ocsp
,x509
…), um alle SSL/TLS/PKI-Probleme zu beheben.wireshark
– das leistungsstarke Tool zum Erfassen und Analysieren des Netzwerkverkehrs, mit dem Sie viele Netzwerkfehler analysieren und abfangen können.iftop
– große Benutzer im Netzwerk/Router anzeigen.iptstate
(unter Linux) – aktuelle Ansicht der Verbindungsverfolgung der Firewall.arp
(oder das neue (Linux)ip neigh
) – zeigt den Status der ARP-Tabelle.route
oder die neuere (unter Linux)ip route
– den Status der Routing-Tabelle anzeigen.strace
(odertruss
,dtrace
odertusc
je nach System) – ist ein nützliches Tool, das zeigt, welche Systemaufrufe das Problem verarbeitet, es zeigt auch Fehlercodes (errno) an, wenn Systemaufrufe fehlschlagen. Diese Informationen sagen oft genug aus, um das Systemverhalten zu verstehen und ein Problem zu lösen. Alternativ können Sie Haltepunkte für einige Netzwerkfunktionen ingdb
verwenden können Sie erfahren lassen, wann sie gemacht werden und mit welchen Argumenten.- um Firewall-Probleme unter Linux zu untersuchen:
iptables -nvL
zeigt, wie viele Pakete von jeder Regel abgeglichen werden (iptables -Z
zum Nullstellen der Zähler). DasLOG
Das in die Firewall-Ketten eingefügte Ziel ist nützlich, um zu sehen, welche Pakete sie erreichen und wie sie bereits transformiert wurden, wenn sie dort ankommen. Um weiter zu kommenNFLOG
(verbunden mitulogd
) protokolliert das vollständige Paket.