Network Debugging mini Howto

Από Hellug Wiki

Network "debugging" mini-HOWTO

Είναι αρκετά συνηθισμένο χρήστες να μπαίνουν σε Linux και να διαμαρτύρονται πως δεν έχουν Internet επειδή δεν ανοίγουν οι σελίδες στο browser τους. Ο παρακάτω οδηγός θα τους βοηθήσει να εντοπίσουν σε ποιο σημείο ακριβώς υπάρχει το πρόβλημα. Αν σε ένα σημείο αντιμετωπίσετε πρόβλημα δεν υπάρχει λόγος να πάτε παρακάτω. Διορθώστε πρώτα το πρόβλημα εκείνου του βήματος και ύστερα συνεχίστε.

  • Όλα τα παρακάτω γίνονται μέσω κονσόλας ως root (εναλλακτικά βάλτε το sudo ως πρόθεμα σε κάθε εντολή).
  • Ελέγχουμε αν η κάρτα δικτύου μας έχει πάρει IP
# ifconfig -a
eth0      Link encap:Ethernet  HWaddr AA:BB:CC:DD:EE:FF  
     -->  inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0 <---
          UP BROADCAST RUNNING MULTICAST  MTU:1490  Metric:1
          RX packets:1574378 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1118056 errors:0 dropped:0 overruns:15 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1403173974 (1338.1 Mb)  TX bytes:301645527 (287.6 Mb)
          Interrupt:16 Base address:0x2000 
ath0    Link encap:Ethernet  HWaddr 00:11:22:33:44:55  
     ---> inet addr:192.168.2.10  Bcast:192.168.2.255  Mask:255.255.255.0  <---
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5203 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4342 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:4362211 (4.3 MB)  TX bytes:517861 (517.8 KB)

Το παραπάνω σημαίνει πως έχουμε πάρει IP από το router είτε την έχουμε βάλει με το χέρι.

Προσοχή: αν βλέπουμε IP της μορφής 169.254.Χ.Υ αυτό σημαίνει πως ΔΕΝ έχουμε πάρει σωστά IP! Το range 169.254.Χ.Υ χρησιμοποιείται από τους dhcp clients ως fallback. Αν έχετε πάρει IP αυτής της μορφής δεν λειτουργεί ο DHCP server του router σας ή κάποιο καλώδιο δεν είναι σωστά τοποθετημένο. Κάντε έλεγχο πρώτα στα καλώδια και έπειρα στο router. Έχουν χαθεί άπειρες ώρες άδικα επειδή ένα καλώδιο είχε μετακινηθεί κατά ελάχιστα...

  • Αν ΔΕΝ έχει καθόλου IP και θέλουμε να προσθέσουμε χειροκίνητα:
#ifconfig eth0 192.168.1.10 netmask 255.255.255.0

Και για να προσθέσουμε και ένα default route, υποθέτωντας ότι το router μας έχει IP 192.168.1.254:

#route add default gw 192.168.1.254
  • Αν ΔΕΝ βλέπουμε καμία κάρτα εκτός του lo:
#ifconfig eth0 up

Kάνουμε UP το eth0 interface, εφόσον το έχει δει ο κατάλληλος driver, "active"

    • Αν δεν την δει και πάλι:
# dmesg |grep -i eth0

Κοιτάμε για αναφορές σχετικά με "eth0" στο kernel log

      • Αν τίποτα,
#lspci|grep -i ethernet

Kοιτάμε για το chip της κάρτας δικτύου μας

Μετά ψάχνουμε στο web (ή στο documentation των kernel sources) για το όνομα του driver που υποστηρίζει το chip μας και το φορτώνουμε με modprobe.

Αν δεν έχουμε το αντίστοιχο module, ψάχνουμε στο web για όνομα_διανομής+το_chip_μας

        • Αν δεν έχει precompiled support ο generic kernel της διανομής μας έστω και σε χωριστό πακέτο (απίθανο),

