domenica 30 novembre 2008

Impossibile navigare con MTU:64 in eth0

In 10 anni di Linux - troppe volte - ho dovuto penare con la configurazione di schede di rete wireless, ma mai... e dico mai, mi era capitato di aver problemi con la configurazione di una scheda di rete cablata.
Appunto!
Questa settimana, in due casi distinti (su altrettante nuove installazioni di Ubuntu 8.10), mi è successo di non riuscire a navigare sul web, pur essendo connesso al router via cavo.
Poi, improvvisamente... mentre gli innumerevoli ping, fallivano miseramente e lo sconforto prendeva il sopravvento, mi accorgo che lanciando ifconfig, alla quarta riga ottengo un valore mtu errato... più precisamente: MTU:64 .
Ecco l'intoppo, un valore corretto potrebbe essere 1500 e non 64.
Quindi imposto al volo l'mtu con il comando:

# ifconfig eth0 down && ifconfig eth0 mtu 1500 up [invio]

e di seguito mi faccio assegnare un indirizzo ip dal router con:

# dhclient eth0 [invio]

infine verifico con un ping che la grande rete sia raggiungibile:

$ ping -c5 google.it [invio]

perfetto... funziona (dopo il secondo dhclient), ma la gioia dura poco, perché al successivo riavvio le impostazioni sono perse e si ricomincia da capo. Certo, non è che sia un grosso problema, ma le persone a cui installo Ubuntu, non troverebbero comodo lanciare questi arcani comandi ad ogni boot. Quindi bisogna trovare una soluzione definitiva, che fortunatamente non tarda ad arrivare.
Infatti il problema risiede in dhclient, che se lanciato manualmente prima di settare il valore mtu, ci restituisce un poco rassicurante:

send_packet: Message too long

e poiché questo risultato è causato dall'opzione interface-mtu presente nel file dhclient.conf - per risolvere il problema, basta aprire il file /etc/dhcp3/dhclient.conf con:

# gedit /etc/dhcp3/dhclient.conf [invio]

ed eliminare il riferimento ad interface-mtu, modificando la seguente sezione del file:

request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name,
netbios-name-servers, netbios-scope, interface-mtu;

in questo modo:

request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name,
netbios-name-servers, netbios-scope;

Poi, visto che abbiamo aperto il file: /etc/dhcp3/dhclient.conf
sarebbe un peccato non approfittarne per iniziare ad utilizzare opendns .

Bene. Fatto questo, possiamo riavviare la macchina e da ora in poi navigheremo in internet come una scheggia!

2 commenti:

Unknown ha detto...

Ciao Toonik, innanzitutto complimenti per la dettagliata spiegazione sull'impostazione della connessione internet oggetto di questa discussione, tuttavia ho riscontrato alcuni problemi che cercherò di spiegarti brevemente.

Ho seguito passo passo ciò che hai scritto:
Prima ho controllato l'MTU che, come volevasi dimostrare su eth0 era impostato su 64.

alastor@ubuntu:~$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:15:f2:19:d0:89
UP BROADCAST RUNNING MULTICAST MTU:64 Metric:1
RX packets:11 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:704 (704.0 B) TX bytes:0 (0.0 B)
Interrupt:20

eth1 Link encap:Ethernet HWaddr 00:15:00:35:3f:b7
inet6 addr: fe80::215:ff:fe35:3fb7/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:15 errors:0 dropped:4 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:22 Base address:0xc000 Memory:fa9ff000-fa9fffff

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:776 (776.0 B) TX bytes:776 (776.0 B)


Successivamente ho inserito la tua stringa per portarlo a 1500

alastor@ubuntu:~$ sudo -s
[sudo] password for alastor:
root@ubuntu:~# ifconfig eth0 down && ifconfig eth0 mtu 1500 up
root@ubuntu:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:15:f2:19:d0:89
inet6 addr: fe80::215:f2ff:fe19:d089/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:250 (250.0 B)
Interrupt:20

eth1 Link encap:Ethernet HWaddr 00:15:00:35:3f:b7
inet6 addr: fe80::215:ff:fe35:3fb7/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:17 errors:0 dropped:6 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:22 Base address:0xc000 Memory:fa9ff000-fa9fffff

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:776 (776.0 B) TX bytes:776 (776.0 B)


A questo punto ho inserito la stringa per farmi assegnare un indirizzo ip dal router, il risultato lo puoi vedere di seguito, e da qui sono iniziati i miei problemi.

root@ubuntu:~# dhclient eth0
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

SIOCSIFADDR: No buffer space available
Listening on LPF/eth0/00:15:f2:19:d0:89
Sending on LPF/eth0/00:15:f2:19:d0:89
Sending on Socket/fallback
DHCPREQUEST of 192.168.1.126 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.1.126 from 192.168.1.1
SIOCSIFADDR: No buffer space available
SIOCSIFNETMASK: Cannot assign requested address
SIOCSIFBRDADDR: Cannot assign requested address
SIOCADDRT: No such process
bound to 192.168.1.126 -- renewal in 36920 seconds.


