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 configurazione moderna della rete per il cloud
5.4.1. La configurazione moderna della rete per il cloud con DHCP
5.4.2. La configurazione moderna della rete per il cloud con IP statico
5.4.3. La configurazione moderna della rete per il cloud con Network Manager
5.5. Configurazione della rete a basso livello
5.5.1. Comandi iproute2
5.5.2. Operazioni sicure a basso livello sulla rete
5.6. Ottimizzazione della rete
5.6.1. Trovare l'MTU ottimale
5.6.2. Ottimizzazione di TCP per la WAN
5.7. 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:392, I:459 15542 config::NM NetworkManager (demone): gestisce la rete automaticamente
network-manager-gnome V:121, I:369 5583 config::NM NetworkManager (frontend GNOME)
netplan.io V:1, I:5 319 config::NM+networkd Netplan (generatore): interfaccia unificata, dichiarativa ai backend NetworkManager e systemd-networkd
ifupdown V:608, I:979 199 config::ifupdown strumento standard per attivare e disattivare la rete (specifico di Debian)
isc-dhcp-client V:217, I:981 2875 config::low-level client DHCP
pppoeconf V:0, I:5 186 config::helper strumento di aiuto di configurazione per la connessione PPPoE
wpasupplicant V:353, I:513 3862 config::helper supporto client per WPA e WPA2 (IEEE 802.11i)
wpagui V:0, I:1 774 config::helper client GUI Qt per WPA supplicant
wireless-tools V:179, I:244 292 config::helper strumenti per manipolare le estensioni wireless per Linux
iw V:34, I:475 302 config::helper strumento per configurare dispositivi wireless per Linux
iproute2 V:736, I:972 3606 config::iproute2 iproute2, IPv6 e altra configurazione di rete avanzata: ip(8), tc(8), ecc.
iptables V:319, I:718 2414 config::Netfilter strumenti amministrativi per filtraggio di pacchetti di rete e NAT (Netfilter)
nftables V:106, I:701 182 config::Netfilter strumenti amministrativi per filtraggio di pacchetti di rete e NAT (Netfilter) (successore di {ip,ip6,arp,eb}tables)
iputils-ping V:194, I:997 122 test testa la raggiungibilità di rete di un host remoto con nome host o indirizzo IP (iproute2)
iputils-arping V:3, I:36 50 test testa la raggiungibilità di rete di un host remoto specificato con il suo indirizzo ARP
iputils-tracepath V:2, I:30 47 test traccia il percorso di rete verso un host remoto
ethtool V:95, I:267 739 test mostra e modifica le impostazioni dei device Ethernet
mtr-tiny V:5, I:46 156 test::low-level traccia il percorso di rete verso un host remoto (curses)
mtr V:4, I:41 209 test::low-level traccia il percorso di rete verso un host remoto (curses e GTK)
gnome-nettool V:0, I:17 2492 test::low-level strumenti per operazioni comuni sulle informazioni di rete (GNOME)
nmap V:25, I:199 4498 test::low-level strumento per mappatura della rete / esplorazione delle porte (Nmap, console)
tcpdump V:17, I:175 1340 test::low-level analizzatore del traffico di rete (Tcpdump, console)
wireshark I:45 10417 test::low-level analizzatore del traffico di rete (Wireshark, GTK)
tshark V:2, I:25 400 test::low-level analizzatore del traffico di rete (console)
tcptrace V:0, I:2 401 test::low-level produce un riassunto delle connessioni dall'output di tcpdump
snort V:0, I:0 2203 test::low-level sistema flessibile di rilevazione delle intrusioni di rete (Snort)
ntopng V:0, I:1 15904 test::low-level mostra l'uso della rete nel browser web
dnsutils V:16, I:280 276 test::low-level client di rete forniti con BIND: nslookup(8), nsupdate(8), dig
dlint V:0, I:3 53 test::low-level controlla l'informazione DNS di zona usando interrogazioni del server di nomi
dnstracer V:0, I:1 59 test::low-level 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.

