Capitolo 5. Impostazione della rete

Indice

5.1. L'infrastruttura base di rete
5.1.1. Risoluzione dei nomi di host
5.1.2. Il nome dell'interfaccia di rete
5.1.3. L'intervallo degli indirizzi di rete per la LAN
5.1.4. Il supporto per i dispositivi di rete
5.2. La configurazione moderna della rete per il desktop
5.2.1. Strumenti grafici di configurazione della rete
5.3. La configurazione moderna della rete senza GUI
5.4. La vecchia connessione e configurazione di rete
5.5. Il metodo di connessione alla rete (datato)
5.5.1. Connessione DHCP con Ethernet
5.5.2. Connessione con IP statico con Ethernet
5.5.3. Connessione PPP con pppconfig
5.5.4. Connessione PPP alternativa con wvdialconf
5.5.5. Connessione PPPoE con pppoeconf
5.6. Configurazione base della rete con ifupdown (metodo vecchio)
5.6.1. Sintassi di base dei comandi
5.6.2. Sintassi di base di "/etc/network/interfaces"
5.6.3. Interfaccia di rete loopback
5.6.4. Interfaccia di rete servita da DHCP
5.6.5. Interfaccia di rete con IP statico
5.6.6. Informazioni di base sull'interfaccia LAN wireless
5.6.7. Interfaccia LAN wireless con WPA/WPA2
5.6.8. Interfaccia LAN wireless con WEP
5.6.9. Connessione PPP
5.6.10. Connessione PPP alternativa
5.6.11. Connessione PPPoE
5.6.12. Lo stato di configurazione della rete di ifupdown
5.6.13. Riconfigurazione base della rete
5.6.14. Pacchetto ifupdown-extra
5.7. Configurazione avanzata della rete con ifupdown (strumento datato)
5.7.1. Il pacchetto ifplugd
5.7.2. Il pacchetto ifmetric
5.7.3. L'interfaccia virtuale
5.7.4. Sintassi avanzata dei comandi
5.7.5. Il blocco di mappatura "mapping"
5.7.6. Configurazione della rete commutabile manualmente
5.7.7. Uso di script con il sistema ifupdown
5.7.8. Mappatura con guessnet
5.8. Configurazione della rete a basso livello
5.8.1. Comandi iproute2
5.8.2. Operazioni sicure a basso livello sulla rete
5.9. Ottimizzazione della rete
5.9.1. Trovare l'MTU ottimale
5.9.2. Impostazione dell'MTU
5.9.3. Ottimizzazione di TCP per la WAN
5.10. Infrastruttura netfilter
[Suggerimento] Suggerimento

Per una guida generica all'uso della rete in GNU/Linux, leggere la Linux Network Administrators Guide.

[Suggerimento] Suggerimento

Per una guida moderna sull'uso della rete specifica per Debian, leggere The Debian Administrator's Handbook — Configuring the Network.

[Avvertimento] Avvertimento

Invece di usare lo schema di nomi tradizionale per le interfacce («eth0», «eth1», «wlan0», …), il più recente systemd usa «nomi di interfacce di rete prevedibili (Predictable Network Interface Name)», come «enp0s25».

[Avvertimento] Avvertimento

Questo capito sta diventando non aggiornato dato che è basato su Debian 7.0 (Wheezy), rilasciata nel 2013.

[Suggerimento] Suggerimento

Anche se questo documento usa ancora il vecchio ifconfig(8) con IPv4 per i suoi esempi di configurazione della rete, Debian sta migrando a ip(8) con IPv4+IPv6 nel rilascio wheezy. Patch per aggiornare questo documento sono le benvenute.

[Suggerimento] Suggerimento

In systemd, si può usare networkd per gestire il le reti. Vedere systemd-networkd(8).

In questa sezione viene descritta in breve l'infrastruttura base di rete in un sistema Debian moderno.

Tabella 5.1. Elenco degli strumenti di configurazione della rete

