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. Configurazione della rete a basso livello
5.4.1. Comandi iproute2
5.4.2. Operazioni sicure a basso livello sulla rete
5.5. Ottimizzazione della rete
5.5.1. Trovare l'MTU ottimale
5.5.2. Ottimizzazione di TCP per la WAN
5.6. Infrastruttura netfilter
[Suggerimento] Suggerimento

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

[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
network-manager V:363, I:428 14803 config::NM NetworkManager (demone): gestisce la rete automaticamente
network-manager-gnome V:122, I:354 5570 config::NM NetworkManager (frontend GNOME)
ifupdown V:586, I:983 199 config::ifupdown strumento standard per attivare e disattivare la rete (specifico di Debian)
isc-dhcp-client V:218, I:981 2857 config::low-level client DHCP
pppoeconf V:0, I:7 192 config::helper strumento di aiuto di configurazione per la connessione PPPoE
wpasupplicant V:332, I:486 3851 " " supporto client per WPA e WPA2 (IEEE 802.11i)
wpagui V:0, I:2 758 " " client GUI Qt per WPA supplicant
wireless-tools V:163, I:220 292 " " strumenti per manipolare le estensioni wireless per Linux
iw V:156, I:454 302 " " strumento per configurare dispositivi wireless per Linux
iproute2 V:709, I:958 3514 config::iproute2 iproute2, IPv6 e altra configurazione di rete avanzata: ip(8), tc(8), ecc.
iptables V:315, I:889 2408 config::Netfilter strumenti amministrativi per filtraggio di pacchetti di rete e NAT (Netfilter)
iputils-ping V:204, I:997 120 test testa la raggiungibilità di rete di un host remoto con nome host o indirizzo IP (iproute2)
iputils-arping V:4, I:57 49 test testa la raggiungibilità di rete di un host remoto specificato con il suo indirizzo ARP
iputils-tracepath V:3, I:39 45 test traccia il percorso di rete verso un host remoto
ethtool V:98, I:278 668 test mostra e modifica le impostazioni dei device Ethernet
mtr-tiny V:7, I:52 161 test::low-level traccia il percorso di rete verso un host remoto (curses)
mtr V:4, I:44 214 " " traccia il percorso di rete verso un host remoto (curses e GTK)
gnome-nettool V:1, I:25 2492 " " strumenti per operazioni comuni sulle informazioni di rete (GNOME)
nmap V:25, I:222 4434 " " strumento per mappatura della rete / esplorazione delle porte (Nmap, console)
zenmap V:0, I:2 2939 " " strumento per mappatura della rete /esplorazione delle porte (GTK)
tcpdump V:17, I:196 1332 " " analizzatore del traffico di rete (Tcpdump, console)
wireshark I:48 37 " " analizzatore del traffico di rete (Wireshark, GTK)
tshark V:2, I:28 403 " " analizzatore del traffico di rete (console)
tcptrace V:0, I:2 401 " " produce un riassunto delle connessioni dall'output di tcpdump
snort V:0, I:1 2203 " " sistema flessibile di rilevazione delle intrusioni di rete (Snort)
ntopng V:1, I:1 15904 " " mostra l'uso della rete nel browser web
dnsutils V:26, I:369 260 " " client di rete forniti con BIND: nslookup(8), nsupdate(8), dig
dlint V:0, I:5 53 " " controlla l'informazione DNS di zona usando interrogazioni del server di nomi
dnstracer V:0, I:1 61 " " 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 host_name

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

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.

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.

Debian può gestire la connessione di rete attraverso software per demoni di gestione come NetworkManager (NM) (network-manager 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".

La documentazione ufficiale per NM in Debian è fornita in "/usr/share/doc/network-manager/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 foo netdev
  2. Mantenere la configurazione di "/etc/network/interfaces" semplice come la seguente.

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

    $ sudo systemctl restart network-manager
  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, per evitare conflitti con ifupdown.

[Suggerimento] Suggerimento

Se si desiderano 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.

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

Per la configurazione di rete a basso livello in Linux usare i programmi iproute2 (ip(8), …) .

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.


NM di solito imposta automaticamente la Maximum Transmission Unit (MTU) ottimale.

In alcune occasioni si può volere impostare l'MTU manualmente dopo esperimenti con ping(8) con l'opzione "-M do" per inviare un pacchetto ICMP con varie dimensioni di pacchetti di dati. MTU è la dimensione massima di pacchetti dati con successo senza frammentazione IP più 28 byte per IPv4 e 48 byte per IPv6. Per esempio, quanto segue scopre che l'MTU per la connessione IPv4 è 1460 e l'MTU per la connessione IPv6 è 1500.

$ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org
PING  (149.20.4.15) 1472(1500) bytes of data.
ping: local error: message too long, mtu=1460

---  ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

$ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org
PING  (130.89.148.77) 1432(1460) bytes of data.
1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms

---  ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms
$ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org
PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes
1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms

--- www.debian.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms

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


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.

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.6, «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.8.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.