Manuale di FreeBSD
Indietro | Capitolo 11 Configurazione e Messa a Punto | Avanti

# 11.8 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 di FreeBSD.

## 11.8.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 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. I file `/usr/src/conf/NOTES` e `/usr/src/sys/`arch`/conf/NOTES` ti forniranno 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 presentarsi 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).

Se il driver per la tua NIC non è presente in `GENERIC`, dovrai caricare i driver appropriati per usare la tua NIC. Questo dovrà essere fatto in uno di questi due modi:

- Il modo più semplice è caricare un modulo del kernel con kldload(8) o caricarlo automaticamente al momento del boot aggiungendo le linee appropriate a `/boot/loader.conf`. Non tutti i driver NIC sono disponibili come moduli; esempi notevoli di driver per i quali non esistono moduli sono schede ISA.

- Alternativamente, puoi compilare staticamente il supporto per la tua scheda nel kernel. Controlla `/usr/src/sys/conf/NOTES`, `/usr/src/sys/`arch`/conf/NOTES` e la pagina di manuale del driver per sapere cosa aggiungere nel tuo file di configurazione del kernel. Per maggiori informazioni sul modo di ricompilare il kernel, per favore consulta il Capitolo 8. Se la tua scheda era riconosciuta al boot dal tuo kernel (`GENERIC`) non devi ricompilare un nuovo kernel.

### 11.8.1.1 Usare driver NDIS Windows®

Sfortunatamente, ci sono ancora molti venditori di hardware che non forniscono specifiche dei loro driver alla comunità open source perchè ritengono che tale informazione sia un segreto commerciale. Conseguentemente, gli sviluppatori di FreeBSD e di altri sistemi operativi hanno due scelte: sviluppare i driver con un lungo ed arduo processo di reverse engineering o usare i driver binari disponibili per le piattaforme Microsoft® Windows. La maggior parte degli sviluppatori, inclusi quelli coinvolti in FreeBSD, ha preso la seconda strada.

Grazie al contributo di Bill Paul (wpaul), a partire da FreeBSD 5.3-RELEASE c'è supporto “nativo” per Network Driver Interface Specification (NDIS). Il NDISulator di FreeBSD (anche noto come Progetto Evil) prende un driver binario per Windows e sostanzialmente crea un inganno fingendo di eseguirlo in Windows. Poichè il driver ndis(4) sta usando un binario Windows, è usabile solo su sistemi i386™ e amd64.

> Nota: Il driver ndis(4) è designato per supportare principalmente device PCI, CardBus e PCMCIA, i device USB non sono ancora supportati.

Per usare il NDISulator, hai bisogno sostanzialmente di tre cose:

1. Sorgenti del kernel

2. binari dei driver di Windows XP (estensione `.SYS`)

3. file di configurazione dei driver per Windows XP (estensione `.INF`)

Localizza i file per la tua carta specifica. Generalmente, posso essere trovati nel CD incluso o sui siti web dei venditori. Nei seguenti esempi, useremo `W32DRIVER.SYS` e `W32DRIVER.INF`.

> Nota: Non puoi usare un driver Windows/i386 con FreeBSD/amd64, devi trovare un driver Windows/amd64 per farlo funzionare correttamente.

Il prossimo passo è compilare il binario del driver in un modulo caricabile dal kernel. Per fare questo, come `root`, usa ndisgen(8):

    # ndisgen /path/to/W32DRIVER.INF /path/to/W32DRIVER.SYS

L'utility ndisgen(8) è interattiva e chiederà altre informazioni di cui necessita; produrrà un modulo del kernel nella presente directory che può essere caricato in questo modo:

    # kldload ./W32DRIVER.ko

In aggiunta al modulo del kernel generato, devi caricare i moduli `ndis.ko` e `if_ndis.ko`. Questo dovrebbe avvenire automaticamente quando uno carica un modulo che dipende da ndis(4). Se vuoi caricarli manualmente, usa il seguente comando:

    # kldload ndis
    # kldload if_ndis

Il primo comando carica il wrapper del driver miniport NDIS, il secondo carica l'interfaccia di rete in questione.