pacchetto popcon dimensione tipo descrizione
ifupdown V:627, I:995 217 config::ifupdown strumento standard per attivare e disattivare la rete (specifico di Debian)
ifplugd V:4, I:21 209 " " gestisce automaticamente la rete cablata
ifupdown-extra V:0, I:1 100 " " script per testare la rete di supporto al pacchetto "ifupdown"
ifmetric V:0, I:1 37 " " imposta la metrica di routing per un'interfaccia di rete
guessnet V:0, I:0 422 " " script di mappatura di supporto al pacchetto "ifupdown", attraverso il file "/etc/network/interfaces"
ifscheme V:0, I:0 58 " " script di mappatura di supporto al pacchetto "ifupdown"
network-manager V:380, I:471 11584 config::NM NetworkManager (demone): gestisce la rete automaticamente
network-manager-gnome V:159, I:408 5921 " " NetworkManager (frontend GNOME)
wicd I:31 35 config::wicd gestore della rete cablata e wireless (metapacchetto)
wicd-cli V:0, I:1 59 " " gestore della rete cablata e wireless (client a riga di comando)
wicd-curses V:0, I:4 175 " " gestore della rete cablata e wireless (client Curses)
wicd-daemon V:26, I:35 962 " " gestore della rete cablata e wireless (demone)
wicd-gtk V:21, I:33 574 " " gestore della rete cablata e wireless (client GTK+)
iptables V:270, I:995 2569 config::Netfilter strumenti amministrativi per filtraggio di pacchetti di rete e NAT (Netfilter)
iproute2 V:671, I:871 2585 config::iproute2 iproute2, IPv6 e altra configurazione di rete avanzata: ip(8), tc(8), ecc.
ifrename V:1, I:2 125 " " rinomina le interfacce di rete in base a vari criteri statici: ifrename(8)
ethtool V:110, I:259 393 " " mostra e modifica le impostazioni dei device Ethernet
iputils-ping V:254, I:996 100 test::iproute2 testa la raggiungibilità di rete di un host remoto con nome host o indirizzo IP (iproute2)
iputils-arping V:26, I:392 51 " " testa la raggiungibilità di rete di un host remoto specificato con il suo indirizzo ARP
iputils-tracepath V:5, I:102 68 " " traccia il percorso di rete verso un host remoto
net-tools V:299, I:744 979 config::net-tools toolkit di rete NET-3 (net-tools, configurazione di rete IPv4): ifconfig(8), ecc.
inetutils-ping V:0, I:2 350 test::net-tools testa la raggiungibilità della rete di un host remoto con nome host o indirizzo IP (datato, GNU)
arping V:1, I:28 73 " " testa la raggiungibilità di rete di un host remoto specificato con il suo indirizzo ARP (datato)
traceroute V:63, I:960 154 " " traccia il percorso di rete verso un host remoto (datato, console)
isc-dhcp-client V:255, I:973 673 config::low-level client DHCP
wpasupplicant V:310, I:539 3352 " " supporto client per WPA e WPA2 (IEEE 802.11i)
wpagui V:0, I:3 786 " " client GUI Qt per WPA supplicant
wireless-tools V:192, I:274 297 " " strumenti per manipolare le estensioni wireless per Linux
ppp V:264, I:510 1020 " " connessione PPP/PPPoE con chat
pppoeconf V:0, I:9 290 config::helper strumento di aiuto di configurazione per la connessione PPPoE
pppconfig V:1, I:2 805 " " strumento di aiuto per la connessione PPP con chat
wvdial V:0, I:6 249 " " strumento di aiuto per la connessione PPP con wvdial e ppp
mtr-tiny V:6, I:55 152 test::low-level traccia il percorso di rete verso un host remoto (curses)
mtr V:5, I:40 206 " " traccia il percorso di rete verso un host remoto (curses e GTK+)
gnome-nettool V:3, I:91 2105 " " strumenti per operazioni comuni sulle informazioni di rete (GNOME)
nmap V:36, I:292 4510 " " strumento per mappatura della rete / esplorazione delle porte (Nmap, console)
zenmap V:4, I:12 2939 " " strumento per mappatura della rete /esplorazione delle porte (GTK+)
tcpdump V:21, I:200 1192 " " analizzatore del traffico di rete (Tcpdump, console)
wireshark I:61 69 " " analizzatore del traffico di rete (Wireshark, GTK+)
tshark V:3, I:35 398 " " analizzatore del traffico di rete (console)
tcptrace V:0, I:1 392 " " produce un riassunto delle connessioni dall'output di tcpdump
snort V:0, I:1 1920 " " sistema flessibile di rilevazione delle intrusioni di rete (Snort)
ntopng V:1, I:2 950 " " mostra l'uso della rete nel browser web
dnsutils V:71, I:591 719 " " client di rete forniti con BIND: nslookup(8), nsupdate(8), dig
dlint V:0, I:12 53 " " controlla l'informazione DNS di zona usando interrogazioni del server di nomi
dnstracer V:0, I:2 56 " " traccia una catena di server DNS fino alla sorgente

La risoluzione del nome host è attualmente supportata dal meccanismo NSS (Name Service Switch). Il flusso di eventi nella risoluzione è il seguente.

  1. Il file "/etc/nsswitch.conf" con blocchi tipo "hosts: files dns" detta l'ordine di risoluzione dei nomi di host. (Questo rimpiazza la vecchia funzionalità del blocco "order in "/etc/host.conf".)

  2. Il metodo files è invocato per primo. Se il nome host viene trovato nel file "/etc/hosts", vengono restituiti tutti gli indirizzi validi per esso e il programma termina. (Il file "/etc/host.conf" contiene "multi on".)

  3. Viene invocato il metodo dns. Se il nome host viene trovato dalla interrogazione al DNS (Internet Domain Name System, sistema dei nomi di dominio Internet), identificato dal file "/etc/resolv.conf", vengono restituiti tutti gli indirizzi validi per esso e il programma termina.

Per esempio, "/etc/hosts" contiene righe come le seguenti.

127.0.0.1 localhost
127.0.1.1 <nome_host>

# Le righe seguenti sono desiderabili per host con supporto per IPv6
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Ogni riga inizia con un indirizzo IP e prosegue con l'hostname associato.

L'indirizzo IP 127.0.1.1 nella seconda riga dell'esempio può non essere presente in altri sistemi simil-Unix. L'Installatore Debian crea questa voce per i sistemi senza un indirizzo IP permanente come soluzione per alcuni software (es., GNOME) come documentato nel bug#719621.

Il <nome_host> corrisponde al nome host definito in "/etc/hostname".

Per un sistema con un indirizzo IP permanente, si dovrebbe usare qui tale indirizzo invece di 127.0.1.1.

Per un sistema con un indirizzo IP permanente e un FQDN (Fully Qualified Domain Name, nome di dominio pienamente qualificato) fornito dal DNS (Domain Name System), dovrebbe essere usato qui il canonico <nome_host>.<nome_dominio>, invece del semplice <nome_host>.

Il file "/etc/resolv.conf" è un file statico se non è installato il pacchetto resolvconf. Se invece quest'ultimo è installato il file è un collegamento simbolico. In ogni caso contiene le informazioni che inizializzano le routine del risolutore. Se il DNS si trova all'IP="192.168.11.1", il file conterrà la riga seguente.

nameserver 192.168.11.1