Ho provato e riprovato ancora controllando che l'MTU rimanesse a 1500 come impostato precedentemente:


root@ubuntu:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:15:f2:19:d0:89
inet6 addr: fe80::215:f2ff:fe19:d089/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1170 (1.1 KB) TX bytes:838 (838.0 B)
Interrupt:20

eth1 Link encap:Ethernet HWaddr 00:15:00:35:3f:b7
inet6 addr: fe80::215:ff:fe35:3fb7/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:17 errors:0 dropped:6 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:22 Base address:0xc000 Memory:fa9ff000-fa9fffff

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:776 (776.0 B) TX bytes:776 (776.0 B)

root@ubuntu:~# dhclient eth0
There is already a pid file /var/run/dhclient.pid with pid 5790
killed old client process, removed PID file
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

SIOCSIFADDR: No buffer space available
Listening on LPF/eth0/00:15:f2:19:d0:89
Sending on LPF/eth0/00:15:f2:19:d0:89
Sending on Socket/fallback
DHCPREQUEST of 192.168.1.126 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.1.126 from 192.168.1.1
SIOCSIFADDR: No buffer space available
SIOCSIFNETMASK: Cannot assign requested address
SIOCSIFBRDADDR: Cannot assign requested address
SIOCADDRT: No such process
bound to 192.168.1.126 -- renewal in 33350 seconds.
root@ubuntu:~# exit
exit
alastor@ubuntu:~$ ping -c5 google.it
ping: unknown host google.it


Insomma alla fine il mio PC non è ancora in grado di connettersi ad internet, inoltre ho riscontrato un'altro problema del quale non trovo soluzione, ovvero quando inserisco il comando: per aprire il file /etc/dhcp3/dhclient.conf con: # gedit /etc/dhcp3/dhclient.conf non vedo alcun testo da modificare come da tuoi suggerimenti.
Ho provato diverse volte ma l'esito è sempre lo stesso, potresti aiutarmi per favore? Purtroppo non ho grande dimestichezza con ubuntu perchè l'ho installato solo ieri e stò cercando di imparare ad utilizzarlo.
Grazie mille in anticipo

Ciao

Rudi

Unknown ha detto...

@Rudi
grazie dei complimenti, ma... passiamo al dunque ;-)

Dall'output del tuo ifconfig vedo:

eth0 Link encap:Ethernet HWaddr 00:15:f2:19:d0:89
inet6 addr: fe80::215:f2ff:fe19:d089/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1170 (1.1 KB) TX bytes:838 (838.0 B)
Interrupt:20

mentre dovrebbe essere più o meno così:

eth0 Link encap:Ethernet HWaddr 00:15:f2:19:d0:89
inet addr:192.168.1.128 Bcast:255.255.255.255 Mask:255.255.255.0
inet6 addr: fe80::215:f2ff:fe19:d089/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:9396 errors:0 dropped:0 overruns:0 frame:0
TX packets:7649 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10921619 (10.4 MiB) TX bytes:1070371 (1.0 MiB)
Interrupt:18 Base address:0xc000

in pratica manca la seconda riga, quella che definisce le caratteristiche della stessa interfaccia di rete.
Prima di provare a far qualcosa, dammi qualche info:

1) Hai anche windows sullo stesso computer?
In questo caso potrebbe trattarsi di un problema di "Wake on LAN" cioè una feature di windows, che allo spegnimento del sistema... spegne anche la scheda di rete (quasi un dispetto gratuito).

2) Usi Ubuntu o Kubuntu?
È importante per capire quali strumenti hai a disposizione nel tuo pc... ad esempio, il comando:
# gedit /etc/dhcp3/dhclient.conf [invio]
se dato da una Kubuntu non produce nessun effetto perché l'editor di testo gedit è parte del DM Gnome e di default non è presente in KDE.

3) Prova ad identificare il Gateway con il comando:
# route [invio]
se non ti risulta nessun gateway predefinito, definiscilo con:
# route add default gw 192.168.1.1 [invio]
n.b. il tuo indirizzo gateway potrebbe essere diverso dal mio, quindi sostituiscilo.

4) Considerando che hai 2 interfacce di rete, hai provato ad eseguire i comandi anche sull'altra: la eth1?

5) Il segno cancelletto # all'inizio dei comandi descritti, non deve essere digitato... sta semplicemente ad indicare che si è amministratore - mentre il simbolo $ identifica l'utente normale... a tal proposito, ricorda che tutti i comandi di amministrazione devono essere eseguiti... dall'amministratore :-)