Configurazione della rete

Ubuntu dispone di una serie di utilità grafiche per configurare i dispositivi di rete. Questo documento è orientato agli amministratori di server e si concentrerà sulla gestione della rete dalla linea di comando.

Interfacce Ethernet

Le interfacce Ethernet sono identificate dal sistema utilizzando nomi di interfaccia di rete prevedibili. Questi nomi possono apparire come eno1 o enp0s25. Tuttavia, in alcuni casi un’interfaccia può ancora utilizzare lo stile di denominazione eth# del kernel.

Identificare le interfacce Ethernet

Per identificare rapidamente tutte le interfacce Ethernet disponibili, è possibile utilizzare il comando ip come mostrato di seguito.

ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:16:3e:e2:52:42 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.102.66.200/24 brd 10.102.66.255 scope global dynamic eth0 valid_lft 3257sec preferred_lft 3257sec inet6 fe80::216:3eff:fee2:5242/64 scope link valid_lft forever preferred_lft forever

Un’altra applicazione che può aiutare a identificare tutte le interfacce di rete disponibili sul sistema è il comando lshw. Questo comando fornisce maggiori dettagli sulle capacità hardware di specifici adattatori. Nell’esempio qui sotto, lshw mostra una singola interfaccia Ethernet con il nome logico di eth0 insieme a informazioni sul bus, dettagli sul driver e tutte le capacità supportate.

sudo lshw -class network *-network description: Ethernet interface product: MT26448 vendor: Mellanox Technologies physical id: 0 bus info: [email protected]:01:00.0 logical name: eth4 version: b0 serial: e4:1d:2d:67:83:56 slot: U78CB.001.WZS09KB-P1-C6-T1 size: 10Gbit/s capacity: 10Gbit/s width: 64 bits clock: 33MHz capabilities: pm vpd msix pciexpress bus_master cap_list ethernet physical fibre 10000bt-fd configuration: autonegotiation=off broadcast=yes driver=mlx4_en driverversion=4.0-0 duplex=full firmware=2.9.1326 ip=192.168.1.1 latency=0 link=yes multicast=yes port=fibre speed=10Gbit/s resources: iomemory:24000-23fff irq:481 memory:3fe200000000-3fe2000fffff memory:240000000000-240007ffffff

Nomi logici delle interfacce Ethernet

I nomi logici delle interfacce possono essere configurati anche tramite una configurazione netplan. Se vuoi controllare quale interfaccia riceve un particolare nome logico usa le chiavi match e set-name. La chiave match è usata per trovare un adattatore basato su alcuni criteri come indirizzo MAC, driver, ecc. Poi il tasto set-name può essere usato per cambiare il dispositivo al nome logico desiderato.

network: version: 2 renderer: networkd ethernets: eth_lan0: dhcp4: true match: macaddress: 00:11:22:33:44:55 set-name: eth_lan0

Impostazioni dell’interfaccia Ethernet

ethtool è un programma che visualizza e cambia le impostazioni della scheda Ethernet come l’auto-negoziazione, la velocità della porta, la modalità duplex e il Wake-on-LAN. Quello che segue è un esempio di come visualizzare le caratteristiche supportate e le impostazioni configurate di un’interfaccia Ethernet.

sudo ethtool eth4Settings for eth4: Supported ports: Supported link modes: 10000baseT/Full Supported pause frame use: No Supports auto-negotiation: No Supported FEC modes: Not reported Advertised link modes: 10000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: No Advertised FEC modes: Not reported Speed: 10000Mb/s Duplex: Full Port: FIBRE PHYAD: 0 Transceiver: internal Auto-negotiation: off Supports Wake-on: d Wake-on: d Current message level: 0x00000014 (20) link ifdown Link detected: yes

Indirizzo IP

La seguente sezione descrive il processo di configurazione dell’indirizzo IP del sistema e del gateway predefinito necessari per comunicare su una rete locale e Internet.

Assegnazione temporanea dell’indirizzo IP