Il pacchetto resolvconf rendo questo file "/etc/resolv.conf" un collegamento simbolico e gestisce il suo contenuto con script eseguiti in automatico.

Per le postazioni PC nei tipici ambienti LAN ad hoc, il nome host può essere risolto usando il Multicast DNS (mDNS, Zeroconf) in aggiunta ai metodi di base con file e dns.

  • Avahi fornisce un'infrastruttura per il Multicast DNS Service Discovery in Debian.

  • È equivalente a Apple Bonjour / Apple Rendezvous.

  • Il pacchetto plugin libnss-mdns fornisce la risoluzione dei nomi host attraverso mDNS per la funzionalità GNU Name Service Switch (NSS) della libreria C GNU (glibc).

  • Il file "/etc/nsswitch.conf" dovrebbe contenere una sezione simile a "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4".

  • I nomi host che terminano con lo pseudo-dominio di livello più alto (TLD) ".local" vengono risolti.

  • L'indirizzo multicast del collegamento locale mDNS IPv4 "224.0.0.251" o il suo equivalente IPv6 "FF02::FB" vengono usati per fare interrogazioni DNS per un nome che termina con ".local".

La risoluzione del nome host con il deprecato NETBios su TCP/IP, usato dai vecchi sistemi Windows può essere fornita installando il pacchetto winbind. Per abilitare questa funzionalità il file "/etc/nsswitch.conf" dovrebbe avere una sezione come "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 wins". (I sistemi Windows moderni solitamente usano il metodo dns per la risoluzione del nome host.)

[Nota] Nota

L'espansione dei gTLD (generic Top-Level Domain, domini di più alto livello generici) nel Domain Name System (Sistema di nomi di dominio) è in corso d'opera. Fare attenzione a possibili collisioni di nomi quando si sceglie un nome di dominio usato solamente all'interno di una LAN.

Il nome dell'interfaccia di rete, ad esempio eth0, viene assegnato a ciascun hardware, quando viene rilevato, nel kernel Linux attraverso il meccanismo di configurazione in spazio utente udev (vedere Sezione 3.3, «Il sistema udev»). Il nome dell'interfaccia di rete è chiamato interfaccia fisica in ifup(8) e interfaces(5).

Per garantire che ciascuna interfaccia di rete abbia un nome persistente ad ogni avvio, usando indirizzi MAC ecc., esiste un file di regole: "/etc/udev/rules.d/70-persistent-net.rules". Questo file viene generato automaticamente dal programma "/lib/udev/write_net_rules" eseguito probabilmente dal file "persistent-net-generator.rules". Lo si può modificare per cambiare le regole di assegnazione dei nomi.

[Attenzione] Attenzione

Quando si modifica il file delle regole "/etc/udev/rules.d/70-persistent-net.rules", si deve mantenere ciascuna regola su una singola riga e l'indirizzo MAC in lettere minuscole. Per esempio, se si trova in quessto file una voce "FireWire device" e una "PCI device", probabilmente si vorrà chiamare "PCI device" eth0 e configurarla come interfaccia di rete primaria.

Le interfacce di rete sono tipicamente inizializzate in "networking.service" per l'interfaccia lo e "NetworkManager.service" per le altre interfacce nei moderni sistemi desktop Debian che usano systemd.

I sistemi Debian squeeze e successivi possono gestire la connessione di rete attraverso software per demoni di gestione come NetworkManager (NM) (network-manager e pacchetti associati) oppure Wicd (wicd e pacchetti associati).

  • Questi sono forniti con propri programmi per l'interfaccia utente con GUI o a riga di comando.

  • Sono forniti con un proprio demone come sistema di backend.

  • Permettono al proprio sistema di connettersi facilmente ad Internet.

  • Permettono una facile gestione della configurazione delle reti cablate e wireless.

  • Permettono di configurare la rete in modo indipendente dal datato pacchetto ifupdown.

[Nota] Nota

Non usare questi strumenti di configurazione automatica della rete per server. Sono pensati principalmente per utenti con desktop mobili su portatili.

Questi strumenti moderni di configurazione della rete devono essere configurati in modo corretto per evitare conflitti con il datato pacchetto ifupdown e con il suo file di configurazione "/etc/network/interfaces".

[Nota] Nota

Alcune funzionalità di questi strumenti automatici di configurazione della rete possono soffrire dei problemi. Non sono così robusti come il vecchio pacchetto ifupdown. Controllare il BTS di network-manager e il BTS di wicd per vedere i problemi e i limiti attuali.

La documentazione ufficiale per NM e Wicd su Debian è fornita rispettivamente in "/usr/share/doc/network-manager/README.Debian" e "/usr/share/doc/wicd/README.Debian".

Fondamentalmente, la configurazione di rete per il desktop viene fatta nel modo seguente.

  1. Aggiungere l'utente desktop, ad esempio pippo, al gruppo "netdev" con il comando seguente. (In alternativa farlo automaticamente attraverso D-bus nei moderni ambienti desktop come GNOME e KDE).

    $ sudo adduser pippo netdev
  2. Mantenere la configurazione di "/etc/network/interfaces" semplice come la seguente.

    auto lo
    iface lo inet loopback
  3. Riavviare NM o Wicd con il comando seguente.

    $ sudo /etc/init.d/network-manager restart
    $ sudo /etc/init.d/wicd restart
  4. Configurare la propria rete attraverso l'interfaccia grafica.

[Nota] Nota

Solo le interfacce che non sono elencate in "/etc/network/interfaces" sono gestite da NM o Wicd, per evitare conflitti con ifupdown.

[Suggerimento] Suggerimento

