Fehlerbehebung und Debugging im Linux-Netzwerk

80

Von Zeit zu Zeit waren Linux- und Unix-Benutzer mit verschiedenen Netzwerkproblemen konfrontiert. Viele dieser Probleme werden hier und in einigen anderen Fehlerbehebungsforen vorgestellt, sie sind jedoch sehr konkret und enthalten viele zusätzliche technische Informationen. Manchmal ist es schwierig, den Hauptgrund und den wahren Grund für das Verhalten fehlerhafter Systeme zu verstehen.

Mit dieser Frage möchte ich eine Community-Wiki- Seite starten, auf der wir allgemeine Informationen zur Fehlerbehebung und zum Debuggen in unserem Netzwerk erhalten. Ich hoffe, die Linux- und Unix-Benutzer konnten auf dieser Seite ihre Netzwerkprobleme leichter erkennen und lösen ("teilen und überwinden").

Das übergeordnete Element dieser Seite sollte die bewährte Methode zur Diagnose von Problemen sein . Hier sollten wir uns jedoch auf die Behebung von Netzwerkproblemen aus dem Benutzer- und Kernelbereich konzentrieren.

Ich nehme an, wenn Sie:

  1. Teilen Sie die Informationen zur Verwendung eines großartigen Netzwerkdiagnosetools mit konkreten Verwendungsbeispielen und Beispielen für Netzwerkfehler, die Sie beim Auffinden unterstützen.
  2. Teilen Sie den Link zu dem großartigen Netzwerk-Tutorial, das mit diesem Thema verbunden ist
  3. Erzählen Sie von einer allgemeinen Methode oder einem Rezept, mit dem sich einige Netzwerkprobleme lösen lassen
  4. Geben Sie Informationen zu Ihrem Tool-Set für das Debuggen und die Fehlerbehebung im Netzwerk frei

es würde perfekt zu diesem Thema passen.


Ich beginne mit dem Teilen des Links zu verschiedenen Diagnosetools und dem 12 Jahre alten einfachen Tutorial . Auch Archlinux Tutorial scheint aktuelle Informationen zu unserem Thema zu haben. Und um in das Linux Networking einzutauchen, müssen wir unbedingt das Linux Networking-HOWTO besuchen .

DR.
quelle
Bei dieser Frage und Antwort ist noch Folgendes zu beachten: 2 Computer im Netzwerk, die mit derselben IP-Adresse konfiguriert sind: unix.stackexchange.com/questions/85887/… .
slm
Ein weiterer nützlicher Leitfaden zur Fehlerbehebung im Netzwerk: cisco.com/en/US/docs/internetworking/troubleshooter/guide/…
Ryne Everett

Antworten:

118

Ich denke, allgemeine Prinzipien der Netzwerk-Fehlerbehebung sind:

  1. Finden Sie heraus, auf welcher Ebene des TCP / IP-Stacks (oder eines anderen Stacks) das Problem auftritt.
  2. Verstehen Sie, wie sich das System korrekt verhält und was vom normalen Systemstatus abweicht
  3. Versuchen Sie, das Problem in einem Satz oder in mehreren Wörtern auszudrücken
  4. Versuchen Sie, das Problem mithilfe der Informationen aus dem Buggy-System, Ihrer eigenen Erfahrung und der Erfahrung anderer Personen (Google, verschiedene Foren usw.) bis zum Erfolg (oder Misserfolg) zu lösen.
  5. Wenn Sie versagen, fragen Sie andere Leute nach Hilfe oder Ratschlägen

Normalerweise erhalte ich alle erforderlichen Informationen mit allen erforderlichen Tools und versuche, diese Informationen mit meiner Erfahrung abzugleichen. Die Entscheidung, welche Ebene des Netzwerkstapels den Fehler enthält, hilft, unwahrscheinliche Varianten auszuschließen. Die Erfahrung anderer 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. Es scheint, dass es eine magische Funktion in meinem Gehirn gibt SolveNetworkProblem(information_about_system_state, my_experience, people_experience), die manchmal genau die richtige Antwort liefert und manchmal auch fehlschlägt (wie hier: TCP stirbt auf einem Linux-Laptop ).

