Network configuration (Italiano) - ArchWiki

Jump to content

# Network configuration (Italiano)

From ArchWiki

Articoli correlati

- Network Debugging
- Firewalls
- Internet sharing
- Router

Questo articolo descrive come configurare le connessioni di rete su OSI layer 3 e versioni successive. Le specifiche del supporto sono gestite nelle sottopagine Ethernet e Wireless.

Una semplice guida per la configurazione di rete e risoluzione di problemi annessi.

## Controllare la connessione

Per risolvere i problemi relativi a una connessione di rete, attenersi alle seguenti condizioni e assicurarsi di soddisfarle:

1. La tua interfaccia di rete è elencata e abilitata. Altrimenti, controlla il driver del dispositivo – vedi Ethernet#Device driver o Wireless#Device driver.
2. Sei connesso alla rete. Il cavo è collegato o sei connesso alla LAN wireless.
3. La tua interfaccia di rete ha un indirizzo IP.
4. Puoi effettuare il ping di un indirizzo IP locale (ad esempio il tuo gateway predefinito).
5. Puoi effettuare il ping di un indirizzo IP pubblico (ad es. `8.8.8.8`, che è un server DNS di Google ed è un indirizzo conveniente con cui testare).
6. Controlla se puoi risolvere i nomi di dominio (es. `archlinux.org`).

### Ping

This article or section needs expansion.

Reason: Aggiungi o collega la spiegazione di errori di ping comuni come Host sconosciuti/La rete non è raggiungibile. (Discuss in Talk:Network configuration (Italiano))

    $ ping www.example.com

    PING www.example.com (93.184.216.34): 56(84) data bytes
    64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=11.632 ms
    64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=11.726 ms
    64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=10.683 ms
    ...

Per ogni risposta che ricevi, l'utility ping stamperà una riga come quella sopra. Per maggiori informazioni vedere il manuale ping(8). Si noti che i computer possono essere configurati per non rispondere alle richieste echo ICMP.

Se non ricevi risposta, ciò potrebbe essere correlato al tuo gateway predefinito o al tuo provider di servizi Internet (ISP). Puoi eseguire un traceroute per diagnosticare ulteriormente il percorso verso l'host.

Nota: Se ricevi un errore come `ping: icmp open socket: Operazione non consentita` durante l'esecuzione di ping, prova a reinstallare il pacchetto iputils.

## Gestione della rete

Per configurare una connessione di rete, seguire i seguenti passaggi:

1. Assicurati che la tua interfaccia di rete sia elencata e abilitata.
2. Connettiti alla rete. Collega il cavo Ethernet o connettiti alla LAN wireless.
3. Configura la tua connessione di rete:
   - indirizzo IP statico
   - indirizzo IP dinamico: usa DHCP

Nota: L'immagine di installazione utilizza systemd-resolved e systemd-networkd, che è configurato come client DHCP per Ethernet, WLAN e WWAN interfacce di rete.

### net-tools

Arch Linux ha deprecato net-tools in favore di iproute2.[1]

Comando deprecato | Nuovo comando
--- | ---
arp | ip neighbor
ifconfig | ip address, ip link
netstat | ss
route | ip route

Per una panoramica più completa, vedere Comandi di rete Linux deprecati e loro sostituzioni.

### iproute2

iproute2 è una dipendenza del meta pacchetto base e fornisce l'interfaccia a riga di comando ip(8), utilizzata per gestire le interfacce di rete, indirizzi IP e la tabella di instradamento. Tieni presente che la configurazione eseguita utilizzando `ip` andrà persa dopo un riavvio. Per una configurazione persistente, puoi utilizzare un gestore di rete o automatizzare i comandi ip utilizzando script e systemd units. Si noti che i comandi `ip` possono essere generalmente abbreviati, per chiarezza sono comunque spiegati in questo articolo.

### Interfacce di rete

Per impostazione predefinita udev assegna i nomi alle interfacce di rete utilizzando Predictable Network Interface Names, che antepone i nomi alle interfacce con `en` (wired/Ethernet), `wl` (wireless/WLAN) o `ww` (WWAN). Vedi systemd.net-naming-scheme(7).