Se si desirano estendere le capacità di configurazione della rete di NM, cercare i moduli plugin appropriati e i pacchetti supplementari, quali network-manager-openconnect, network-manager-openvpn-gnome, network-manager-pptp-gnome, mobile-broadband-provider-info, gnome-bluetooth, ecc. Lo stesso vale per quelli di Wicd.

[Attenzione] Attenzione

Questi strumenti di configurazione automatica della rete possono non essere compatibili con alcune configurazioni esotiche del datato ifupdown contenute in "/etc/network/interfaces", come quelle in Sezione 5.6, «Configurazione base della rete con ifupdown (metodo vecchio)» e Sezione 5.7, «Configurazione avanzata della rete con ifupdown (strumento datato)». Per informazioni sui problemi e le limitazioni attualmente esistenti, controllare il BTS di network-manager e il BTS di wicd.

Con systemd, la rete può essere configurata invece in /etc/systemd/network/. Vedere systemd-resolved(8), resolved.conf(5) e systemd-networkd(8).

Ciò permette la configurazione moderna della rete senza GUI.

Una configurazione di client DHCP può essere impostata creando "/etc/systemd/network/dhcp.network". Es.:

[Match]
Name=en*

[Network]
DHCP=yes

Una configurazione di rete statica può essere impostata creando "/etc/systemd/network/static.network". Es.:

[Match]
Name=en*

[Network]
Address=192.168.0.15/24
Gateway=192.168.0.1

Quando il metodo descritto in Sezione 5.2, «La configurazione moderna della rete per il desktop» non è sufficiente per le proprie necessità, si dovrebbe usare il metodo datato di connessione e configurazione della rete che combina assieme diversi strumenti più semplici.

La connessione di rete in vecchio stile è specifica per ciascun metodo (vedere Sezione 5.5, «Il metodo di connessione alla rete (datato)»).

Esistono 2 tipi di programma per la configurazione a basso livello della rete in Linux (vedere Sezione 5.8.1, «Comandi iproute2»).

  • I vecchi programmi net-tools (ifconfig(8), …) provengono dal sistema di rete Linux NET-3. La maggior parte di essi è ora superata.

  • I nuovi programmi Linux iproute2 (ip(8), …) formano l'attuale sistema Linux di rete.

Anche se questi programmi di rete a basso livello sono potenti, sono complicati da usare. Perciò sono stati creati strumenti di configurazione della rete di alto livello.

Il pacchetto ifupdown è lo standard de facto per una configurazione di rete di altro livello di questo tipo in Debian. Permette di attivare la rete semplicemente eseguendo, per esempio, "ifup eth0". Il suo file di configurazione è il file "/etc/network/interfaces" e i suoi contenuti hanno tipicamente un aspetto simile al seguente.

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Il pacchetto resolvconf è stato creato per fornire al sistema ifupdown il supporto per una riconfigurazione indolore della risoluzione degli indirizzi di rete, riscrivendo automaticamente il file "/etc/resolv.conf" di configurazione del risolutore. Attualmente la maggior parte dei pacchetti di configurazione della rete in Debian sono modificati per usare il pacchetto resolvconf (vedere "/usr/share/doc/resolvconf/README.Debian").

Per automatizzare la configurazione dinamica di ambienti di rete come un PC portatile in una LAN cablata, sono stati creati script di aiuto per il pacchetto ifupdown, come ifplugd, guessnet, ifscheme, ecc. Essi sono relativamente difficili da usare ma si comportano bene con il sistema ifupdown esistente.

Questi sono spiegati in dettaglio con esempi (vedere Sezione 5.6, «Configurazione base della rete con ifupdown (metodo vecchio)» e Sezione 5.7, «Configurazione avanzata della rete con ifupdown (strumento datato)»).

[Attenzione] Attenzione

I metodi per testare la connessione descritti in questa sezione sono pensati per fare prove. Non sono pensati per essere usati direttamente per connettersi alla rete quotidianamente. È consigliato il loro uso con NM, Wicd o il pacchetto ifupdown (vedere Sezione 5.2, «La configurazione moderna della rete per il desktop» e Sezione 5.6, «Configurazione base della rete con ifupdown (metodo vecchio)»).

I metodi di connessione tipici alla rete e i percorsi tipici per la connessione per un PC possono essere schematizzati nel modo seguente.


Quella che segue è una schematizzazione degli script di configurazione per ciascun metodo di connessione.


Gli acronimi per le connessioni di rete hanno il significato seguente.


[Nota] Nota

I servizi di connessione WAN attraverso la TV via cavo sono generalmente serviti da DHCP o PPPoE. Quelli ADSL e FTTP sono generalmente serviti da PPPoE. Si deve consultare il proprio fornitore di servizi Internet per i requisiti esatti di configurazione della connessione WAN.

[Nota] Nota

Quando un router BB è usato per creare un ambiente LAN domestico, i PC della LAN sono connessi alla WAN attraverso il router BB con NAT (traduzione degli indirizzi di rete). In questi casi alle interfacce di rete dei PC nella LAN sono assegnati dal router BB indirizzi IP statici o DHCP. Il router BB deve essere configurato per connettersi alla WAN seguendo le istruzioni del proprio fornitore di servizi Internet.

Lo script di configurazione pppconfig imposta la connessione PPP interattivamente chiedendo all'utente di selezionare solamente quanto segue.

  • Il numero di telefono

  • Il nome utente per il fornitore di servizi Internet

  • La password per il fornitore di servizi Internet

  • La velocità della porta

  • La porta di comunicazione del modem

  • Il metodo di autenticazione

Tabella 5.6. Elenco dei file di configurazione per la connessione PPP con pppconfig

