Network "debugging" mini-HOWTO
Είναι αρκετά συνηθισμένο χρήστες να μπαίνουν σε Linux και να διαμαρτύρονται πως δεν έχουν Internet επειδή δεν ανοίγουν οι σελίδες στο browser τους. Ο παρακάτω οδηγός θα τους βοηθήσει να εντοπίσουν σε ποιο σημείο ακριβώς υπάρχει το πρόβλημα. Αν σε ένα σημείο αντιμετωπίσετε πρόβλημα δεν υπάρχει λόγος να πάτε παρακάτω. Διορθώστε πρώτα το πρόβλημα εκείνου του βήματος και ύστερα συνεχίστε.
- Όλα τα παρακάτω γίνονται μέσω ενός τερματικού (terminal) ως χρήστης 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 και τα απενεργοποιούμε.