Suggerimento: Per modificare i nomi delle interfacce, vedere #Cambiare nome interfaccia e #Ripristina i nomi delle interfacce tradizionali.

#### Elenco delle interfacce di rete

a indicarea indicare I nomi delle interfacce cablate e wireless possono essere trovati tramite `ls /sys/class/net` o `ip link`. Nota che `lo` è l'virtual loopback interface e non viene utilizzata per effettuare connessioni di rete.

I nomi dei dispositivi wireless possono essere recuperati anche utilizzando `iw dev`. Vedi anche Wireless#Ottieni il nome dell'interfaccia.

Se la tua interfaccia di rete non è elencata, assicurati che il driver del dispositivo sia stato caricato correttamente. Vedere Ethernet#Device driver o [[Wireless#Device driver]

Indirizzo==== Abilitazione e disabilitazione delle interfacce di rete ====

Le interfacce di rete possono essere abilitate o disabilitate usando `ip link set interface up|down`, si veda ip-link(8).

Per controllare lo stato dell'interfaccia `enp2s0`:

    $ ip link show dev enp2s0

    2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN mode DEFAULT qlen 1000
    ...

La parola `UP` in `<BROADCAST,MULTICAST,UP,LOWER_UP>` sta a indicare che l'interfaccia è attiva, non si considera la successiva `state DOWN`.

Nota: Se il tuo percorso predefinito è attraverso l'interfaccia `enp2s0`, rimuoverlo rimuoverà anche il percorso e ripristinarlo non ristabilirà automaticamente il percorso predefinito. Vedere #Tabella di routing per ristabilirlo.

### Indirizzo IP statico o dinamico?

Se utilizzate un Wi-FI o un router, ad esempio, a casa, molto probabilmente utilizzerete un indirizzo IP dinamico. L'indirizzo IP viene assegnato dal Wi-Fi o dal router ed è il modo in cui il vostro computer dovrebbe essere configurato. Oppure, se si e a casa e il vostro computer è connesso al modem del vostro ISP, ad esempio un modem via cavo, anche questo utilizzerà un indirizzo IP dinamico. Gli indirizzi IP dinamici possono cambiare ogni volta che accendi il computer. In un ambiente di lavoro si potrebbe avere un indirizzo IP statico o un indirizzo IP dinamico. Si può configurare il proprio router in modo che assegni sempre al proprio computer lo stesso indirizzo IP, in questo casi si sta utilizzando un indirizzo IP statico. Quando si utilizza un indirizzo IP dinamico, sarà necessario utilizzare DHCP in modo che possa configurare l'interfaccia di rete con l'indirizzo IP corretto. Oltre a configurare l'ìndirizzo IP, DHCP può anche configurare il routing (come arrivare da dove ti trovi a qualsiasi punto della rete sta andando) così come i name server, che convertono il nome host, ad esempio, google.com, nel suo indirizzo IP, un numero con dei punti.

### Indirizzo IP statico

Un indirizzo IP statico può essere configurato con la maggior parte dei gestori di rete e anche con dhcpcd.

Per configurare manualmente un indirizzo IP statico, aggiungi un indirizzo IP come descritto in #Indirizzi IP, imposta la tua Tabella di routing e configura i tuoi server DNS.

### Indirizzi IP

Gli indirizzi IP sono gestiti usando ip-address(8).

Per un elenco d'indirizzi IP

    $ ip address show

Per aggiungere un indirizzo IP a una interfaccia

    # ip address add address/prefix_len broadcast + dev interface

  Nota che :

  - l'indirizzo è fornito in CIDR notation per fornire anche un subnet mask
  - `+` è un simbolo speciale che fa derivare `ip` broadcast address dall'indirizzo IP e dalla subnet mask

  Nota: Assicurati che gli indirizzi IP assegnati manualmente non siano in conflitto con quelli assegnati da DHCP.

Eliminare un indirizzo IP da una interfaccia:

    # ip address del address/prefix_len dev interface

Eliminare tutti gli indirizzi che corrispondono a un criterio, ad es. di una specifica interfaccia:

    # ip address flush dev interface

Suggerimento: Gli indirizzi IP possono essere calcolati con ipcalc (ipcalc).

### Tabella di routing