file funzione
/etc/ppp/peers/<nome_isp> Il file di configurazione per pppd specifico per il fornitore di servizi <nome_isp>, generato da pppconfig
/etc/chatscripts/<nome_isp> Il file di configurazione per chat specifico per il fornitore di servizi <nome_isp>, generato da pppconfig
/etc/ppp/options I parametri generici di esecuzione per ppd
/etc/ppp/pap-secret Dati di autenticazione per PAP (rischio per la sicurezza)
/etc/ppp/chap-secret Dati di autenticazione per PAP (più sicuri)

[Attenzione] Attenzione

Se i comandi pon e poff vengono invocati senza argomenti, "<nome_isp>" viene impostato a "provider".

Si può testare la configurazione usando strumenti di configurazione di rete a basso livello come nel modo seguente.

$ sudo pon <nome_isp>
...
$ sudo poff <nome_isp>

Vedere "/usr/share/doc/ppp/README.Debian.gz".

La configurazione tradizionale della rete TCP/IP in un sistema Debian usa il pacchetto ifupdown come strumento ad alto livello. Ci sono 2 casi tipici.

Questi metodi di impostazione tradizionali sono piuttosto utili se si desidera impostare una configurazione avanzata; si possono trovare i dettagli qui di seguito.

Il pacchetto ifupdown fornisce l'infrastruttura standard per la configurazione di rete di alto livello nel sistema Debian. In questa sezione viene descritta la configurazione base della rete con ifupdown con un'introduzione semplificata e molti esempi tipici.

La sintassi di base di "/etc/network/interfaces", come spiegato in interfaces(5), può essere riassunta nel modo seguente.


Le righe con un blocco iface hanno la sintassi seguente.

iface <nome_config> <famiglia_indirizzi> <nome_metodo>
 <opzione1> <valore1>
 <opzione2> <valore2>
 ...

Per la configurazione di base non vengono usati i blocchi mapping ma viene usato il nome dell'interfaccia di rete come nome della configurazione di rete (vedere Sezione 5.7.5, «Il blocco di mappatura "mapping"»).

[Avvertimento] Avvertimento

Non creare definizioni duplicate per un blocco "iface" per un'interfaccia di rete in "/etc/network/interfaces".

Dopo aver preparato il sistema con Sezione 5.5.1, «Connessione DHCP con Ethernet», l'interfaccia di rete con DHCP viene configurata creando una voce di configurazione nel file "/etc/network/interfaces" nel modo seguente.

allow-hotplug eth0
iface eth0 inet dhcp

Quando il kernel Linux rileva l'interfaccia fisica eth0, il blocco allow-hotplug fa sì che ifup attivi l'interfaccia e il blocco iface fa sì che ifup usi DHCP per configurare l'interfaccia.

La LAN wireless (in breve WLAN) fornisce connettività veloce wireless attraverso comunicazioni con espansione di spettro in bande radio senza licenza basate sull'insieme di standard chiamato IEEE 802.11.

Le interfacce WLAN sono quasi come normali interfacce Ethernet, ma richiedono alcuni dati sull'identità della rete e sulla chiave di cifratura per essere usate una volta inizializzate. Gli strumenti di rete di alto livello per esse sono esattamente gli stessi delle interfacce di rete, tranne che i nomi delle interfacce sono un po' diversi come eth1, wlan0, ath0, wifi0, … a seconda dei driver del kernel utilizzati.

[Suggerimento] Suggerimento

Il device wmaster0 è il device master che è un device interno usato solamente da SoftMAC con la nuova API mac80211 di Linux.

Quelle che seguono sono alcune parole chiave relative alla WLAN che è bene ricordare.


Di fatto la scelta del protocollo è di solito limitata dal router wireless che si possiede.

È necessario installare il pacchetto wpasupplicant per supportare la WLAN con i nuovi WPA/WPA2.

In caso di IP DHCP per la connessione WLAN, la voce nel file "/etc/network/interfaces" dovrebbe essere come la seguente.

allow-hotplug ath0
iface ath0 inet dhcp
 wpa-ssid zonacasa
 # la chiave di cifratura, psk, esadecimale e' codificata da una passphrase in puro testo
 wpa-psk 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

Vedere "/usr/share/doc/wpasupplicant/README.modes.gz".

È necessario installare il pacchetto wireless-tools per supportare la rete WLAN con il vecchio WEP. (Il proprio router economico potrebbe usare ancora questa infrastruttura non sicura, ma è meglio di niente.)

[Attenzione] Attenzione

Notare che il traffico di rete in una WLAN con WEP può essere spiato da altri.

In caso di IP DHCP per la connessione WLAN, la voce nel file "/etc/network/interfaces" dovrebbe essere come la seguente.

allow-hotplug eth0
iface eth0 inet dhcp
 wireless-essid Casa
 wireless-key1 0123-4567-89ab-cdef
 wireless-key2 12345678
 wireless-key3 s:password
 wireless-defaultkey 2
 wireless-keymode open

Vedere "/usr/share/doc/wireless-tools/README.Debian".

È necessario come prima cosa configurare la connessione PPP come descritto in precedenza (vedere Sezione 5.5.3, «Connessione PPP con pppconfig»). Quindi aggiungere nel file "/etc/network/interfaces" la voce per il device PPP primario ppp0 nel modo seguente.

iface ppp0 inet ppp
 provider <nome_isp>

Per i PC connessi direttamente alla WAN con servizio PPPoE, è necessario configurare il sistema con la connessione PPPoE come descritto in precedenza (vedere Sezione 5.5.5, «Connessione PPPoE con pppoeconf»). Quindi aggiungere nel file "/etc/network/interfaces" la voce per il device PPPoE primario eth0 nel modo seguente.