Per configurazioni di rete temporanee, puoi usare il comando ip che si trova anche su molti altri sistemi operativi GNU/Linux. Il comando ip ti permette di configurare impostazioni che hanno effetto immediato, tuttavia non sono persistenti e saranno perse dopo un riavvio.

Per configurare temporaneamente un indirizzo IP, puoi usare il comando ip nel modo seguente. Modificate l’indirizzo IP e la subnet mask in base ai vostri requisiti di rete.

sudo ip addr add 10.102.66.200/24 dev enp0s25

L’ip può quindi essere utilizzato per impostare il collegamento su o giù.

ip link set dev enp0s25 upip link set dev enp0s25 down

Per verificare la configurazione dell’indirizzo IP di enp0s25, si può usare il comando ip nel seguente modo.

ip address show dev enp0s2510: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:16:3e:e2:52:42 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.102.66.200/24 brd 10.102.66.255 scope global dynamic eth0 valid_lft 2857sec preferred_lft 2857sec inet6 fe80::216:3eff:fee2:5242/64 scope link valid_lft forever preferred_lft forever6

Per configurare un gateway di default, si può usare il comando ip nel seguente modo. Modificate l’indirizzo del gateway predefinito in base ai vostri requisiti di rete.

sudo ip route add default via 10.102.66.1

Per verificare la configurazione del gateway predefinito, potete usare il comando ip nel modo seguente.

ip route showdefault via 10.102.66.1 dev eth0 proto dhcp src 10.102.66.200 metric 10010.102.66.0/24 dev eth0 proto kernel scope link src 10.102.66.20010.102.66.1 dev eth0 proto dhcp scope link src 10.102.66.200 metric 100 

Se avete bisogno di DNS per la vostra configurazione di rete temporanea, potete aggiungere indirizzi IP di server DNS nel file /etc/resolv.conf. In generale, la modifica diretta di /etc/resolv.conf non è raccomandata, ma questa è una configurazione temporanea e non persistente. L’esempio qui sotto mostra come inserire due server DNS in /etc/resolv.conf, che dovrebbero essere cambiati in server appropriati per la vostra rete. Una descrizione più lunga del modo corretto e persistente di fare la configurazione del client DNS è in una sezione successiva.

nameserver 8.8.8.8nameserver 8.8.4.4

Se non avete più bisogno di questa configurazione e volete eliminare tutta la configurazione IP da un’interfaccia, potete usare il comando ip con l’opzione flush come mostrato qui sotto.

ip addr flush eth0

Nota

Lavare la configurazione IP usando il comando ip non cancella il contenuto di /etc/resolv.conf. Dovete rimuovere o modificare quelle voci manualmente, o riavviare, il che dovrebbe anche causare la riscrittura di /etc/resolv.conf, che è un symlink a /run/systemd/resolve/stub-resolv.conf.

Assegnazione dinamica degli indirizzi IP (DHCP Client)

Per configurare il vostro server per usare DHCP per l’assegnazione dinamica degli indirizzi, create una configurazione netplan nel file /etc/netplan/99_config.yaml. L’esempio seguente presuppone che si stia configurando la prima interfaccia Ethernet identificata come enp3s0.

network: version: 2 renderer: networkd ethernets: enp3s0: dhcp4: true

La configurazione può quindi essere applicata utilizzando il comando netplan.

sudo netplan apply

Assegnazione statica dell’indirizzo IP

Per configurare il vostro sistema per utilizzare l’assegnazione statica degli indirizzi, create una configurazione netplan nel file /etc/netplan/99_config.yaml. L’esempio seguente presuppone che tu stia configurando la tua prima interfaccia Ethernet identificata come eth0. Cambiate i valori di indirizzi, gateway4 e nameserver per soddisfare i requisiti della vostra rete.

network: version: 2 renderer: networkd ethernets: eth0: addresses: - 10.10.10.2/24 gateway4: 10.10.10.1 nameservers: search: addresses: 

La configurazione può quindi essere applicata utilizzando il comando netplan.

sudo netplan apply

Interfaccia di loopback

