11.6 Configurazione delle Interfacce di Rete

Contributo di Marc Fonvieille.

Al giorno d'oggi non riusciamo a pensare ad un computer senza pensare ad una connessione di rete. Aggiungere e configurare una scheda di rete è un compito comune per ogni amministratore FreeBSD.

11.6.1 Individuazione del Driver Corretto

Prima di cominciare, dovresti conoscere il modello della scheda di rete che possiedi, il chip che usa, e se si tratta di una scheda PCI o ISA. FreeBSD supporta un'ampia varietà sia di schede PCI che ISA. Verifica la l'Hardware Compatibility List della tua release per vedere se la scheda è supportata.

Una volta sicuro che la tua scheda sia supportata, hai bisogno di determinare il driver appropriato per la scheda. Il file /usr/src/sys/i386/conf/LINT ti fornirà un elenco di driver per le interfacce di rete con alcune informazioni su chipset/schede supportate. Se hai dubbi su quale sia il driver corretto, leggi la pagina man del driver. La pagina man fornirà ulteriori informazioni sull'hardware supportato ed anche sui possibili problemi che potrebbero capitare.

Se sei in possesso di una scheda comune, la maggior parte delle volte non dovrai cercare molto per trovare un driver. I driver per le schede di reti comuni sono presenti nel kernel GENERIC, quindi la tua scheda dovrebbe mostrarsi durante l'avvio, in questo modo:

dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
000ff irq 15 at device 11.0 on pci0
dc0: Ethernet address: 00:a0:cc:da:da:da
miibus0: <MII bus> on dc0
ukphy0: <Generic IEEE 802.3u media interface> on miibus0
ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
000ff irq 11 at device 12.0 on pci0
dc1: Ethernet address: 00:a0:cc:da:da:db
miibus1: <MII bus> on dc1
ukphy1: <Generic IEEE 802.3u media interface> on miibus1
ukphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto

In questo esempio, vediamo che nel sistema sono presenti due schede che usano il driver dc(4).

Per usare la tua scheda di rete, avrai bisogno di caricare il driver appropriato. Ciò può essere fatto in due modi. Il modo più semplice consiste nel caricare semplicemente un modulo nel kernel relativo alla scheda di rete con kldload(8). Non è disponibile un modulo per ogni scheda di rete (le schede ISA e le schede che usano il driver ed(4), ad esempio). Alternativamente, si può compilare staticamente il supporto per la propria scheda di rete nel proprio kernel. Controlla /usr/src/sys/i386/conf/LINT e la pagina man del driver per sapere cosa aggiungere al tuo file di configurazione del kernel. Per maggiori informazioni sulla ricompilzione del kernel, guarda il Capitolo 8. Se la tua scheda è stata riconosciuta all'avvio dal kernel (GENERIC) non dovrai compilarne uno nuovo.

11.6.2 Configurazione della Scheda di Rete

Una volta che il driver giusto per la scheda di rete è stato caricato, la scheda ha bisogno di essere configurata. Come molte altre cose, la scheda di rete potrebbe essere già stata configurata al momento dell'installazione tramite sysinstall.

Per mostrare la configurazione delle interfaccie di rete sul tuo sistema, immetti il seguente comando:

% ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
        ether 00:a0:cc:da:da:da
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
        ether 00:a0:cc:da:da:db
        media: Ethernet 10baseT/UTP
        status: no carrier
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000
tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500

Nota: Vecchie versioni di FreeBSD potrebbero richiedere l'opzione -a dopo ifconfig(8). Per maggiori dettagli sulla sintassi corretta di ifconfig(8), fai riferimento alla pagina man. Nota anche che le voci relative all'IPv6 (inet6 ecc.) sono state omesse in questo esempio.

In questo esempio, vengono mostrati i seguenti dispositivi:

FreeBSD usa il nome del driver seguito dall'ordine nel quale la scheda è stat rilevata all'avvio del kernel per dare un nome alla scheda di rete. Ad esempio sis2 sarebbe la terza scheda di rete nel sistema che usa il driver sis(4).

In questo esempio, il dispositivo dc0 è attivo. Gli indicatori chiave sono:

  1. UP significa che la scheda è pronta e configurata.

  2. La scheda ha un indirizzo Internet (inet) (in questo caso 192.168.1.3).

  3. Essa ha una maschera di sottorete valida (netmask; 0xffffff00 è lo stesso che 255.255.255.0).

  4. Essa ha un indirizzo di broadcast valido (in questo caso, 192.168.1.255).

  5. L'indirizzo MAC della scheda ether) è 00:a0:cc:da:da:da.

  6. La selezione del mezzo fisico è in modalità autoselezione (media: Ethernet autoselect (100baseTX <full-duplex>)). Vediamo che dc1 è stata configurata con un mezzo fisico 10baseT/UTP. Per ulteriori informazioni sui tipi di mezzi disponibili per un driver, fai riferimento alla sua pagina man.

  7. Lo stato del collegamento (status) è active, ovvero è stata rilevata la portante. Per dc1, vediamo status: no carrier. Questo è normale quando un cavo ethernet non è stato inserito nella scheda.

Se l'output di ifconfig(8) avesse mostrato qualcosa di simile a:

dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
                ether 00:a0:cc:da:da:da

ciò avrebbe indicato che la scheda non era stata ben configurata.

Per configurare la tua scheda, avrai bisogno dei privilegi di root. La configurazione della scheda di rete può essere effettuata da riga di comando con ifconfig(8), ma avresti bisogno di farlo ad ogni riavvio del sistema. Il file /etc/rc.conf è il posto dove scrivere la configurazione della scheda di rete.