allow-hotplug eth0
iface eth0 inet manual
 pre-up /sbin/ifconfig eth0 up
 up ifup ppp0=dsl
 down ifdown ppp0=dsl
 post-down /sbin/ifconfig eth0 down
# Quello che segue e' usato solo internamente
iface dsl inet ppp
 provider dsl-provider

Le funzionalità del pacchetto ifupdown possono essere migliorate andando oltre quanto è stato descritto in Sezione 5.6, «Configurazione base della rete con ifupdown (metodo vecchio)», con qualche informazione più avanzata.

Le funzionalità descritte in questa sezione sono completamente opzionali. Essendo io pigro e minimalista, raramente faccio lo sforzo di usarle.

[Attenzione] Attenzione

Se non si è riusciti a configurare la connessione di rete usando le informazioni in Sezione 5.6, «Configurazione base della rete con ifupdown (metodo vecchio)», cercare una soluzione nelle informazioni che seguono non farà che peggiorare le cose.

Il pacchetto ifplugd è un vecchio strumento di configurazione della rete che può gestire soltanto connessioni Ethernet. Risolve problemi di cavi Ethernet sconnessi/ricconessi per PC portatili, ecc. Se è installato NetworkManager o Wicd (vedere Sezione 5.2, «La configurazione moderna della rete per il desktop»), questo pacchetto non è necessario.

