Netzwerkprobleme debuggen
Dieser Artikel beschreibt die Vorgehensweise zum Debuggen von Verbindungsproblemen und stellt dazu nützliche Werkzeuge vor.
Einloggen
Via SSH auf dem Router einloggen.
IP-Adresse vorhanden und Device UP?
ifconfig
Beispielausgabe für Device ath0:
root@10-0-0-1:~# ifconfig [...] ath0 Link encap:Ethernet HWaddr 00:0B:6B:XY:XY:XY inet addr:10.0.0.1 Bcast:10.0.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:507 errors:0 dropped:0 overruns:0 frame:0 TX packets:114 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:147932 (144.4 KiB) TX bytes:27919 (27.2 KiB) [...]
Wir sehen hier, das Device hat eine IP (10.0.0.1 mit Netzmaske 255.255.0.0) und der Status ist UP. Auch werden Pakete empfangen und gesendet. (RX/TX bytes)
ip
Alternativ kann man auch ip verwenden:
root@10-0-0-1:~# ip a [...] 8: ath0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 00:0b:6b:XY:XY:XY brd ff:ff:ff:ff:ff:ff inet 10.0.0.1/16 brd 10.0.255.255 scope global ath0 [...]
Routen vorhanden?
Wir wollen feststellen, ob eine Defaultroute vorhanden ist und ob Routen von OLSR, B.A.T.M.A.N. oder einem sonstigen Routingdämon gesetzt wurden.
route
root@10-11-0-101:~# route [...] 10.0.0.3 10.0.0.2 255.255.255.255 UGH 2 0 0 ath0 [...] default 192.168.178.1 0.0.0.0 UG 0 0 0 eth0 [...]
Die erste Route ist eine Hostroute die vom Routingdämon gesetzt wurde. Sie besagt, dass wir 10.0.0.3 über den Gateway 10.0.0.2 erreichen können. Davon kann es in großen Netzen eine ganze Menge geben. Darunter steht hier die Defaultroute die 192.168.178.1 als Gateway hat.
ip r
Auch mit "ip r" kann man sich die Routing-Tabelle ausgeben lassen:
root@10-11-0-1:~# ip r [...] 10.1.0.3 via 10.1.0.2 dev ath0 metric 2 [...] default via 192.168.178.1 dev eth0
Verbindung prüfen
Ping
Mit ping kann überprüft werden, ob ein anderer Rechner/Knoten erreichbar ist. Dabei empfiehlt es sich zunächst den Ping auf eine IP-Adresse zu testen, hier z.B. 8.8.8.8 (ein nameserver von google).
root@10-0-0-1:~# ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: seq=0 ttl=55 time=54.293 ms [...]
Kommen hier Antworten (64 bytes from 8.8.8.8) dann erreichen wir den Rechner.
Im nächsten Schritt können wir einen Ping auf eine Domain versuchen, damit sehen wir auch gleich ob die Auflösung von Domainnamen zu IP-Adressen funktioniert. Bei Erfolg sieht das so aus:
root@10-0-0-1:~# ping heise.de PING heise.de (193.99.144.80): 56 data bytes 64 bytes from 193.99.144.80: seq=0 ttl=248 time=46.744 ms [...]
traceroute
Traceroute zeigt die Route eines Pakets durchs Netz. Damit lässt sich feststellen, wo Pakete "stecken" bleiben.
Zunächst ein erfolgreiches traceroute:
root@10-0-0-1:~# traceroute 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 38 byte packets 1 192.168.178.1 (192.168.178) 0.525 ms 0.446 ms 0.363 ms 2 rdsl-agsb-de01.nw.mediaways.net (213.20.57.2) 61.494 ms 36.844 ms 35.408 ms [...] 11 209.85.254.126 (209.85.254.126) 51.096 ms 209.85.249.162 (209.85.249.162) 54.538 ms 209.85.254.126 (209.85.254.126) 45.853 ms 12 google-public-dns-a.google.com (8.8.8.8) 66.212 ms 46.839 ms 48.698 ms
Der erste Hop ist dabei der Defaultgateway aus der Routingtabelle. Danach gehts weiter zum Provider und kommt bei Hop 12 schliesslich am Ziel an.
Versuchen wir traceroute zu einem nicht erreichbaren Rechner, sieht das dagegen so aus:
root@10-0-0-1:~# traceroute 8.3.3.3 traceroute to 8.3.3.3 (8.3.3.3), 30 hops max, 38 byte packets 1 192.168.178.1 (192.168.178.1) 0.499 ms 0.431 ms 0.354 ms 2 rdsl-agsb-de01.nw.mediaways.net (213.20.57.2) 35.736 ms 36.867 ms 35.637 ms [...] 16 ge-4-0-60.ipcolo1.LosAngeles1.Level3.net (4.69.144.46) 203.102 ms !H * 214.853 ms !H
Bei Hop 16 gehts also nicht mehr weiter.
Pakete anzeigen
tcpdump
Mit tcpdump kann man sich Pakete im Netzwerktraffic anzeigen lassen um so Probleme zu finden. Um z.B alle Pakete auf der Schnittstelle ath0 anzuzeigen:
tcpdump -i ath0
iptables Firewall
Um auszuschliessen, dass die Netzwerkprobleme mit der Firewall zuammenhängen ist es oft hilfreich, zu Testzwecken in der Firewall alles zu erlauben:
iptables -I INPUT -j ACCEPT iptables -I FORWARD -j ACCEPT iptables -I OUTPUT -j ACCEPT