La routing table è usata per determinare se puoi raggiungere direttamente un indirizzo IP o quale gateway (router) dovresti usare. Se nessun'altra route corrisponde all'indirizzo IP, viene utilizzato il gateway predefinito.

La tabella di routing è gestita utilizzando ip-route(8).

PREFIX è una notazione CIDR o `default` per il gateway predefinito.

Elenco percorsi IPv4

    $ ip route show

Elenco percorsi IPv6

    $ ip -6 route

Aggiungere un percorso

    # ip route add PREFIX via address dev interface

Cancellare un percorso

    # ip route del PREFIX via address dev interface

### DHCP

Un server Dynamic Host Configuration Protocol (DHCP) fornisce ai client un indirizzo IP dinamico, la subnet mask, l'indirizzo IP del gateway predefinito e, facoltativamente, anche i server dei nomi DNS.

Per utilizzare DHCP è necessario un server DHCP nella rete e un client DHCP:

Client | Package | Archiso | Note | Systemd units
--- | --- | --- | --- | ---
dhcpcd | dhcpcd | Yes | DHCP, DHCPv6, ZeroConf, static IP | `dhcpcd.service`, `dhcpcd@interface.service`
ISC dhclient | dhclient | Yes | DHCP, DHCPv6, BOOTP, static IP | `dhclient@interface.service`

Nota:

- Non dovresti eseguire due client DHCP contemporaneamente.
- Invece di utilizzare direttamente un client DHCP autonomo, puoi anche utilizzare un gestore di rete, alcuni dei quali hanno un client DHCP integrato.

Suggerimento:

- Puoi controllare se un server DHCP è in esecuzione con dhcping.
- Mentre aspetti che venga assegnato un IP puoi eseguire qualcosa come `watch -n 1 ping -c 1 archlinux.org` per confermare che la rete è connessa.

#### Servers

This article or section needs expansion.

Reason: systemd-networkd has DHCP server support. (Discuss in Talk:Network configuration (Italiano))

Server | Package | IPv4 | IPv6 | GUI | Interfaces | Storage backend(s) | Note
--- | --- | --- | --- | --- | --- | --- | ---
dhcpd | dhcp | Yes | Yes | Glass-ISC-DHCP | ? | File |
dnsmasq | dnsmasq | Yes | Yes | No | ? | File | come DNS, PXE e TFTP
Kea | kea | Yes | Yes | Kea-Anterius (Experimental) | REST, RADIUS e NETCONF | File, MySQL, PostgreSQL e Cassandra | come DNS

### Gestori di rete

Un gestore di rete consente di gestire le impostazioni della connessione di rete nei cosiddetti profili di rete per facilitare il cambio di rete.

Nota: Ci sono molte soluzioni tra cui scegliere, ma ricorda che tutte si escludono a vicenda; non dovresti eseguire due gestori di rete contemporaneamente.

Network manager | GUI | Archiso [2] | CLI tools | PPP support (e.g. 3G modem) | DHCP client | systemd units
--- | --- | --- | --- | --- | --- | ---
ConnMan | 8 unofficial | No | connmanctl(1) | Yes (with ofonoAUR) | internal | `connman.service`
netctl | 2 unofficial | No | netctl(1), wifi-menu | Yes | dhcpcd or dhclient | `netctl-ifplugd@interface.service`, `netctl-auto@interface.service`
NetworkManager | Yes | No | nmcli(1), nmtui(1) | Yes | internal or dhclient | `NetworkManager.service`
systemd-networkd | No | Yes (base) | networkctl(1) | No | internal | `systemd-networkd.service`, `systemd-resolved.service`
Wicd | Yes | No | wicd-cli(8), wicd-curses(8) | No | dhcpcd or dhclient | `wicd.service`

## Impostare l'host name

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Reason: The `myhostname` pseudo-variable may cause confusion since that name is also used by nss-myhostname(8). (Discuss in Talk:Network configuration (Italiano))

Un hostname è un nome univoco creato per identificare un pc in rete, configurato in `/etc/hostname`-per ulteriori dettagli vedere hostname(5) e hostname(7). Il file può contenere il nome di dominio del sistema, se presente. Per impostare il nome host, editare `/etc/hostname` per includere una singola riga con `myhostname`:

    /etc/hostname

    myhostname