L’interfaccia di loopback è identificata dal sistema come lo e ha un indirizzo IP di default 127.0.0.1. Può essere visualizzata usando il comando ip.

ip address show lo1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever

Risoluzione dei nomi

La risoluzione dei nomi in relazione alla rete IP è il processo di mappatura degli indirizzi IP ai nomi host, rendendo più facile l’identificazione delle risorse su una rete. La seguente sezione spiegherà come configurare correttamente il sistema per la risoluzione dei nomi usando DNS e record statici di hostname.

Configurazione client DNS

Tradizionalmente, il file /etc/resolv.conf era un file di configurazione statico che raramente doveva essere cambiato o modificato automaticamente tramite gli hook del client DCHP. Systemd-resolved gestisce la configurazione del server dei nomi, e dovrebbe essere interagito attraverso il comando systemd-resolve. Netplan configura systemd-resolved per generare una lista di nameserver e domini da mettere in /etc/resolv.conf, che è un link simbolico:

/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

Per configurare il resolver, aggiungere gli indirizzi IP dei nameserver che sono appropriati per la vostra rete al file di configurazione netplan. Si può anche aggiungere una lista di ricerca di suffissi DNS opzionale per abbinare i nomi di dominio della propria rete. Il file risultante potrebbe assomigliare al seguente:

network: version: 2 renderer: networkd ethernets: enp0s25: addresses: - 192.168.0.100/24 gateway4: 192.168.0.1 nameservers: search: addresses: 

L’opzione di ricerca può anche essere usata con nomi di dominio multipli in modo che le query DNS vengano aggiunte nell’ordine in cui vengono inserite. Per esempio, la vostra rete potrebbe avere più sottodomini da cercare; un dominio padre di example.com, e due sottodomini, sales.example.com e dev.example.com.

Se avete più domini che desiderate cercare, la vostra configurazione potrebbe assomigliare alla seguente:

network: version: 2 renderer: networkd ethernets: enp0s25: addresses: - 192.168.0.100/24 gateway4: 192.168.0.1 nameservers: search: addresses: 

Se provate a pingare un host con il nome di server1, il vostro sistema interroga automaticamente il DNS per il suo Fully Qualified Domain Name (FQDN) nel seguente ordine:

  1. server1.example.com

  2. server1.sales.example.com

  3. server1.dev.example.com

Se non viene trovata nessuna corrispondenza, il server DNS fornirà un risultato di notfound e la query DNS fallirà.

Nomi host statici

I nomi host statici sono mappature hostname-to-IP definite localmente e situate nel file /etc/hosts. Le voci nel file hosts avranno la precedenza sul DNS per impostazione predefinita. Questo significa che se il vostro sistema cerca di risolvere un hostname e questo corrisponde a una voce in /etc/hosts, non tenterà di cercare il record in DNS. In alcune configurazioni, specialmente quando non è richiesto l’accesso a Internet, i server che comunicano con un numero limitato di risorse possono essere convenientemente impostati per usare nomi host statici invece di DNS.

Quello che segue è un esempio di un file hosts dove un certo numero di server locali sono stati identificati da semplici nomi host, alias e dai loro equivalenti Fully Qualified Domain Names (FQDN).

127.0.0.1 localhost127.0.1.1 ubuntu-server10.0.0.11 server1 server1.example.com vpn10.0.0.12 server2 server2.example.com mail10.0.0.13 server3 server3.example.com www10.0.0.14 server4 server4.example.com file

Nota

Nell’esempio precedente, si noti che a ciascuno dei server sono stati dati degli alias oltre ai loro nomi propri e FQDN. Il server1 è stato mappato con il nome vpn, il server2 è indicato come mail, il server3 come www e il server4 come file.

Configurazione del Name Service Switch

L’ordine in cui il sistema seleziona un metodo di risoluzione dei nomi host in indirizzi IP è controllato dal file di configurazione Name Service Switch (NSS) /etc/nsswitch.conf. Come menzionato nella sezione precedente, tipicamente gli hostname statici definiti nel file /etc/hosts dei sistemi hanno la precedenza sui nomi risolti dal DNS. Il seguente è un esempio della linea responsabile di questo ordine di ricerca degli hostname nel file /etc/nsswitch.conf.

