Network configuration (Italiano)

Questo articolo o sezione deve essere
tradotto
.
Note:
L'ultima traduzione risale al 2022. (Discussione in
Talk:Network configuration (Italiano)
)
Translation Status:
This article is a localized version of
Network configuration
. Last translation date: 2022-09-14. You can help to synchronize the translation, if there were
changes
in the English version.
Articoli correlati
Network Debugging
Category:Firewalls (Italiano)
Internet sharing (Italiano)
Router
Questo articolo descrive come configurare le connessioni di rete su
strato OSI 3
e versioni successive. Le specifiche del supporto sono gestite nelle sottopagine
/Ethernet
e
/Wireless
.
Controllare la connessione
Per risolvere i problemi relativi a una connessione di rete, attenersi alle seguenti condizioni e assicurarsi di soddisfarle:
La vostra
interfaccia di rete
è elencata e abilitata. Altrimenti, controllate il driver del dispositivo – vedasi
/Ethernet#Driver del dispositivo
o
/Wireless#Driver del dispositivo
.
Siete connessi alla rete. Il cavo è collegato o siete
connessi alla LAN wireless
.
La vostra interfaccia di rete ha un
indirizzo IP
.
La vostra
tabella di instradamento
è configurata correttamente.
Potete effettuare il
ping
di un indirizzo IP locale (es. il vostro gateway predefinito).
Potete effettuare il
ping
di un indirizzo IP pubblico (es.
9.9.9.9
, che è un server DNS appartenente alla Fondazione Quad9 ed è un indirizzo conveniente con cui eseguire prove).
Controllate se potete risolvere i nomi di dominio
(es.
archlinux.org
).
Ping
ping
viene usata per verificare di poter raggiungere un host.
$ 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 ricevuta, l'utilità
ping
scriverà una riga come quella sopra finchè non la interrompete (
Ctrl+c
) in modo interattivo. Per maggiori informazioni vedere il manuale
ping(8)
. Si noti che i computer possono essere configurati per non rispondere alle richieste echo ICMP.
[1]
Se vi viene mostrato un messaggio di errore (vedasi
indicazioni di errore di ping
) oppure non ricevete risposta, ciò potrebbe essere correlato ad una configurazione incompleta, ma anche al vostro gateway predefinito o al vostro Provider di Servizi Internet (ISP). Potete eseguire un
traceroute
per diagnosticare ulteriormente il percorso verso l'host.
Gestione della rete
Per configurare una connessione di rete, seguire i passaggi seguenti:
Assicuratevi che la vostra
interfaccia di rete
sia elencata e abilitata.
Connettetevi alla rete. Collegate il cavo Ethernet o
connettetevi alla LAN wireless
.
Configurate la vostra connessione di rete:
indirizzo IP statico
indirizzo IP dinamico: utilizzate
DHCP
Nota
L'immagine di installazione utilizza
systemd-resolved
e
systemd-networkd
, che è configurato come client DHCP per interfacce di rete
Ethernet
,
WLAN
e
WWAN
.
net-tools
Arch Linux ha deprecato
net-tools
in favore di
iproute2
.
[2]
Comando deprecato
comandi di rimpiazzo
arp
ip neighbor
ifconfig
ip address, ip link
netstat
ss
route
ip route
Per una panoramica più completa, vedere
Comandi di Linux deprecati per la gestione di una rete e loro sostituzioni
.
iproute2
iproute2
è una dipendenza del
metacontenuto
base
e fornisce l'interfaccia a riga di comando
ip(8)
, utilizzata per gestire
interfacce di rete
,
indirizzi IP
e la
tabella di instradamento
. Tenete presente che la configurazione eseguita utilizzando
ip
andrà perduta dopo un riavvio. Per una configurazione persistente, potete utilizzare un
gestore di rete
o automatizzare i comandi
ip
utilizzando script e
unità di systemd
. Si noti inoltre che i comandi
ip
possono essere generalmente abbreviati, per chiarezza sono comunque scritti per intero in questo articolo.
Interfacce di rete
Per impostazione predefinita
udev
assegna dei nomi ai vostri
controller dell'interfaccia di rete
utilizzando
Nomi dell'Interfaccia di Rete Prevedibili
, che antepone i nomi delle interfacce con
en
(cablata/
Ethernet
),
wl
(wireless/
WLAN
), o
ww
(
WWAN
). Vedasi
systemd.net-naming-scheme(7)
.
Suggerimento
Per modificare i nomi dell'interfaccia, vedere
#Cambiare il nome dell'interfaccia
e
#Ritornare ai nomi dell'interfaccia tradizionali
.
Elencare le interfacce di rete
I nomi delle interfacce sia cablate che wireless possono essere trovati tramite
ls /sys/class/net
o
ip link
. Si noti che
lo
è l'
interfaccia virtuale di loopback
e non viene utilizzata per effettuare connessioni di rete.
I nomi dei dispositivi wireless possono essere recuperati anche utilizzando
iw dev
. Vedere anche
/Wireless#Ottenere il nome dell'interfaccia
.
Se la vostra interfaccia di rete non è elencata, assicuratevi che il driver del dispositivo sia stato caricato correttamente. Vedasi
/Ethernet#Driver del dispositivo
o
/Wireless#Driver del dispositivo
.
Abilitare e disabilitare le interfacce di rete
Le interfacce di rete possono essere abilitate o disabilitate mediante
ip link set
interfaccia
up|down
, vedere
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>
è l'effettiva indicazione che l'interfaccia è attiva, non la successiva
state DOWN
.
Nota
Se il vostro percorso predefinito è attraverso l'interfaccia
enp2s0
, disattivarla rimuoverà anche il percorso e riattivarla non ristabilirà automaticamente il percorso predefinito. Vedere
#Tabella di instradamento
per ristabilirlo.
Indirizzo IP statico o dinamico?
This article or section needs language, wiki syntax or style improvements. See
Help:Style
for reference.
Reason:
Troppo complicato da seguire. (Discuss in
Talk:Network configuration (Italiano)
)
Se utilizzate un Wi-FI o un router, ad esempio, a casa, starete molto probabilmente utilizzando un indirizzo IP dinamico. L'indirizzo IP viene assegnato dal Wi-Fi o dal router ed è ciò che la configurazione del vostro computer dovrebbe utilizzare. Oppure, se siete a casa e il vostro computer è connesso al modem del vostro ISP, ad esempio un modem via cavo, anch'esso utilizzerà un indirizzo IP dinamico. Gli indirizzi IP dinamici possono cambiare ogni volta che accendete il vostro computer. In un ambiente di lavoro, potreste avere un indirizzo IP statico o un indirizzo IP dinamico. A casa, potete configurare il vostro router in modo che assegni sempre al vostro computer lo stesso indirizzo IP, dunque starete utilizzando un indirizzo IP statico. Quando state utilizzando un indirizzo IP dinamico, dovrete utilizzare DHCP, così esso potrà configurare la vostra interfaccia di rete con l'indirizzo IP corretto. Oltre a configurare il vostro ìndirizzo IP, DHCP può anche configurare il vostro instradamento (come arrivare da dove ci si trova a un qualsiasi punto della rete si stia andando) così come i vostri name servers, che convertono il nome host, ad esempio, example.com, nel suo indirizzo IP, quel numero con dei punti inseriti.
Indirizzo IP statico
Un indirizzo IP statico può essere configurato con la maggior parte dei
gestori di rete
predefiniti e anche con
dhcpcd
.
Per configurare manualmente un indirizzo IP statico, aggiungete un indirizzo IP come descritto in
#Indirizzi IP
, impostate la vostra
Tabella di instradamento
e
configurate i vostri server DNS
.
Indirizzi IP
Gli
indirizzi IP
sono gestiti mediante
ip-address(8)
.
Elencare gli indirizzi IP:
$ ip address show
Aggiungere un indirizzo IP a una interfaccia:
# ip address add
indirizzo/lunghezza_prefisso
broadcast + dev
interfaccia
Notate che:
l'indirizzo è dato in
notazione CIDR
per fornire anche una
maschera della sottorete
+
è un simbolo speciale che, mediante
ip
, deriva l'
indirizzo di trasmissione
dall'indirizzo IP e dalla maschera della sottorete
Nota
Assicuratevi che gli indirizzi IP assegnati manualmente non siano in conflitto con quelli assegnati da DHCP.
Eliminare un indirizzo IP da un'interfaccia:
# ip address del
indirizzo/lunghezza_prefisso
dev
interfaccia
Eliminare tutti gli indirizzi che corrispondono a un criterio, ad es. di una specifica interfaccia:
# ip address flush dev
interfaccia
Suggerimento
Gli indirizzi IP possono essere calcolati con
ipcalc
(
ipcalc
).
Tabella di instradamento
La
tabella di instradamento
è utilizzata per determinare se potete raggiungere direttamente un indirizzo IP o quale gateway (router) dovreste usare. Se nessun'altro perscorso corrisponde all'indirizzo IP, viene utilizzato il
gateway predefinito
.
La tabella di instradamento è gestita utilizzando
ip-route(8)
.
PREFISSO
è una notazione CIDR o
default
per il gateway predefinito.
Elencare percorsi IPv4:
$ ip route show
Elencare percorsi IPv6:
$ ip -6 route
Aggiungere un percorso:
# ip route add
PREFISSO
via
indirizzo
dev
interfaccia
Cancellare un percorso:
# ip route del
PREFISSO
via
indirizzo
dev
interfaccia
DHCP
Un server
Protocollo Dinamico di Configurazione Host
(DHCP) fornisce ai client un indirizzo IP dinamico, la maschera della sottorete, l'indirizzo IP del gateway predefinito e, facoltativamente, anche i name server del DNS.
Per utilizzare DHCP è necessario un server DHCP nella vostra rete e un client DHCP:
Client
Contenuto
Archiso
Nota
Unità di systemd
dhcpcd
dhcpcd
Yes
DHCP, DHCPv6, ZeroConf, IP statico
dhcpcd.service
,
dhcpcd@
interfaccia
.service
ISC dhclient
dhclient
Yes
DHCP, DHCPv6, BOOTP, IP statico
dhclient@
interfaccia
.service
Nota
ISC ha terminato lo sviluppo sul client DHCP ISC da inizio 2022. Questa implementazione del client non è più mantenuta e non dovrebbe essere utilizzata in ambito produttivo.
Non dovreste eseguire due client DHCP contemporaneamente.
Invece di utilizzare direttamente un client DHCP autonomo, potete anche utilizzare un
gestore di rete
, alcuni dei quali hanno un client DHCP integrato.
In alternativa,
iwd
ha un client DHCP integrato di cui si può far uso con qualche configurazione:
iwd#Abilitare la configurazione di rete integrata
.
Suggerimento
Potete controllare se un server DHCP sia in esecuzione con
dhcping
.
Mentre aspettate che venga assegnato un IP, potete eseguire qualcosa come
watch -n 1 ping -c 1 archlinux.org
per confermare che la rete sia connessa.
Server
Server
Contenuto
IPv4
IPv6
GUI
Interfacce
Backend(s) di memorizzazione
Nota
dhcpd
dhcp
Yes
Yes
Glass-ISC-DHCP
?
File
dnsmasq
dnsmasq
Yes
Yes
No
?
File
anche DNS, PXE e TFTP
Kea
kea
Yes
Yes
Stork
REST, RADIUS e NETCONF
File, MySQL, PostgreSQL e Cassandra
anche DNS
Gestori di rete
Un gestore di rete consente di gestire le impostazioni della connessione di rete in dei cosiddetti profili di rete per facilitare il cambio di rete.
Nota
Ci sono molte soluzioni tra cui scegliere, ma ricordate che sono tutte mutualmente esclusive; non dovreste eseguire due daemon contemporaneamente.
Gestore di rete
GUI
Archiso
[3]
Strumenti CLI
Supporto per
PPP
(es. modem 3G)
Client DHCP
Unità di systemd
ConnMan
8 non ufficiale
No
connmanctl(1)
Yes (con
ofono
AUR
)
interno
connman.service
netctl
2 non ufficiale
No
netctl(1)
, wifi-menu
Yes
dhcpcd
o
dhclient
netctl-ifplugd@
interfaccia
.service
,
netctl-auto@
interfaccia
.service
NetworkManager
Yes
No
nmcli(1)
,
nmtui(1)
Yes
interno o
dhclient
NetworkManager.service
systemd-networkd
No
Yes (
base
)
networkctl(1)
No
interno
systemd-networkd.service
,
systemd-resolved.service
Set the hostname
This article or section needs to be
translated
.
Notes:
Not yet translated. (Discuss in
Talk:Network configuration (Italiano)
)
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)
)
A
hostname
is a unique name created to identify a machine on a network, configured in
/etc/hostname
—see
hostname(5)
and
hostname(7)
for details. The file can contain the system's domain name, if any. To set the hostname,
edit
/etc/hostname
to include a single line with
myhostname
:
/etc/hostname
myhostname
Tip
For advice on choosing a hostname, see
RFC 1178
.
Alternatively, using
hostnamectl(1)
:
# hostnamectl set-hostname
myhostname
To temporarily set the hostname (until reboot), use
hostname(1)
from
inetutils
:
# hostname
myhostname
To set the "pretty" hostname and other machine metadata, see
machine-info(5)
.
Local hostname resolution
nss-myhostname(8)
(an
NSS
module provided by
systemd
) provides local hostname resolution without having to edit
/etc/hosts
. It is enabled by 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
)
Some software may however still read
/etc/hosts
directly, see
[4]
[5]
for examples. To prevent them from potentially breaking, hanging or otherwise delaying operation, make sure they can resolve the local hostname and
localhost
by configuring the
hosts(5)
file:
/etc/hosts
127.0.0.1        localhost
::1              localhost
127.0.1.1
myhostname
For a system with a permanent IP address, replace
127.0.1.1
with that permanent IP address. For a system with a
fully qualified domain name
, insert the fully qualified domain name before the hostname (see the following link for
the reasoning
). For example:
/etc/hosts
127.0.0.1        localhost
::1              localhost
203.0.113.45     host1.fqdomain.example host1
Note
The order of hostnames/aliases that follow the IP address in
/etc/hosts
is significant. The first string is considered the canonical hostname and may be appended with parent domains, where domain components are separated by a dot. All following strings on the same line are considered aliases. See
hosts(5)
for more info.
As a result the system resolves to both entries:
$ getent hosts
127.0.0.1       localhost
127.0.0.1       localhost
127.0.1.1
myhostname
Local network hostname resolution
To make your machine accessible in your LAN via its hostname you can:
edit the
/etc/hosts
file for every device in your LAN, see
hosts(5)
set up a
DNS server
to resolve your hostname and make the LAN devices use it (e.g. via
#DHCP
)
or the easy way: use a
Zero-configuration networking
service:
Hostname resolution via Microsoft's
NetBIOS
. Provided by
Samba
on Linux. It only requires the
nmb.service
. Computers running Windows, macOS, or Linux with
nmb
running, will be able to find your machine.
Hostname resolution via
mDNS
. Provided by either
nss_mdns
with
Avahi
(see
Avahi#Hostname resolution
for setup details) or
systemd-resolved
. Computers running macOS, or Linux with Avahi or systemd-resolved running, will be able to find your machine. The older Win32 API does not support mDNS, which may prevent some older Windows applications from accessing your device.
Suggerimenti e trucchetti
Cambiare il nome dell'interfaccia
Nota
Quando si modifica lo schema di denominazione, non dimenticate di aggiornare tutti i file di configurazione relativi alla rete e i file delle unità di systemd personalizzati per riflettere la modifica.
Potete 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, utilizzare questo comando:
cat /sys/class/net/
nome_del_dispositivo
/address
Assicuratevi di utilizzare i valori esadecimali in carattere minuscolo nelle vostre regole udev. Non gli piace il maiuscolo.
Se la scheda di rete ha un MAC dinamico, potete 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, osservate dove conducono 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
Il percorso del dispositivo dovrebbe corrispondere sia al nuovo che al vecchio nome del dispositivo, poiché la regola potrebbe venir eseguita più di una volta all'avvio. Ad esempio, nella seconda regola,
"/devices/pci*/*1c.0/*/net/enp*"
sarebbe sbagliato, poiché smetterebbe di corrispondere una volta che il nome dovesse cambiare in
en
. Solo la regola predefinita del sistema si attiverà la seconda volta, causando il ritorno del nome a, ad es.,
enp1s0
.
Se state utilizzando un dispositivo di rete USB (ad es. il tethering di un telefono Android) che ha un indirizzo MAC dinamico e volete essere in grado di utilizzare delle porte USB diverse, potreste invece utilizzare una regola che corrisponda a seconda del fornitore e dell'ID di un prodotto:
/etc/udev/rules.d/10-network.rules
SUBSYSTEM=="net", ACTION=="add", ATTRS{idVendor}=="12ab", ATTRS{idProduct}=="3cd4", NAME="net2"
Per
provare
le vostre regole esse possono essere verificare direttamente dallo spazio utente, ad es. con
udevadm --debug test /sys/class/net/*
. Ricordatevi di disabilitare prima l'interfaccia che state cercando di rinominare (es.
ip link set enp1s0 down
).
Nota
Quando si scelgono i nomi statici
dovrebbe essere evitato l'uso di nomi nel formato di "eth
X
" e "wlan
X
"
, perché questo potrebbe portare a una condizione di competizione tra il kernel e udev durante l'avvio. Invece, è meglio usare nomi d'interfaccia che non sono usati dal kernel come impostazione predefinita, ad es.:
net0
,
net1
,
wifi0
,
wifi1
. Per ulteriori dettagli, consultare la documentazione di
systemd
, per favore.
Ritornare ai nomi dell'interfaccia tradizionali
Se preferiste mantenere i nomi dell'interfaccia tradizionali come eth0,
eth0
, i
Nomi dell'Interfaccia di Rete Prevedibili
possono essere disabilitati mascherando la regola
udev
:
# ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
In alternativa, aggiungere
net.ifnames=0
ai
parametri del kernel
.
Impostare l'MTU del dispositivo e la lunghezza della coda
Potete modificare l'
MTU
del dispositivo 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 superiore a 1500 (i cosiddetti
jumbo frames
) può accelerare notevolmente i trasferimenti di rete. Si noti che tutte le interfacce di rete, inclusi gli switche nella rete locale, devono supportare la stessa MTU per poter utilizzare i jumbo frames. Per PPPoE, l'MTU non deve essere superiore a 1492. Potete 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 le connessioni Internet ad alta velocità che eseguono grandi trasferimenti di dati.
Incollaggio o LAG
Vedere
netctl
o
systemd-networkd
, oppure
Incollaggio wireless
.
Aliasing dell'indirizzo IP
L'aliasing dell'IP è il processo di aggiunta di più di un indirizzo IP a un'interfaccia di rete. Con ciò, un nodo su una rete può avere più connessioni a una rete, ognuna con uno scopo diverso. È tipicamente utile per 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
# ip addr add 192.168.2.101/24 dev enp2s0 label enp2s0:1
Per rimuovere un certo alias eseguire
# ip addr del 192.168.2.101/24 dev enp2s0:1
I pacchetti destinati a una sottorete utilizzeranno l'alias primario per impostazione predefinita. Se l'IP di destinazione si trova all'interno di una sottorete appartenente a un alias secondario, l'IP di origine verrà impostato rispettivamente. Considerate il caso in cui sia presente più di una NIC, i percorsi predefiniti possono essere elencati con
ip route
.
Modalità promiscua
L'attivazione della
modalità promiscua
farà sì che una NIC (wireless) inoltri tutto il traffico ricevuto al sistema operativo per un'ulteriore elaborazione. Questo è l'opposto della "modalità normale", in cui una NIC scarterà i frame che non è destinata a ricevere. Viene spesso utilizzata per la risoluzione dei problemi di rete avanzata e lo
sniffing dei pacchetti
.
/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 volete abilitare la modalità promiscua sull'interfaccia
enp2s0
, eseguite
enable
promiscuous@enp2s0.service
.
Interrogare i socket
ss
è un'utilità per esaminare le porte di rete e fa parte del contenuto
iproute2
. Ha una funzionalità simile all'utilità netstat
deprecata
.
L'utilizzo comune include:
Visualizzare tutti i Socket TCP con i nomi dei servizi:
$ ss -at
Visualizzare tutti i Socket TCP con i numeri di porta:
$ ss -atn
Visualizzare tutti i Socket UDP:
$ ss -au
Per maggiori informazioni, vedere
ss(8)
.
Risoluzione dei problemi
Il problema del ridimensionamento window di TCP
I pacchetti TCP contengono un valore "window" nei loro header che indica la quantità di dati che debba restituire l'altro host. Questo valore è rappresentato con solo 16 bit, infatti la dimensione della finestra è al massimo 64KiB. I pacchetti TCP vengono mantenuti in cache per un periodo di tempo (devono essere riordinati), e dato che la memoria è (o era) limitata, uno host potrebbe finirla facilmente.
Nel 1992, man mano che più memoria diveniva disponibile, fu scritta la
RFC:1323
per migliorare la situazione: il Ridimensionamento della Finestra. Il valore "window", fornito in tutti i pacchetti, verrà modificato in base ad un Fattore di Ridimensionamento, definito una sola volta proprio all'inizio della connessione.
Quel Fattore di Ridimensionamento di 8 bit permette alla finestra di essere fino a 32 volte superiore ai 64KiB iniziali.
Sembrerebbe che alcuni router e firewall difettosi su Internet stiano riscrivendo il Fattore di Ridimensionamento a 0, causando incomprensioni tra gli hosts.
Il kernel di Linux 2.6.17 ha introdotto un nuovo schema di calcolo che genera Fattori di Ridimensionamento più alti, rendendo il disastro di questi router e firewall virtualmente più visibile.
La connessione in questi casi è al massimo molto lenta oppure viene interrotta.
Come diagnosticare il problema?
Prima di tutto chiariamo: questo problema è strano. In alcuni casi, non vi sarà affatto possibile effettuare connessioni TCP (HTTP, FTP, ...), in altri sarete in grado di comunicare con alcuni host (molto pochi).
Quando siete affetti da questo problema, il risultato da
dmesg
va bene, i log sono puliti e
ip addr
riporta uno status normale... ed effettivamente sembra tutto normale.
Se non vi è possibile navigare su nessun sito Web, ma riuscite a eseguire il ping degli host a caso, probabilmente siete incappati in questo problema: ping utilizza il protocollo ICMP e non è affetta da problemi di TCP.
Potete provare tramite
Wireshark
. Potreste osservare comunicazioni UDP e ICMP avvenute con successo, ma comunicazioni TCP non riuscite (solo verso host esterni).
Modalità di risoluzione
Male
Per risolverlo nel modo sbagliato, potete cambiare il valore
tcp_rmem
, su cui si basa il calcolo del Fattore di Ridimensionamento. Sebbene dovrebbe funzionare per la maggior parte degli hosts, non è garantito, specialmente per quelli molto distanti.
# echo "4096 87380 174760" > /proc/sys/net/ipv4/tcp_rmem
Bene
Disabilitate semplicemente il Ridimensionamento della Finestra. Poichè essa rappresenta una buona caratteristica di TCP, disabilitarla può rivelarsi scomodo, specialmente se non potete sistemare il router malfunzionante. Ci sono diversi metodi per disabiltare il Ridimensionamento della Finestra, e sembra che il più sicuro (che funzionerà con la maggior parte dei kernel) sia di aggiungere la seguente riga a
/etc/sysctl.d/99-disable_window_scaling.conf
(vedasi anche
sysctl
):
net.ipv4.tcp_window_scaling = 0
Migliore
Questo problema è causato da router/firewall malfunzionanti, dunque cambiamoli. Alcuni utenti hanno riportato che il router difettoso era proprio il loro router DSL.
Ulteriori informazioni
Questa sezione si basa sull'articolo LWN
Ridimensionamento della finestra di TCP e router difettosi
e su un articolo archiviato di Kernel Trap:
Ridimensionamento della Finestra su Internet
.
Ci sono anche diverse discussioni pertinenti sul 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. Andare al secondo PC per fornire tutto l'accesso alla LAN dopo l'interfaccia in parallelo:
# 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
Guida per gli Amministratori di Rete Linux
Consultazione di Debian: Configurazione di rete
RHEL7: Guida per l'Amministrazione di Rete
Monitorare e Sintonizzare lo Stack per l'Amministrazione di Rete di Linux: Ricevere dei dati
Monitorare e Sintonizzare lo Stack per l'Amministrazione di Rete di Linux: Inviare dei dati
Tracciamento del viaggio di un pacchetto mediante punti tracciamento, perf ed eBPF