Configure και compile τον kernel (π.χ. search στο web για όνομα_διανομής+kernel+compile+howto, αν δεν βρούμε, γενικές οδηγίες εδώ, εδώ και σε πολλά άλλα παρόμοια guides). Αναφορές για τα διάφορα chipsets καρτών Ethernet βρίσκουμε στην κατηγορία Device Drivers -> Network Device support -> Ethernet (10 or 100Mbit)/(1000Mbit). Αν χρησιμοποιούμε το menuconfig (ncurses) interfaces, δίνοντας "?" (shift+/) έχοντας επιλέξει κάθε driver της κατηγορίας βλέπουμε αναλυτικές πληροφορίες, chipsets που υποστηρίζει και module name.

  • Κάνουμε έλεγχο για να βρούμε ποιο είναι το default gateway μας. Ποιός είναι δηλαδή ο "router" μας.
#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.2.0      0.0.0.0         255.255.255.0   U     0      0        0 ath0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
---> 0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0 <---

Το παραπάνω σημαίνει ότι το default gateway μας είναι το 192.168.1.1 δηλαδή ο router μας από το ethernet (eth0) interface. Αν δεν υπάρχει default gateway ΔΕΝ μπορούμε να βγούμε προς το internet. Προσοχή χρειάζεται όταν έχουμε πολλαπλά interfaces (ethernet, wireless) ώστε το iface του default route να είναι αυτό που χρειάζεται, eth0, eth1, ath0, κτλ. και όχι κάποιο από τα δευτερεύοντα.

Εναλλακτικά ο παραπάνω έλεγχος μπορεί να γίνει με τις εντολές: netstat -nr και ip route

# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0   0.0.0.0         255.255.255.0 U         0 0          0 eth1
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
---> 0.0.0.0         192.168.1.1 0.0.0.0         UG        0 0          0 eth1 <--- 
# ip route
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.10 
127.0.0.0/8 dev lo  scope link 
---> default via 192.168.1.1 dev eth1 <--- 

Σε bsd συστήματα το output ίσως είναι λίγο διαφορετικό:

# netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
---> default            192.168.1.254      UGSc       52     1511    en0 <---
192.168.1          link#4             UCS         5        0    en0
192.168.1.10       127.0.0.1          UHS         0        1    lo0
192.168.1.255      link#4             UHLWb       3      152    en0
  • Αν όλα τα παραπάνω είναι εντάξει συνεχίζουμε κάνοντας ping τον gateway μας.

Με την επιλογή -c (count) 5 στέλνουμε μόνο 5 πακέτα και περιμένουμε τις απαντήσεις. Σε αντίθετη περίπτωση που δεν χρησιμοποιούσαμε το -c θα έπρεπε να πατήσουμε ctrl+c για να σταματήσουμε το ping.

# ping -c 5 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.545 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.497 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.496 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.498 ms
64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=0.501 ms

--- 192.168.1.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.496/0.507/0.545/0.027 ms

Τα παραπάνω σημαίνουν ότι ο router μας απαντάει.

  • Κάνουμε ping μια ένα server στο internet που γνωρίζουμε την IP του

Μια εύκολη IP να θυμόμαστε πάντα είναι ο nameserver της OTENET, 195.170.0.1 (dns1.otenet.gr). Επίσης σχετικά εύκολο: 194.177.210.210 (nic.grnet.gr), ο nameserver του ΕΔΕΤ (grnet.gr). Ακόμα πιο εύκολο, ο νέος dns server του Google (8.8.8.8)

# ping -c 5 195.170.0.1
PING 195.170.0.1 (195.170.0.1) 56(84) bytes of data.
64 bytes from 195.170.0.1: icmp_seq=1 ttl=122 time=98.5 ms
64 bytes from 195.170.0.1: icmp_seq=2 ttl=122 time=82.3 ms
64 bytes from 195.170.0.1: icmp_seq=3 ttl=122 time=37.7 ms
64 bytes from 195.170.0.1: icmp_seq=4 ttl=122 time=26.8 ms
64 bytes from 195.170.0.1: icmp_seq=5 ttl=122 time=68.4 ms

--- 195.170.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4003ms
rtt min/avg/max/mdev = 26.830/62.802/98.597/26.894 ms

 ping -c 5 194.177.210.210