Questo pacchetto esegue un demone e rimpiazza le funzionalità auto o allow-hotplug (vedere Tabella 5.10, «Elenco dei blocchi in "/etc/network/interfaces) ed abilita le interfacce quando queste vengono connesse alla rete.

Ecco come usare il pacchetto ifplugd per la porta Ethernet interna, ad esempio eth0.

  1. Rimuovere il blocco "auto eth0" o "allow-hotplug eth0" dal file "/etc/network/interfaces".

  2. Mantenere i blocchi "iface eth0 inet …" e "mapping …" nel file "/etc/network/interfaces".

  3. Installare il pacchetto ifplugd.

  4. Eseguire "sudo dpkg-reconfigure ifplugd".

  5. Indicare eth0 come "interfaccia statica che ifplugd deve osservare".

Ora, dopo la riconfigurazione, la rete funziona come voluto.

  • All'avvio o al rilevamento dell'hardware, l'interfaccia non viene attivata da sé stessa.

  • Quando viene rilevato il cavo Ethernet l'interfaccia viene attivata.

  • Dopo un certo intervallo di tempo dalla disconnessione del cavo Ethernet, l'interfaccia viene automaticamente disattivata.

  • Quando viene inserito un altro cavo Ethernet, l'interfaccia è attivata nel nuovo ambiente.

[Suggerimento] Suggerimento

Gli argomenti del comando ifplugd(8) possono impostare il suo comportamento, come il ritardo nella riconfigurazione delle interfacce.

Il pacchetto ifupdown offre funzionalità di configurazione avanzata della rete usando il nome di configurazione della rete e il nome dell'interfaccia di rete. Viene qui usata una terminologia leggermente diversa da quella usata in ifup(8) e interfaces(5).


I comandi base per la configurazione della rete descritti in Sezione 5.6.1, «Sintassi di base dei comandi» richiedono che, nel file "/etc/network/interfaces", il nome della configurazione di rete indicato nel blocco iface corrisponda al nome dell'interfaccia di rete.

I comandi avanzati per la configurazione della rete permettono, nel file "/etc/network/interfaces", la distinzione tra il nome della configurazione di rete e della interfaccia di rete


Nella sezione Sezione 5.6.2, «Sintassi di base di "/etc/network/interfaces"» è stata saltata la spiegazione del blocco mapping nel file "/etc/network/interfaces", per evitare complicazioni. Questo blocco ha la sintassi seguente.

mapping <glob_nome_interfaccia>
 script <nome_script>
 map <script_input1>
 map <script_input2>
 map ...

Ciò fornisce funzionalità avanzate al file "/etc/network/interfaces" automatizzando la scelta della configurazione con lo script di mappatura specificato da <nome_script>.

Ecco cosa succede quando viene eseguito il comando seguente.

$ sudo ifup eth0

Quando il "<glob_nome_interfaccia> trova corrispondenza con "eth0", l'esecuzione di questo comando produce, per configurare automaticamente eth0, l'invocazione del comando seguente.

$ sudo ifup eth0=$(echo -e '<script_input1> \n <script_input2> \n ...' | <nome_script> eth0)

Le righe, per l'input dello script, che iniziano con "map" sono opzionali e possono essere ripetute.

[Nota] Nota

L'espressione glob per il blocco mapping funziona come i metacaratteri dei glob per nomi di file della shell (vedere Sezione 1.5.6, «Glob della shell»).

Quella che segue è una descrizione di come commutare manualmente tra diverse configurazioni di rete senza dover riscrivere il file "/etc/network/interfaces" come in Sezione 5.6.13, «Riconfigurazione base della rete».

Per tutte le configurazioni di rete alle quali si deve accedere è sufficiente creare una sezione distinta nel file "/etc/network/interfaces" come quello seguente.

auto lo
iface lo inet loopback

iface config1 inet dhcp

iface config2 inet static
 address 192.168.11.100
 netmask 255.255.255.0
 gateway 192.168.11.1
 dns-domain example.com
 dns-nameservers 192.168.11.1

iface pppoe inet manual
 pre-up /sbin/ifconfig eth0 up
 up ifup ppp0=dsl
 down ifdown ppp0=dsl
 post-down /sbin/ifconfig eth0 down

# Quanto segue viene usato solo internamente
iface dsl inet ppp
 provider dsl-provider

iface pots inet ppp
 provider provider

Notare che il nome di configurazione della rete, che è l'elemento che viene dopo iface, non usa il nome dell'interfaccia di rete. Inoltre non ci sono blocchi auto, né allow-hotplug per attivare l'interfaccia di rete eth0 automaticamente in base ad eventi.

Ora tutto è pronto per commutare tra le configurazioni di rete.

Spostare il PC in una LAN con DHCP. L'interfaccia di rete (l'interfaccia fisica) eth0 viene attivata assegnandole il nome di configurazione della rete (il nome dell'interfaccia logica) config1 nel modo seguente.

$ sudo ifup eth0=config1
Password:
...

L'interfaccia eth0 è attiva, configurata con DHCP e connessa alla LAN.

$ sudo ifdown eth0=config1
...

L'interfaccia di rete eth0 è disattivata e disconnessa dalla LAN.

Spostare il PC in una LAN con IP statico. L'interfaccia di rete eth0 viene attivata assegnandole il nome di configurazione della rete config2 nel modo seguente.

$ sudo ifup eth0=config2
...

L'interfaccia eth0 è attiva, configurata con IP statico e connessa alla LAN. I parametri aggiuntivi dns-* forniti configurano il contenuto di "/etc/resolv.conf". Tale file "/etc/resolv.conf" viene gestito meglio se è installato il pacchetto resolvconf.

$ sudo ifdown eth0=config2
...

L'interfaccia di rete eth0 è di nuovo disattivata e disconnessa dalla LAN.

Spostare il PC su una porta di un modem per banda larga connesso ad un servizio PPPoE. L'interfaccia di rete eth0 viene attivata assegnandole il nome di configurazione della rete pppoe nel modo seguente.

$ sudo ifup eth0=pppoe
...

L'interfaccia eth0 è attiva, configurata per la connessione PPPoE diretta con il fornitore di servizi Internet.

$ sudo ifdown eth0=pppoe
...

L'interfaccia di rete eth0 è di nuovo disattivata e disconnessa.

Spostare il PC in una postazione senza LAN o modem per banda larga, ma con una linea telefonica ed un modem. L'interfaccia di rete ppp0 viene attivata assegnandole il nome di configurazione della rete pots nel modo seguente.

$ sudo ifup ppp0=pots
...

L'interfaccia ppp0 è attiva e connessa ad Internet con PPP.

$ sudo ifdown ppp0=pots
...

L'interfaccia di rete ppp0 è disattivata e disconnessa da Internet.

Si dovrebbe controllare nel file "/etc/network/run/ifstate" lo stato attuale della configurazione di rete del sistema ifupdown.

[Avvertimento] Avvertimento

Potrebbe essere necessario cambiare i numeri alla fine di eth*, ppp*, ecc., se si ha più di un'interfaccia di rete.

Il sistema ifupdown esegue automaticamente gli script installati in "/etc/network/*/" esportando le variabili d'ambiente negli script.


In questo caso, ciascuna variabile d'ambiente di tipo "$IF_<OPZIONE>" viene creata a partire dal nome dell'opzione corrispondente, come <opzione1> e <opzione2>, preceduto da "$IF_" e convertendo tutte le lettere in maiuscolo, sostituendo i caratteri di sottolineatura con trattini e scartando i caratteri non alfanumerici.

[Suggerimento] Suggerimento

Vedere Sezione 5.6.2, «Sintassi di base di "/etc/network/interfaces"» per <famiglia_indirizzi>, <nome_metodo>, <opzione1> e <opzione2>.

Il pacchetto ifupdown-extra (vedere Sezione 5.6.14, «Pacchetto ifupdown-extra») usa queste variabili d'ambiente per estendere la funzionalità del pacchetto ifupdown. Il pacchetto ifmetric (vedere Sezione 5.7.2, «Il pacchetto ifmetric») installa lo script "/etc/network/if-up.d/ifmetric" che imposta la metrica attraverso la variabile "$IF_METRIC". Anche il pacchetto guessnet (vedere Sezione 5.7.8, «Mappatura con guessnet»), che fornisce un'infrastruttura semplice e potente per la selezione automatica della configurazione di rete tramite il meccanismo di mappatura , usa queste variabili.

[Nota] Nota

Per esempi più dettagliati di script personalizzati per la configurazione della rete che usano queste variabili d'ambiente, controllare gli script d'esempio in "/usr/share/doc/ifupdown/examples/*" e gli script usati nei pacchetti ifscheme e ifupdown-scripts-zg2. Questi script addizionali hanno alcune funzionalità che si sovrappongono in parte a quelle dei pacchetti base ifupdown-extra e guessnet. Se si installano questi script addizionali, si dovrebbe personalizzarli in modo da evitare interferenze.

Invece di scegliere manualmente la configurazione, come descritto in Sezione 5.7.6, «Configurazione della rete commutabile manualmente», si può usare il meccanismo di mappatura descritto in Sezione 5.7.5, «Il blocco di mappatura "mapping"» per selezionare automaticamente la configurazione di rete con script personalizzati.

Il comando guessnet-ifupdown(8) fornito nel pacchetto guessnet è pensato per essere usato come uno script di mappatura e fornisce un'infrastruttura potente per migliorare il sistema ifupdown.

  • Per ciascuna configurazione di rete in un blocco iface, si elencano delle condizioni da testare come valore per le opzioni di guessnet.

  • La mappatura sceglie come configurazione di rete la prima iface che dà come risultato un non-ERRORE.

Questo doppio uso del file "/etc/network/interfaces" da parte dello script di mappatura, guessnet-ifupdown, e dell''infrastruttura originale di configurazione della rete, ifupdown, non causa impatti negativi dato che le opzioni guessnet esportano solo variabili d'ambiente extra a script eseguiti dal sistema ifupdown. Vedere i dettagli in guessnet-ifupdown(8).

[Nota] Nota

Quando in "/etc/network/interfaces è necessaria più di una riga di opzione guessnet, usare righe di opzione che iniziano con guessnet1, guessnet2 e così via, dato che il pacchetto ifupdown non permette ripetizioni della stringa iniziale delle righe di opzione.

Si possono usare i comandi a basso livello per la rete seguenti in modo sicuro dato che non cambiano la configurazione della rete.


[Suggerimento] Suggerimento

Alcuni di questi strumenti di configurazione di basso livello della rete sono contenuti in "/sbin/". Potrebbe essere necessario fornire il percorso completo dei comandi, come "/sbin/ifconfig" o aggiungere "/sbin" all'elenco in "$PATH" nel proprio file "~/.bashrc".

L'ottimizzazione generale della rete va oltre gli scopi che questo documento si prefigge. Vengono trattati solo quegli argomenti che interessano le connessioni dei computer personali.


Il valore di MTU (Maximum Transmission Unit, unità massima di trasmissione) può essere determinato sperimentalmente con ping(8) usando l'opzione "-M do" che invia pacchetti ICMP con una dimensione dei dati a partire da 1500 (con un offset di 28 byte per l'intestazione IP+ICMP) e trova la dimensione maggiore che non comporta frammentazione IP.