hosts: files mdns4_minimal dns mdns4
  • files cerca prima di risolvere gli hostname statici situati in /etc/hosts.

  • mdns4_minimal cerca di risolvere il nome usando il Multicast DNS.

  • significa che qualsiasi risposta di notfound dal precedente processo mdns4_minimal dovrebbe essere trattata come autorevole e che il sistema non dovrebbe provare a continuare a cercare una risposta.

  • dns rappresenta una query legacy unicast DNS.

  • mdns4 rappresenta una query Multicast DNS.

Per modificare l’ordine dei metodi di risoluzione dei nomi sopra menzionati, potete semplicemente cambiare la stringa hosts: con il valore che preferite. Per esempio, se si preferisce usare il DNS Unicast rispetto al DNS Multicast, si può cambiare la stringa in /etc/nsswitch.conf come mostrato sotto.

hosts: files dns mdns4_minimal mdns4

Bridging

Bridging di più interfacce è una configurazione più avanzata, ma è molto utile in diversi scenari. Uno scenario è l’impostazione di un bridge con più interfacce di rete, utilizzando poi un firewall per filtrare il traffico tra due segmenti di rete. Un altro scenario è l’utilizzo del bridge su un sistema con un’interfaccia per permettere alle macchine virtuali di accedere direttamente alla rete esterna. Il seguente esempio copre quest’ultimo scenario.

Configurare il bridge modificando la configurazione del netplan che si trova in /etc/netplan/:

network: version: 2 renderer: networkd ethernets: enp3s0: dhcp4: no bridges: br0: dhcp4: yes interfaces: - enp3s0

Nota

Inserire i valori appropriati per la propria interfaccia fisica e la rete.

Applica ora la configurazione per abilitare il bridge:

sudo netplan apply

La nuova interfaccia bridge dovrebbe ora essere pronta e funzionante. Il brctl fornisce informazioni utili sullo stato del bridge, controlla quali interfacce fanno parte del bridge, ecc. Vedere man brctl per maggiori informazioni.

networkd-dispatcher per script hook pre-up, post-up, ecc.

Gli utenti del precedente ifupdown potrebbero avere familiarità con l’uso di script hook (es. pre-up, post-up, ecc.) nel loro file di interfaccia. La configurazione di Netplan attualmente non supporta gli script hook nella sua definizione di configurazione.

Invece per ottenere questa funzionalità con il networkd renderer, gli utenti possono usare networkd-dispatcher. Il pacchetto fornisce agli utenti e ai pacchetti dei punti di aggancio quando vengono raggiunti specifici stati della rete per aiutare a reagire allo stato della rete.

Nota: Se non si è su Ubuntu Server, ma su Desktop la rete è gestita da Network Manager – in questo caso si ha invece bisogno degli script NM Dispatcher.

Le FAQ di Netplan hanno una grande tabella che confronta i tempi degli eventi tra ifupdownsystemd-networkdnetwork-manager

È importante essere consapevoli che questi hooks funzionano in modo asincrono; cioè non bloccano la transizione verso un altro stato.

Le FAQ di Netplan hanno anche un esempio sulla conversione di un vecchio ifupdown hook in networkd-dispatcher.

Risorse

  • La pagina Ubuntu Wiki Network ha dei link ad articoli che coprono una configurazione di rete più avanzata.

  • Il sito web di netplan ha ulteriori esempi e documentazione.

  • La pagina man di netplan ha ulteriori informazioni su netplan.

  • La pagina man di systemd-resolve ha dettagli sul comando systemd-resolve.

  • La pagina man di systemd-resolved ha maggiori informazioni sul servizio systemd-resolved.

  • Per maggiori informazioni sul bridging vedi la pagina degli esempi di netplan.io e la pagina Networking-Bridge della Linux Foundation.

L’ultimo aggiornamento è di 5 mesi fa. Aiuta a migliorare questo documento nel forum.