Una postazione di lavoro tipica può essere installata con il nome host impostato, ad esempio, come "host_name" e il suo nome di dominio opzionale impostato come stringa vuota. Poi, /etc/hosts" avrà l'aspetto seguente.

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" (vedere Sezione 3.7.1, «Il nome host»).

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) 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" (vedere /usr/share/doc/libnss-mdns/README.Debian per altre configurazioni).

  • I nomi host che terminano con lo pseudo-dominio di livello più alto ".local" vengono risolti inviando un messaggio di interrogazione mDNS in un pacchetto UDP multicast usando l'indirizzo IPv4 "224.0.0.251" o l'indirizzo IPv6 "FF02::FB".

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

[Nota] Nota

L'uso di pacchetti come libnss-resolve insieme a systemd-resolved, o libnss-myhostname, o libnss-mymachine, con quanto corrispondente elencato nella riga "hosts" nel file "/etc/nsswitch.conf" può scavalcare la configurazione di rete tradizionale discussa sopra. Vedere nss-resolve(8), systemd-resolved(8), nss-myhostname(8) e nss-mymachines(8) per maggiori informazioni.

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 usermod -a -G 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

La configurazione moderna della rete per il cloud può usare i pacchetti cloud-init e netplan.io (vedere Sezione 3.7.4, «Inizializzazione del sistema cloud»).

Il pacchetto netplan.io supporta systemd-networkd e NetworkManager come suoi backend di configurazione della rete, e permette la configurazione dichiarativa della rete usando dati YAML. Quando si cambia YAML:

  • eseguire il comando "netplan generate" per generare tutta la necessaria configurazione del backend da YAML.

  • Eseguire il comando "netplan apply" per applicare la configurazione generata ai backend.

Vedere la "documentazione di Netplan", netplan(5), netplan-generate(8) e netplan-apply(8).

Vedere anche la "documentazione di Cloud-init" (in particolare relativamente alle "fonti di configurazione" e "Netplan Passthrough") per come cloud-init può integrare la configurazione di netplan.io con fonti alternative di dati.

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 "/usr/sbin/". Potrebbe essere necessario fornire il percorso completo dei comandi, come "/usr/sbin/ifconfig" o aggiungere "/usr/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.7, «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" 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 1G bps.

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

Tabella 5.7. Elenco di strumenti per firewall

pacchetto popcon dimensione descrizione
nftables V:106, I:701 182 strumenti amministrativi per filtraggio di pacchetti di rete e NAT (Netfilter) (successore di {ip,ip6,arp,eb}tables)
iptables V:319, I:718 2414 strumenti di amministrazione per netfilter (iptables(8) per IPv4, ip6tables(8) per IPv6)
arptables V:0, I:1 100 strumenti di amministrazione per netfilter (arptables(8) per ARP)
ebtables V:14, I:29 276 strumenti di amministrazione per netfilter (ebtables(8) per bridge Ethernet)
iptstate V:0, I:2 119 monitora continuamente lo stato di netfilter (in modo simile a top(1))
ufw V:55, I:77 859 Uncomplicated Firewall (UFW) è un programma per gestire un firewall netfilter
gufw V:5, I:10 3660 interfaccia utente grafica per Uncomplicated Firewall (UFW)
firewalld V:11, I:16 2613 firewalld è un programma per firewall gestito dinamicamente con supporto per le zone di rete
firewall-config V:0, I:3 1163 interfaccia utente grafica per firewalld
shorewall-init V:0, I:0 88 inizializzazione di Shoreline Firewall
shorewall V:3, I:8 3090 generatore di file di configurazione per Shoreline Firewall, netfilter
shorewall-lite V:0, I:0 71 generatore di file di configurazione per Shoreline Firewall, netfilter (versione leggera)
shorewall6 V:0, I:1 1334 generatore di file di configurazione per Shoreline Firewall, netfilter (versione IPv6)
shorewall6-lite V:0, I:0 71 generatore di file di configurazione per Shoreline Firewall, netfilter (versione IPv6 leggera)

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