Ora controlla dmesg(8) per vedere se c'era qualche errore durante il caricamento. Se tutto è andato bene, dovresti ottenere dell'output che somiglia a questo:

    ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
    ndis0: NDIS API version: 5.0
    ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
    ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
    ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps

D'ora in poi, puoi trattare il device `ndis0` come ogni altra scheda di rete (ad esempio `dc0`).

Puoi configurare il sistema perché carichi il modulo NDIS al momento del boot nello stesso modo di ogni altro modulo. Per prima cosa, copia il modulo generato `W32DRIVER.ko`, nella directory `/boot/modules`. Quindi, aggiungi le seguenti linee a `/boot/loader.conf`:

    W32DRIVER_load="YES"

## 11.8.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 interfacce 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:

- `dc0`: La prima interfaccia Ethernet

- `dc1`: La seconda interfaccia Ethernet

- `lp0`: L'interfaccia della porta parallela

- `lo0`: Il dispositivo di loopback

- `tun0`: Il dispositivo tunnel usato da ppp

FreeBSD usa il nome del driver seguito dall'ordine nel quale la scheda è stata 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. Ha una maschera di sotto-rete valida (`netmask`; `0xffffff00` è lo stesso di `255.255.255.0`).

4. 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à auto selezione (`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 giusto 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.8.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 interfacce di rete.

### 11.8.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.8.3.2 Risoluzione dei Problemi

Risolvere i problemi delle varie configurazioni hardware e software è sempre una faticaccia, ma è una fatica che può essere diminuita controllando da subito le cose semplici. Avete collegato il cavo di rete? Avete configurato i servizi di rete? Avete configurato il firewall correttamente? La scheda di rete che state usando è supportata da FreeBSD? Controllate sempre le note sul vostro hardware prima di inviare un bug report. Aggiornate la vostra versione di FreeBSD all'ultima versione STABLE disponibile. Controllate gli archivi delle mailing list, o magari cercate su Internet.

Se la scheda funziona, ma le prestazioni sono scadenti, potrebbe esservi utile la lettura della pagina man tuning(7). Potreste anche verificare la vostra configurazione della rete, poichè una configurazione scorretta può essere la causa di connessioni lente.

Alcuni utenti riscontrano dei “`device timeouts`”, il che è normale per alcune schede. Se questi continuano, o se sono fastidiosi, potreste voler ricontrollare che non ci siano conflitti con altri dispositivi. Controllate due volte la connessione di rete. Forse dovreste procurarvi un'altra scheda.

Alcune volte, gli utenti notano alcuni errori “`watchdog timeout`”. La prima cosa da fare è controllare il cavo di rete. Alcune schede di rete richiedono uno slot PCI che supporti il Bus Mastering. Su alcune vecchie schede madri, ciò è permesso solo per uno slot PCI (tipicamente lo slot 0). Controllate la documentazione della scheda di rete e della scheda madre per determinare se possa essere quello il problema.

Messaggi “`No route to host`” vengono generati se il sistema non è in grado di effettuare il routing di un pacchetto verso una certa destinazione. Ciò può accadere se non è specificata una route di default, o se il cavo è scollegato. Controllate l'output di `netstat -rn` ed assicuratevi che ci sia una route valida per l'host che state cercando di raggiungere. Se non c'è, leggete il Capitolo 29.

I messaggi d'errore “`ping: sendto: Permission denied`” sono spessi causati da un firewall mal configurato. Se `ipfw` è abilitato nel kernel ma non ci sono regole definite, allora la politica di default è di negare tutto il traffico, comprese le richieste di ping! Leggete il Capitolo 28 per maggiori informazioni.

Talvolta le prestazioni della scheda di rete sono scadenti, o sotto la media. In questi casi è preferibile cambiare la selezione del media da `autoselect` ad una selezione corretta. Anche se questo sistema funziona con la maggior parte dell'hardware, potrebbe non risolvere il problema per tutti. Ancora una volta, controllate tutte le impostazioni di rete, e leggete la pagina man tuning(7) .

Indietro | Partenza | Avanti
Usare rc con FreeBSD | Risali | Host Virtuali

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>.