Normalerweise verwende ich Utils aus diesem Set für das Netzwerk-Debugging:

  • ifconfig(oder ip link, ip addr) - zum Abrufen von Informationen zu Netzwerkschnittstellen
  • ping- zur Überprüfung, ob der Zielhost von meinem Computer aus erreichbar ist. pingDies könnte auch für die grundlegende DNS-Diagnose verwendet werden. Wir könnten den Host anhand der IP-Adresse oder des Hostnamens anpingen und dann entscheiden, ob DNS überhaupt funktioniert. Und dann tracerouteoder tracepathoder um mtrzu schauen, was auf dem Weg dahin los ist.
  • dig - diagnostizieren Sie alles DNS
  • dmesg | lessoder dmesg | tailoder dmesg | grep -i error- um zu verstehen, was der Linux-Kernel von Problemen hält.
  • netstat -antp+ | grep smth- Meine häufigste Verwendung des Befehls netstat, mit dem Informationen zu TCP-Verbindungen angezeigt werden. Oft filtere ich mit grep. Siehe auch den neuen ssBefehl (aus iproute2der neuen Standardsuite der Linux-Netzwerktools) und lsofwie in lsof -ai tcp -c some-cmd.
  • telnet <host> <port> - ist sehr nützlich für die Kommunikation mit verschiedenen TCP-Diensten (z. B. über SMTP, HTTP-Protokolle). Wir könnten auch die allgemeine Möglichkeit prüfen, eine Verbindung zu einem TCP-Port herzustellen.
  • iptables-save(unter Linux) - um die vollständigen iptables-Tabellen zu sichern
  • ethtool - alle Parameter der Netzwerkkarte abrufen (Status der Verbindung, Geschwindigkeit, Auslagerungsparameter ...)
  • socat- Das Schweizer Armee-Tool zum Testen aller Netzwerkprotokolle (UDP, Multicast, SCTP ...). Besonders nützlich (mehr als Telnet) mit ein paar -dOptionen.
  • iperf - um die Bandbreitenverfügbarkeit zu testen
  • openssl( s_client, ocsp, x509...) debuggen alle SSL / TLS / PKI Fragen.
  • 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 ARP-Tabellenstatus an.
  • routeoder die neuere (unter Linux) ip route- zeigt den Status der Routingtabelle an.
  • strace(oder truss, dtraceoder tuscje nach System) - ist ein nützliches Tool, das anzeigt, welche Systemaufrufe den Problemprozess ausführen. Außerdem werden Fehlercodes (errno) angezeigt, wenn Systemaufrufe fehlschlagen. Diese Informationen sagen oft genug aus, um das Systemverhalten zu verstehen und ein Problem zu lösen. Alternativ können Sie durch die Verwendung von Haltepunkten für einige Netzwerkfunktionen in gdbherausfinden, wann sie erstellt wurden und mit welchen Argumenten.
  • Untersuchung von Firewall-Problemen unter Linux: iptables -nvLZeigt an, wie viele Pakete von jeder Regel abgeglichen werden ( iptables -Zum die Zähler auf Null zu setzen). Das LOGin 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 kommen NFLOG(verbunden mit ulogd) wird das volle Paket protokolliert.
DR.
quelle
Meine Güte, reden über gründliche!
mVChr
7
Ich würde hinzufügen nmap. Das Profil der offenen Ports auf einem Computer kann Ihnen schnell Hinweise geben, ob Sie beispielsweise einen Linux- oder einen Windows-Server verwenden.
Adam Monsen
7
Ich würde hinzufügen tcpdump. Als Standardpaketanalysator für TCP.
Jhvaras
14

Eine überraschende Anzahl von "Netzwerkproblemen" resultiert aus DNS-Problemen der einen oder anderen Art. Die anfängliche Fehlerbehebung sollte verwendet ping -n w.x.y.zwerden, um die DNS-Auflösung eines Hostnamens auszulassen und nur die IP-Konnektivität zu überprüfen. Verwenden Sie anschließend route -n, um die Standard-IP-Route ohne DNS-Auflösung zu überprüfen.

Nach IP - Konnektivität zu überprüfen und Routing nslookup, hostund digliefern Informationen können. Denken Sie daran, dass "Sperren" darauf hinweisen kann, dass DNS-Zeitüberschreitungen auftreten.

Vergessen Sie nicht, Existenz und Inhalt von zu überprüfen /etc/resolv.conf. DHCP-Clients ändern diese Datei bei jedem Lease und machen manchmal einen Fehler. Wenn der Speicherplatz knapp ist, findet möglicherweise keine Aktualisierung statt.

Bruce Ediger
quelle
8

Verkabelungsprobleme können auftreten. Wenn Sie Zugriff auf die Hardware haben, stellen Sie sicher, dass alle Kabel eingesteckt und mechanisch eingerastet sind. Wenn Sie Router oder Ethernet-Schnittstellen sehen, vergewissern Sie sich, dass die Verbindungsleuchten leuchten.

Aus der Ferne muss man sich auf ethtoolund verlassen mii-tool.

[root@flask ~]# ethtool eth0
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Speed: 10Mb/s
        Duplex: Half
        Port: MII
        PHYAD: 24
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: d
        Current message level: 0x00000001 (1)
                               drv
        Link detected: yes

"Verbindung erkannt: ja" ist gut, aber 10 MBit / s und Halbduplex sind nicht gut, da die Netzwerkkarte auf diesem Computer eine bessere Leistung erbringen kann. Ich muss herausfinden, ob die Netzwerkkarte oder das Kabel veraltet ist. Ein anderer Computer, der an denselben Router angeschlossen ist, meldet 100 MBit / s, Vollduplex.

Bruce Ediger
quelle