PING 194.177.210.210 (194.177.210.210) 56(84) bytes of data.
64 bytes from 194.177.210.210: icmp_seq=1 ttl=250 time=69.2 ms
64 bytes from 194.177.210.210: icmp_seq=2 ttl=250 time=24.0 ms
64 bytes from 194.177.210.210: icmp_seq=3 ttl=250 time=33.3 ms
64 bytes from 194.177.210.210: icmp_seq=4 ttl=250 time=55.1 ms
64 bytes from 194.177.210.210: icmp_seq=5 ttl=250 time=34.1 ms

--- 194.177.210.210 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4002ms
rtt min/avg/max/mdev = 24.099/43.189/69.265/16.524 ms

 ping -c 5 8.8.8.8 
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=245 time=61.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=245 time=63.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=245 time=62.3 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=245 time=61.0 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=245 time=62.6 ms

--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 61.093/62.287/63.910/1.010 ms

Αν δεν απαντάει κανένα από τα 3 σε ping έχουμε πρόβλημα από το router μας και μετά! Ξανακοιτάμε τις ρυθμίσεις της συνδεσής μας (username/password/κτλ)


  • Κοιτάμε τι υπάρχει μέσα στο /etc/resolv.conf
# cat /etc/resolv.conf 
nameserver 194.177.210.210 

Πρέπει οπωςδήποτε να υπάρχει μια εγγραφή της μορφής: namerserver A.B.C.D το A.B.C.D μπορεί να είναι και η IP του router σας.

  • Κάνουμε ping με το dns όνομα τους nameservers που κάναμε πριν ping με την IP τους:
# ping -c 5 dns1.otenet.gr
PING dns1.otenet.gr (195.170.0.1) 56(84) bytes of data.
64 bytes from dns1.otenet.gr (195.170.0.1): icmp_seq=1 ttl=122 time=49.5 ms
64 bytes from dns1.otenet.gr (195.170.0.1): icmp_seq=2 ttl=122 time=46.9 ms
64 bytes from dns1.otenet.gr (195.170.0.1): icmp_seq=3 ttl=122 time=26.1 ms
64 bytes from dns1.otenet.gr (195.170.0.1): icmp_seq=4 ttl=122 time=41.2 ms
64 bytes from dns1.otenet.gr (195.170.0.1): icmp_seq=5 ttl=122 time=30.8 ms

--- dns1.otenet.gr ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4002ms
rtt min/avg/max/mdev = 26.199/38.956/49.538/9.039 ms

ping -c 5 nic.grnet.gr
PING nic.grnet.gr (194.177.210.210) 56(84) bytes of data.
64 bytes from nic.grnet.gr (194.177.210.210): icmp_seq=1 ttl=250 time=34.6 ms
64 bytes from nic.grnet.gr (194.177.210.210): icmp_seq=2 ttl=250 time=34.9 ms
64 bytes from nic.grnet.gr (194.177.210.210): icmp_seq=3 ttl=250 time=34.5 ms
64 bytes from nic.grnet.gr (194.177.210.210): icmp_seq=4 ttl=250 time=23.9 ms
64 bytes from nic.grnet.gr (194.177.210.210): icmp_seq=5 ttl=250 time=28.7 ms

--- nic.grnet.gr ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 23.968/31.389/34.960/4.378 ms

Αν δεν παίρνουμε απαντήσεις σημαίνει πως υπάρχει πρόβλημα με το DNS resolution. Μπορεί το router μας ή οι DNS servers του ISP μας να έχουν πρόβλημα. Μπορούμε να τους αλλάξουμε χρησιμοποιώντας τους servers που κάναμε ping παραπάνω και μας απαντησαν. Ο πιο απλός τρόπος να χρησιμοποιήσουμε άλλους DNS servers είναι ο παρακάτω:

echo "nameserver 194.177.210.210" > /etc/resolv.conf
echo "nameserver 195.170.0.1" >> /etc/resolv.conf


Δοκιμάζουμε και πάλι να κάνουμε ping στο nic.grnet.gr και στο dns1.otenet.gr. Τώρα πρέπει να μας απαντάνε.

  • Ανοίγουμε τον browser μας και δοκιμάζουμε να δούμε σελίδες.

Αν δεν βλέπουμε πάλι ελέγχουμε τα proxy settings του browser και τα απενεργοποιούμε.