Per esempio, provare a fare quanto segue.

$ ping -c 1 -s $((1500-28)) -M do www.debian.org
PING www.debian.org (194.109.137.218) 1472(1500) bytes of data.
From 192.168.11.2 icmp_seq=1 Frag needed and DF set (mtu = 1454)

--- www.debian.org ping statistics ---
0 packets transmitted, 0 received, +1 errors

Provare 1454 invece di 1500

Come si può vedere ping(8) ha avuto successo con 1454.

Questo processo si chiama "Path MTU (PMTU) discovery (RFC1191) e il comado tracepath(8) può automatizzarlo.

[Suggerimento] Suggerimento

L'esempio precedente di PMTU con un valore di 1454 è per il mio precedente fornitore FTTP che usava ATM (Asynchronous Transfer Mode) come rete backbone e forniva ai clienti un servizio PPPoE. Il valore effettivo di PMTU dipende dal proprio ambiente, ad esempio è 1500 per il mio nuovo fornitore FTTP.


In aggiunta a queste linee guida di base si dovrebbe sapere quanto segue.

  • Qualsiasi uso di metodi di tunnelling (VPN, ecc.) può ridurre ulteriormente l'MTU ottimale per il loro carico.

  • Il valore di MTU non dovrebbe superare il valore di PMTU determinato sperimentalmente.

  • A patto di seguire le indicazioni precedenti un valore maggiore di MTU è meglio.

Quelli che seguono sono alcuni esempi di come impostare il valore di MTU dal suo valore predefinito 1500 a 1454.

Per DHCP (vedere Sezione 5.6.4, «Interfaccia di rete servita da DHCP»), si possono sostituire le righe pertinenti nei blocchi iface nel file "/etc/network/interfaces" con blocchi come il seguente.

iface eth0 inet dhcp
 pre-up /sbin/ifconfig $IFACE mtu 1454

Per IP statico (vedere Sezione 5.6.5, «Interfaccia di rete con IP statico»), si possono sostituire le righe pertinenti nei blocchi iface nel file "/etc/network/interfaces" con blocchi come il seguente.

iface eth0 inet static
 address 192.168.11.100
 netmask 255.255.255.0
 gateway 192.168.11.1
 mtu 1454
 dns-domain example.com
 dns-nameservers 192.168.11.1

Per la connessione PPPoE diretta (vedere Sezione 5.5.5, «Connessione PPPoE con pppoeconf», si possono sostituire le riga "mtu" pertinente nel file "/etc/ppp/peers/dsl-provider" con la seguente.

mtu 1454

Il valore di MSS (Maximum Segment Size, dimensione massima di segmento)MSS è usato come misura alternativa della dimensione dei pacchetti. Le relazioni tra MSS e MTU sono le seguenti.

  • MSS = MTU - 40 per IPv4

  • MSS = MTU - 60 per IPv6

[Nota] Nota

L'ottimizzazione basata su iptables(8) (vedere Sezione 5.10, «Infrastruttura netfilter») può bloccare la dimensione dei pacchetti al valore MSS ed è utile per il router. Vedere "TCPMSS" in iptables(8).

Il flusso TCP può essere massimizzato regolando i parametri di dimensione del buffer TCP come descritto in "TCP Tuning Guide" e "TCP tuning" per le moderne WAN a larga banda e alta latenza. Per adesso, le attuali impostazioni predefinite di Debian funzionano bene persino per la mia LAN connessa con un servizio FTTP veloce a 1Gbps.

Netfilter fornisce un'infrastruttura per firewall con stati e traduzione di indirizzi di rete (NAT) con moduli del kernel Linux (vedere Sezione 3.3.1, «L'inizializzazione dei moduli del kernel»).


Il principale programma in spazio utente di netfilter è iptables(8). Si può configurare manualmente netfilter in modo interattivo dalla shell, salvare il suo stato con iptables-save(8) e ripristinarlo attraverso uno script di init con iptables-restore(8) al riavvio del sistema.

Script di aiuto per la configurazione come shorewall facilitano questo processo.

Vedere la documentazione all'indirizzo http://www.netfilter.org/documentation/ (o in "/usr/share/doc/iptables/html/").

[Suggerimento] Suggerimento

Anche se questi documenti sono stati scritti per Linux 2.4, sia il comando iptables(8) sia la funzione netfilter del kernel sono validi per gli attuali kernel Linux 2.6 e 3.x.