Apri /etc/rc.conf con il tuo editor preferito. Avrai bisogno di aggiungere una riga per ogni scheda di rete presente nel sistema, ad esempio nel nostro caso, abbiamo aggiunto queste linee:

ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"

Dovrai sostituire dc0, dc1, e così via, con i dispositivi corretti per la tua scheda, e gli indirizzi con quelli appropriati. Dovresti leggere le pagine man del driver e di ifconfig(8) per maggiori dettagli sulle opzioni permesse ed anche la pagina man di rc.conf(5) per maggiori informazioni sulla sintassi di /etc/rc.conf.

Se hai configurato la rete durante l'installazione, alcune linee relative alle schede di rete potrebbero essere già presenti. Controlla due volte /etc/rc.conf prima di aggiungere ogni linea.

Avrai anche bisogno di modificare il file /etc/hosts per aggiungere i nomi e gli IP delle varie macchine della LAN, se non sono già lì. Per maggiori informazioni, fai riferimento a hosts(5) ed a /usr/share/examples/etc/hosts.

11.6.3 Verifica e Risoluzione dei Problemi

Una volta che hai effettuato i cambiamenti necessari a /etc/rc.conf, dovresti riavviare la macchina. Ciò farà sì che i cambiamenti alle interfacce vengano applicati, e verificherà che il sistema si riavvii senza nessun errore di configurazione.

Una volta che il sistema è stato riavviato, dovresti testare le interfaccie di rete.

11.6.3.1 Test della Scheda Ethernet

Per verificare che una scheda Ethernet sia configurata correttamente, si devono provare due cose. Prima, effettuare un ping verso l'interfaccia stessa, e poi un ping verso un'altra macchina sulla LAN.

Prima proviamo l'interfaccia:

% ping -c5 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms

--- 192.168.1.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms

Ora dobbiamo effettuare un ping verso un'altra macchina della LAN:

% ping -c5 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms

--- 192.168.1.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms

Puoi usare il nome della macchina invece di 192.168.1.2 se hai sistemato il file /etc/hosts.

11.6.3.2 Risoluzione dei Problemi

11.6.3.2.1. Dove posso trovare informazioni su possibili problemi che potrei incontrare con la mia scheda di rete?
11.6.3.2.2. Quando cerco di effttuare un ping verso una macchina sulla mia LAN, ottengo questo messaggio di errore: “ping: sendto: Permission denied”.
11.6.3.2.3. Vedo un sacco di messaggi “watchdog timeout” nei log del sistema, e quando cerco di effettuare un ping verso una macchina sulla LAN, ottengo questo messaggio: “ping: sendto: No route to host”.
11.6.3.2.4. Vedo un sacco di messaggi “device timeout” nei log del sistema, e la mia scheda di rete non funziona.
11.6.3.2.5. Le prestazioni della scheda sono mediocri, cosa posso fare?
11.6.3.2.6. ci sono delle schede di rete raccomandate o alcune dalle quali dovrei tenermi lontano?

11.6.3.2.1. Dove posso trovare informazioni su possibili problemi che potrei incontrare con la mia scheda di rete?

La pagina man del driver è la prima documentazione da leggere. Anche gli archivi delle mailing list possono essere utili.

11.6.3.2.2. Quando cerco di effttuare un ping verso una macchina sulla mia LAN, ottengo questo messaggio di errore: “ping: sendto: Permission denied”.

Questo significa che non hai il permesso di inviare pacchetti ICMP. Verifica se c'è un firewall in esecuzione sulla macchina e se ci sono delle regole che bloccano il protocollo ICMP.

11.6.3.2.3. Vedo un sacco di messaggi “watchdog timeout” nei log del sistema, e quando cerco di effettuare un ping verso una macchina sulla LAN, ottengo questo messaggio: “ping: sendto: No route to host”.

La prima cosa da fare è verificare il cavo di rete. Molte schede di rete richiedono uno slot PCI che supporti il Bus Mastering. Su alcune vecchie schede madri, solo uno slot PCI lo permette (la maggior parte delle volte lo slot 0). Controlla la scheda di rete e la documentazione della scheda madre per capire se quello potrebbe essere il problema.

11.6.3.2.4. Vedo un sacco di messaggi “device timeout” nei log del sistema, e la mia scheda di rete non funziona.

Avere uno o due di questi messaggi è spesso normale con alcune schede. Ad ogni modo, se questi persistono e la rete non è usabile, assicurati che il cavo di rete sia connesso e che non ci siano conflitti IRQ tra scheda di rete ed altri dispositivi nel sistema.

11.6.3.2.5. Le prestazioni della scheda sono mediocri, cosa posso fare?

È difficile rispondere a questa domanda. Qual è la tua definizione di “prestazioni mediocri”? Controlla due volte qualunque cosa nella tua configurazione, leggi la pagina man tuning(7), e cerca di evitare schede di rete economiche. Molti utenti hanno notato che impostando la selezione del mezzo fisico su autoselect porta a prestazioni scadenti su certo hardware.

11.6.3.2.6. ci sono delle schede di rete raccomandate o alcune dalle quali dovrei tenermi lontano?

Dovresti evitare le schede economiche per un uso serio. Le schede economiche spesso offrono chipset pieni di bug, e la maggior parte delle volte non forniscono buone prestazioni. Molti utenti di FreeBSD apprezzano le schede che usano il chipset fxp(4), tuttavia questo non significa che tutti gli altri chipset siano cattivi.

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.