Suggerimento: Per consigli sulla scelta di un nome host, vedere RFC 1178.

In alternativa, usando hostnamectl(1):

    # hostnamectl set-hostname myhostname

Per impostare temporaneamente il nome host (fino al riavvio), usa hostname(1) da inetutils:

    # hostname myhostname

Per impostare il nome host 'pretty' e altri metadati della macchina, vedere machine-info(5).

### Risoluzione del nome host locale

nss-myhostname(8) (un modulo NSS fornito da systemd) fornisce la risoluzione del nome host locale senza dover modificare `/etc/hosts`. Si è abilitata di default.

This article or section needs expansion.

Reason: localhost entries should be in `/etc/hosts` by default; see FS#56684. After the bug is fixed, this section should be rewritten as a troubleshooting section and moved to #Troubleshooting. (Discuss in Talk:Network configuration (Italiano)#Local hostname resolution as troubleshooting)

Alcuni software possono comunque leggere direttamente `/etc/hosts`, vedere [3] [4] per esempi. Per evitare che possano potenzialmente interrompere, bloccare o ritardare in altro modo l'operazione, assicurati che possano risolvere il nome host locale e `localhost` configurando il file hosts(5):

    /etc/hosts

    127.0.0.1        localhost
    ::1              localhost
    127.0.1.1        myhostname

This article or section needs expansion.

Reason: Why `127.0.1.1` is used (and why a static IP address should be preferred over it). (Discuss in Talk:Network configuration (Italiano)#Why should a static IP be preferred over 127.0.1.1 in /etc/hosts?)

Per un sistema con un indirizzo IP permanente, sostituire `127.0.1.1` con quell'indirizzo IP permanente. Per un sistema con un nome di dominio completo, inserire il nome di dominio completo prima del nome host. Per esempio:

    /etc/hosts

    127.0.0.1        localhost
    ::1              localhost
    203.0.113.45     host1.fqdomain.example host1

Nota: L'ordine dei nomi host/alias che seguono l'indirizzo IP in `/etc/hosts` è significativo. La prima stringa è considerata il nome host canonico e può essere aggiunta ai domini padre, dove i componenti del dominio sono separati da un punto. Tutte le stringhe successive sulla stessa riga sono considerate alias. Vedi hosts(5) per maggiori informazioni.

Di conseguenza il sistema risolve entrambe le voci:

    $ getent hosts

    127.0.0.1       localhost
    127.0.0.1       localhost
    127.0.1.1       myhostname

### Risoluzione del nome host della rete locale

Per rendere la tua macchina accessibile nella tua LAN tramite il suo nome host puoi:

- modifica il file `/etc/hosts` per ogni dispositivo nella tua LAN, vedi hosts(5)
- configura un DNS server per risolvere il tuo nome host e fare in modo che i dispositivi LAN lo utilizzino (ad es. tramite #DHCP)
- o nel modo più semplice: usa un servizio Rete a configurazione zero:
  - Risoluzione del nome host tramite NetBIOS di Microsoft. Fornito da Samba su Linux. Richiede solo `nmb.service`. I computer che eseguono Windows, macOS o Linux con `nmb` in esecuzione potranno trovare la tua macchina.
  - Risoluzione del nome host tramite mDNS. Fornito da `nss_mdns` con Avahi (vedi Avahi#Hostname resolution per i dettagli di configurazione) o systemd-resolved. I computer che eseguono macOS, o Linux con Avahi o sistema risolto in esecuzione, saranno in grado di trovare la tua macchina. L'API Win32 precedente non supporta mDNS, il che potrebbe impedire ad alcune applicazioni Windows meno recenti di accedere al dispositivo.

## Tips and tricks

### Cambia il nome dell'interfaccia

Nota: Quando si modifica lo schema di denominazione, non dimenticare di aggiornare tutti i file di configurazione relativi alla rete e i file di unità systemd personalizzati per riflettere la modifica.

È possibile modificare il nome del dispositivo definendo il nome manualmente con una regola udev. Per esempio:

    /etc/udev/rules.d/10-network.rules

    SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="net1"
    SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ff:ee:dd:cc:bb:aa", NAME="net0"

Queste regole verranno applicate automaticamente all'avvio.

Un paio di cose da notare:

- Per ottenere l'indirizzo MAC di ogni scheda, usa questo comando: `cat /sys/class/net/device_name/address`
- Assicurati di utilizzare i valori esadecimali minuscoli nelle regole udev. Non gli piacciono le maiuscole.

Se la scheda di rete ha un MAC dinamico, puoi utilizzare `DEVPATH`, ad esempio:

    /etc/udev/rules.d/10-network.rules

    SUBSYSTEM=="net", DEVPATH=="/devices/platform/wemac.*", NAME="int"
    SUBSYSTEM=="net", DEVPATH=="/devices/pci*/*1c.0/*/net/*", NAME="en"

Per ottenere il `DEVPATH` di tutti i dispositivi attualmente connessi, guarda dove portano i collegamenti simbolici in `/sys/class/net/`. Per esempio:

    file /sys/class/net/*

    /sys/class/net/enp0s20f0u4u1: symbolic link to ../../devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4.1/2-4.1:1.0/net/enp0s20f0u4u1
    /sys/class/net/enp0s31f6:     symbolic link to ../../devices/pci0000:00/0000:00:1f.6/net/enp0s31f6
    /sys/class/net/lo:            symbolic link to ../../devices/virtual/net/lo
    /sys/class/net/wlp4s0:        symbolic link to ../../devices/pci0000:00/0000:00:1c.6/0000:04:00.0/net/wlp4s0
    d'interfaccia

Il percorso del dispositivo deve corrispondere sia al nuovo che al vecchio nome del dispositivo, poiché la regola può essere eseguita più di una volta all'avvio. Ad esempio, nella seconda regola, `'/devices/pci*/*1c.0/*/net/enp*'` sarebbe sbagliato poiché smetterà di corrispondere una volta cambiato il nome in `it`. Solo la regola predefinita del sistema si attiverà la seconda volta, causando la modifica del nome ad es. `enp1s0`.

Se stai utilizzando un dispositivo di rete USB (ad es. Tethering del telefono Android) che ha un indirizzo MAC dinamico e desideri essere in grado di utilizzare diverse porte USB, puoi invece utilizzare una regola che corrisponda a seconda del fornitore e dell'ID prodotto:

    /etc/udev/rules.d/10-network.rules

    SUBSYSTEM=="net", ACTION=="add", ATTRS{idVendor}=="12ab", ATTRS{idProduct}=="3cd4", NAME="net2"

Per testare le regole, si possono essere verificare direttamente dallo spazio utente, ad es. con `udevadm --debug test /sys/class/net/*`. Ricordati di rimuovere prima l'interfaccia che stai cercando di rinominare (es. `ip link set enp1s0 down`).

Nota: Quando si scelgono i nomi statici dovrebbe essere evitato di usare nomi nel formato 'ethX' e 'wlanX', perché questo potrebbe portare a una competizione tra il kernel e udev durante l'avvio. Invece, è meglio usare nomi d'interfaccia che non sono usati dal kernel come default, ad esempio: `net0`, `net1`, `wifi0`, `wifi1` . Per ulteriori dettagli, consultare la documentazione [5].

### Ripristina i nomi delle interfacce tradizionali

Se si preferisce mantenere i nomi delle interfacce tradizionali come eth0, Predictable Network Interface Names si può disabilitare mascherando la regola udev:

1. ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules

In alternativa, aggiungere `net.ifnames=0` ai kernel parameters.

### Imposta l'MTU del dispositivo e la lunghezza della coda

Puoi modificare il dispositivo MTU e la lunghezza della coda definendo manualmente con una regola udev. Per esempio:

    /etc/udev/rules.d/10-network.rules

    ACTION=="add", SUBSYSTEM=="net", KERNEL=="wl*", ATTR{mtu}="1500", ATTR{tx_queue_len}="2000"

`mtu`: l'utilizzo di un valore maggiore di 1500 (i cosiddetti jumbo frames) può accelerare notevolmente i trasferimenti di rete. Si noti che tutte le interfacce di rete, inclusi gli switch nella rete locale, devono supportare la stessa MTU per utilizzare i frame jumbo. Per PPPoE, l'MTU non deve essere maggiore di 1492. Puoi anche impostare l'MTU tramite systemd.netdev(5).

`tx_queue_len`: valore ridotto per dispositivi più lenti con una latenza elevata come collegamenti modem e ISDN. Un valore alto è consigliato per server connessi tramite connessioni Internet ad alta velocità che eseguono grandi trasferimenti di dati.

### Incollaggio o LAG

Vedere netctl o systemd-networkd, o Wireless bonding.

### Aliasing dell'indirizzo IP

L'aliasing IP è il processo di aggiunta di più di un indirizzo IP a un'interfaccia di rete. Con questo, un nodo su una rete può avere più connessioni a una rete, ognuna con uno scopo diverso. Gli usi tipici sono l'hosting virtuale di server Web e FTP o la riorganizzazione dei server senza dover aggiornare altre macchine (questo è particolarmente utile per i server dei nomi).

#### Esempio

Per impostare manualmente un alias, per alcune NIC, utilizzare iproute2 per eseguire

1. ip addr add 192.168.2.101/24 dev enp2s0 label enp2s0:1

Per rimuovere un dato alias eseguire

1. ip addr del 192.168.2.101/24 dev enp2s0:1

I pacchetti destinati a una sotto rete utilizzeranno l'alias primario per impostazione predefinita. Se l'IP di destinazione si trova all'interno di una sotto rete di un alias secondario, viene impostato rispettivamente l'IP di origine. Considera il caso in cui ci sia più di una NIC, le route predefinite possono essere elencate con `ip route`.

### Modalità promiscua

L'attivazione della modalità promiscua farà sì che una NIC (wireless) inoltri tutto il traffico che riceve al sistema operativo per un'ulteriore elaborazione. Questo è l'opposto della 'modalità normale' in cui una NIC eliminerà i frame che non è destinata a ricevere. Viene spesso utilizzato per la risoluzione dei problemi di rete avanzata e packet sniffing.

    /etc/systemd/system/promiscuous@.service

    [Unit]
    Description=Set %i interface in promiscuous mode
    After=network.target

    [Service]
    Type=oneshot
    ExecStart=/usr/bin/ip link set dev %i promisc on
    RemainAfterExit=yes

    [Install]
    WantedBy=multi-user.target

Se vuoi abilitare la modalità promiscua sull'interfaccia `enp2s0` esegui enable `promiscuous@enp2s0.service`.

### Interrogare i socket

ss è un'utilità per esaminare le porte di rete e fa parte del pacchetto iproute2. Ha una funzionalità simile all'utilità netstat [6].

L'uso comune include:

Visualizza tutti i socket TCP con i nomi dei servizi:

    $ ss -at

Visualizza tutti i socket TCP con i numeri di porta:

    $ ss -atn

Visualizza tutti i socket UDP:

    $ ss-au

Per maggiori informazioni vedi ss(8).

## Risoluzione dei problemi

### Scambio computer/modem via cavo

La maggior parte degli ISP (videotron for example) ha il modem via cavo configurato per riconoscere un solo PC client, attraverso il MAC Address della sua interfaccia di rete. Una volta che il modem via cavo ha acquisito il MAC Address del primo PC, o della relativa periferica, non risponderà in alcun modo ad un altro MAC Address. Pertanto, se si cambia un PC con un altro (o router), il nuovo PC (o router) non funzionerà con il modem via cavo, in quanto ha un MAC Address diverso dal precedente. Per effettuare il reset del modem via cavo in modo che riconosca il nuovo PC, è necessario spegnerlo e riaccenderlo. Una volta che il modem via cavo si è riavviato ed è ritornato completamente in linea (le spie luminose sono stabili), riavviare il nuovo computer in modo da effettuare una nuova richiesta DHCP, o effettuarla manualmente.

Se questo metodo non funziona, è necessario clonare il MAC Address del pc originario. Vedere quindi #Cambiare MAC/hardware address.

### Il problema del TCP Window Scaling

I pacchetti TCP contengono nell'header un campo "window" che indica la quantità di dati che deve restituire l'altro host. Questo campo è di 16 bit, dato che la dimensione della finestra è al massimo 64kb. I pacchetti TCP vengono mantenuti in cache per un certo tempo e, se la memoria è (o era) limitata, è probabile che l'host la finisca rapidamente.

Nel 1992, quando cominciò ad essere disponibile molta memoria, per migliorare la situazione, fu scritta la RFC 1323: fu introdotto in "Window Scaling". Il valore "window", presente in tutti i pacchetti, viene modificato da uno "Scale Factor" definito una sola volta all'inizio della connessione. Questo campo, di 8 bit, permette alla finestra di essere fino a 32 volte più grande dei 64Kb iniziali.

Sembra che alcuni router e firewall riscrivano lo Scale Factor a 0 che causa "incomprensioni" tra gli host.

Il kernel 2.6.17 ha introdotto un nuovo algoritmo che genera Scale Factors più alti, in modo tale da rendere il problema di questi router e firewall virtualmente più visibile.

La connessione, in questi casi, si interrompe o è, al più, molto lenta.

#### Come diagnosticare questo problema?

Prima di tutto chiariamo: è molto difficile. In alcuni casi, non sarà possibile effettuare connessioni TCP (HTTP, FTP, ...), in altri sarà possibile comunicare solo con alcuni host (molto pochi).

Quando si ha questo problema, l'output di `dmesg` è ok, i log sono puliti e `ip addr` riporta una configurazione corretta... quindi sembra tutto normale.

Se non è possibile raggiungere nessun sito Web, ma è possibile pingare alcuni host, probabilmente si è incappati in questo problema: il ping utilizza il protocollo ICMP e non è affetto da problemi TCP.

Si può provare ad utilizzare Wireshark. Si possono vedere comunicazioni UDP e ICMP che avvengono correttamente e le connessioni TCP che non vanno a buon fine (solo verso host 'esterni').

#### Come risolverlo?

##### La strada sbagliata

Per risolvere il problema, si può cambiare il valore tcp_rmem, su cui si basa il calcolo dello Scale Factor. Sebbene dovrebbe funzionare per la maggior parte degli host, non è sicuro che funzioni in tutti i casi, specialmente per host molto distanti.

    echo "4096 87380 174760" > /proc/sys/net/ipv4/tcp_rmem

##### Il metodo corretto)

Semplicemente, disabilitare il Window Scaling. Anche se è una caratteristica carina, può rivelarsi scomoda se non si può sistemare il router malfunzionante. Ci sono diversi metodi per disabiltare il Window Scaling, e sembra che il più sicuro (che funziona sui kernel più recenti) sia aggiungere la seguente linea in `/etc/sysctl.d/99-disable_window_scaling.conf`: (vedere anche sysctl)

    net.ipv4.tcp_window_scaling = 0

##### Il metodo migliore

Questo problema è causato da router/firewall malfunzionanti, quindi vanno cambiati.

##### Ulteriori informazioni

Questa sezione si basa sull'articolo LWN TCP window scaling and broken routers e sull’articolo di Kernel Trap : Window Scaling on the Internet.

Altre discussioni pertinenti sono presenti su LKML.

### Il secondo PC connesso non è in grado di utilizzare la LAN in parallelo

Il primo PC ha due LAN. Il secondo PC ha una LAN ed è connesso al primo PC. Andiamo al secondo PC per dare tutto l'accesso alla LAN dopo l'interfaccia a ponte:

This article or section needs expansion.

Reason: Explain what the settings actually do. (Discuss in Talk:Network configuration (Italiano))

    # sysctl net.bridge.bridge-nf-filter-pppoe-tagged=0
    # sysctl net.bridge.bridge-nf-filter-vlan-tagged=0
    # sysctl net.bridge.bridge-nf-call-ip6tables=0
    # sysctl net.bridge.bridge-nf-call-iptables=0
    # sysctl net.bridge.bridge-nf-call-arptables=0

## Fonti esterne

- Linux Network Administrators Guide
- Debian Reference: Network setup
- RHEL7: Networking Guide
- Monitoring and tuning the Linux Networking Stack: Receiving data
- Monitoring and tuning the Linux Networking Stack: Sending data
- Tracing a packet journey using tracepoints, perf and eBPF

Categories:

- Networking (Italiano)
- Installation process (Italiano)

Hidden categories:

- Pages or sections flagged with Template:Expansion
- Pages or sections flagged with Template:Style