Configurare gli indirizzi IPv4 ed eseguire la risoluzione dei problemi IPv4 di base

By | agosto 21, 2018

Nota: questo è un obiettivo d’esame RHCSA 7.
Presentazione

Sebbene sia ancora possibile definire la configurazione di rete attraverso i file nella directory /etc/sysconfig/network-scripts, non è più il modo preferito (non dimenticare di eseguire #nmcli con reload se modifichi manualmente i file! ).

Con RHEL 7, tutta la configurazione di rete viene ora eseguita principalmente tramite NetworkManager (il log delle modifiche di NetworkManager è disponibile qui).

Puoi usare:

* il comando nmtui (Text User Interface),
* il comando nmcli (Command Line Interface),
* o l’interfaccia grafica.

Per il resto di questo tutorial, è l’opzione nmcli che è stata scelta perché è il metodo più veloce e probabilmente meno incline agli errori.

Le modifiche apportate tramite il comando nmcli sono permanenti.

Attenzione: per praticare questo tutorial nelle migliori condizioni, connettersi alla macchina tramite la sua console (altrimenti si potrebbe perdere la connessione!).

Configurazione di rete

Per visualizzare la configurazione di rete, digitare:

# nmcli con show
NAME           UUID                                  TYPE            DEVICE
ethernet-eth0  8d83684f-cd22-42cc-9fff-7704945a5c36  802-3-ethernet  eth0

Nota: con è una scorciatoia per la connessione (puoi persino digitare solo c).

In alternativa, puoi digitare:

# nmcli dev status
DEVICE  TYPE      STATE      CONNECTION
eth0    ethernet  connected  ethernet-eth0
lo      loopback  unmanaged  --

Per rimuovere una connessione (qui ethernet-eth0), digitare:

# nmcli con del ethernet-eth0

Nota 1: se uno spazio appare nel nome dell’interfaccia (come System eth0), metti tutto tra virgolette: nmcli con del “System eth0”.
Nota 2: del è una abbreviazione di delete.

o

# nmcli con del 8d83684f-cd22-42cc-9fff-7704945a5c36

Gestione della connessione

Per creare una connessione con il nome ethernet-eth0, l’indirizzo IPv4 192.168.1.10/24 e il gateway predefinito 192.168.1.1, digitare:

# nmcli con add con-name net-eth0 ifname eth0 type ethernet ip4 192.168.1.10/24 gw4 192.168.1.1
Connection 'net-eth0' (441085a4-4155-417b-ad8f-78a888d89988) successfully added.

Nota 1: se non si specifica con-name net-eth0, la connessione viene chiamata ethernet-eth0.
Nota 2: Se non si specifica la parte ip4 192.168.1.10/24 gw4 192.168.1.1, si finisce con una connessione configurata automaticamente tramite DHCP.
Nota3: nmcli con up net-eth0 non è necessario quando si configura inizialmente una connessione.
Nota4: ip4 e gw4 sono utilizzati rispettivamente per l’indirizzo IP e il gateway predefinito. Di seguito, vedrete che la sintassi quando si modifica una connessione è diversa: è quindi utilizzando ipv4.addresses c’e uno spazio tra l’indirizzo IP e il gateway predefinito.

Per verificare la configurazione, digitare:

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::0000:00:0000:0000/64 scope link
       valid_lft forever preferred_lft forever
# ip r
default via 192.168.1.1 dev eth0  proto static  metric 1024
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.10

Nota 1: ip a è una scorciatoia di ip address show, ip r una scorciatoia di ip route show.
Nota 2: non si utilizza più il comando ifconfig. Questo comando è deprecato e non mostra più la configurazione di rete corretta (indirizzi IP secondari, ecc.).

Per ottenere tutte le informazioni su una connessione (qui net-eth0), digitare:

# nmcli con show net-eth0
connection.id:                          net-eth0
connection.uuid:                        441085a4-4155-417b-ad8f-78a888d89988
connection.interface-name:              eth0
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.timestamp:                   1427832564
connection.read-only:                   no
connection.permissions:                 
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.secondaries:                 
connection.gateway-ping-timeout:        0
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          yes
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.mac-address-blacklist:   
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:        
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            
ipv4.method:                            manual
ipv4.dns:                               
ipv4.dns-search:                        
ipv4.addresses:                         { ip = 192.168.1.10/24, gw = 192.168.1.1 }
ipv4.routes:                            
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv6.method:                            auto
ipv6.dns:                               
ipv6.dns-search:                        
ipv6.addresses:                         
ipv6.routes:                            
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.dhcp-hostname:                     --
GENERAL.NAME:                           net-eth0
GENERAL.UUID:                           441085a4-4155-417b-ad8f-78a888d89988
GENERAL.DEVICES:                        eth0
GENERAL.STATE:                          activated
GENERAL.DEFAULT:                        yes
GENERAL.DEFAULT6:                       no
GENERAL.VPN:                            no
GENERAL.ZONE:                           --
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/0
GENERAL.SPEC-OBJECT:                    --
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         ip = 192.168.1.10/24, gw = 192.168.1.1
IP6.ADDRESS[1]:                         ip = fe80::0000:00:0000:0000/64, gw = ::

In alternativa si può utilizzare:

# nmcli dev show eth0
GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     net-eth0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/0
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.1.10/24
IP4.GATEWAY:                            192.168.4.10
IP4.DNS[1]:                             192.168.4.1
IP6.ADDRESS[1]:                         fe80::0000:00:0000:0000/64
IP6.GATEWAY:

Per stoppare la connessione di rete (qui net-eth0), digitare:

# nmcli con down net-eth0
# nmcli con show
NAME      UUID                                  TYPE            DEVICE 
net-eth0  441085a4-4155-417b-ad8f-78a888d89988  802-3-ethernet  --

Nota1: il segno indica che la connessione non è più attiva (aggiungere l’opzione –active si visualizzano solo le connessioni attive).
Nota 2: è possibile specificare l’UUID (in questo caso 441085a4-4155-417b-ad8f-78a888d89988) anziché il nome della connessione di rete.
Nota 3: Dopo il riavvio, la connessione si riavvia automaticamente, la proprietà connection.autoconnect viene impostata su yes, equivalente a ONBOOT=yes.

Per avviare una connessione di rete (qui net-eth0), digitare:

# nmcli con up net-eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)

Nota: come in precedenza, è possibile specificare l’UUID (in questo caso 441085a4-4155-417b-ad8f-78a888d89988) anziché il nome della connessione di rete.

Per impedire il riavvio della connessione (qui net-eth0) dopo il riavvio, digitare:

# nmcli con mod net-eth0 connection.autoconnect no

Nota: mod è una scorciatoiadi modify.

Per modificare l’indirizzo IP e il gateway predefinito della connessione net-eth0 rispettivamente a 192.168.2.10/24 e 192.168.2.1, digitare:
In RHEL 7.0:

# nmcli con mod net-eth0 ipv4.addresses "192.168.2.10/24 192.168.2.1"
# nmcli con mod net-eth0 ipv4.method manual
# nmcli con up net-eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

Da RHEL 7.1 a:

# nmcli con mod net-eth0 ipv4.addresses 192.168.2.10/24
# nmcli con mod net-eth0 ipv4.gateway 192.168.2.1
# nmcli con mod net-eth0 ipv4.method manual
# nmcli con up net-eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

Attenzione: il comando nmcli con mod net-eth0 ipv4.addresses “192.168.2.10/24 192.168.2.1” con uno spazio tra l’indirizzo IP e il gateway predefinito, tutto tra virgolette, funzionava in RHEL 7.0 / CentOS 7.0 ma non funziona in RHEL 7.1 / CentOS 7.1 e successive a causa delle modifiche effettuate a NetworkManager (v0.9.9.1 -> v1.0.0).
Nota 1: è possibile utilizzare la sintassi +ipv4.addresses o -ipv4.addresses rispettivamente per aggiungere altri indirizzi IP o rimuovere alcuni precedentemente impostati (quello iniziale incluso).
Nota 2: la sintassi è diversa da quella utilizzata inizialmente per configurare la connessione con ip4 e gw4.
Nota3: secondo la documentazione di nmcli RedHat, la proprietà ipv4.method può avere valori diversi: auto significa che verrà utilizzato un metodo automatico appropriato (DHCP, PPP, ecc.) Per l’interfaccia, link-local si riferisce ad un indirizzo link-local in nell’intervallo 169.254/16 che verrà assegnato all’interfaccia, manual significa che viene utilizzato l’indirizzamento IP statico e deve essere fornito almeno un indirizzo IP nella proprietà degli indirizzi, shared indica che la connessione fornirà l’accesso di rete ad altri computer e l’interfaccia sarà  assegnata ad un indirizzo nell’intervallo 10.42.x.1/24 con un server DHCP e di inoltro DNS avviato e l’interfaccia è NAT-ed alla connessione di rete predefinita corrente, disabled significa che IPv4 non verrà utilizzato su questa connessione.

Con la release RHEL 7.3, NetworkManager esegue ora un controllo per rilevare gli indirizzi IPv4 duplicati quando si attiva una nuova connessione. Se l’indirizzo nella LAN è già assegnato, l’attivazione della connessione fallisce. Questa funzione è disabilitata per impostazione predefinita, ma è possibile attivarla tramite la proprietà ipv4.dad-timeout o la variabile ARPING_WAIT nei file ifcfg.

Per assegnare la connessione net-eth0 all’area di lavoro(work), digitare:

# firewall-cmd --permanent --zone=work --change-interface=eth0
success
# nmcli con mod net-eth0 connection.zone work 
# nmcli con up net-eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)

Nota 1: invece di usare il comando nmcli con mod, puoi anche modificare il file /etc/sysconfig/network-scripts/ifcfg-eth0 (qui per l’interfaccia di rete eth0), aggiungere ZONE=work e riavviare l’interfaccia di rete con nmcli con up net-eth0.
Nota 2: per ulteriori dettagli sul comando firewall-cmd e sul concetto di zona(zone), consultare la pagina iniziale di Firewalld.

Configurazione del nome host

In RHEL 7 ci sono tre tipi di nomi host: static, pretty, e transient.
“Il nome host static è il nome host tradizionale, che può essere scelto dall’utente, ed è memorizzato nel file /etc/hostname. Il nome host transient (temporaneo) è un nome host dinamico gestito dal kernel. Viene inizializzato sul nome host statico per impostazione predefinita, il cui valore è predefinito su localhost. Può essere modificato da DHCP o mDNS in fase di runtime. L’hostname pretty (simpatico) è un nome host UTF8 in formato libero per la presentazione verso l’utente. “Fonte: RHEL 7 Networking Guide.

Per ottenere i nomi host del server, digitare:

# hostnamectl
   Static hostname: centos7.example.com
         Icon name: computer
           Chassis: n/a
        Machine ID: 8f56e45764474b668b0db97b4127a01b
           Boot ID: 2ae7e6c78331414b82aa89a0ffcfa9fa
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-123.el7.x86_64
      Architecture: x86_64

In alternativa, è possibile utilizzare il comando hostname per ottenere solo il nome host (questo legge il file /etc/hostname):

# hostname
centos7.example.com

Nota: è possibile ottenere lo stesso risultato anche con il comando nmcli gen host.

Per assegnare in modo permanente il nome host rhel7 al server, digitare:

# hostnamectl set-hostname rhel7

Nota 1: Con questa sintassi, tutti e tre i nomi host (static, pretty, e transient) assumono il valore rhel7 allo stesso tempo. Tuttavia, è possibile impostare separatamente i tre nomi host utilizzando le opzioni -pretty, -static e -transient.
Nota 2: Il comando nmcli gen host rhel7 ti darà lo stesso risultato.

Attenzione: con la release RHEL 7.3, NetworkManager ora utilizza il servizio systemd-hostnamed per leggere e scrivere il nome host statico, che è memorizzato nel file /etc/hostname. A causa di questo cambiamento, le modifiche manuali apportate al file /etc/hostname non vengono più rilevate automaticamente da NetworkManager. Gli utenti devono modificare il nome host del sistema tramite l’utilità hostnamectl. Inoltre, l’uso della variabile HOSTNAME nel file /etc/sysconfig/network è ora deprecata.

Risoluzione del nome host

La risoluzione del nome host si basa sul file /etc/nsswitch.conf in cui è possibile trovare la seguente riga per impostazione predefinita:

hosts:      files dns

Ciò significa che la risoluzione del nome host viene dapprima effettuata tramite file (risoluzione statica), successivamente tramite dns (risoluzione dinamica).

La risoluzione statica del nome host passa attraverso il file /etc/hosts:

192.168.1.10 centos7.example.com centos7

Nota: scrivi sempre l’indirizzo IP, il nome di dominio completo e opzionalmente alcuni alias in questo ordine, altrimenti alcuni servizi come Kerberos non funzioneranno!

La risoluzione dinamica del nome host si basa sul file /etc/resolv.conf:

# Generated by NetworkManager
search example.com
nameserver 192.168.1.1

Nota: è possibile configurare fino a 3 server dei nomi. Poiché i nomi dei server vengono chiamati nell’ordine indicato (il secondo viene chiamato se il primo non risponde e così via), inserire sempre il server dei nomi principale per primo nell’elenco.

Per aggiungere un server DNS (qui 8.8.8.8) alla configurazione della connessione (qui net-eth0), digitare:

# nmcli con mod net-eth0 +ipv4.dns 8.8.8.8
# nmcli con up net-eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
# more /etc/resolv.conf
# Generated by NetworkManager
search example.com
nameserver 192.168.1.1
nameserver 8.8.8.8

Nota 1: utilizzare +ipv4.dns per aggiungere un nuovo server DNS, -ipv4.dns per rimuovere un server DNS e ipv4.dns per sostituire il server DNS corrente.
Nota 2: la modifica si verifica solo dopo il riavvio della connessione.
Nota3: utilizzare l’opzione ipv4.dns-search per modificare il nome del dominio, se necessario. Fai attenzione a impostare il nome di dominio completo completo prima con il comando hostnamectl set-hostname.

Per aggiungere un nome di dominio nell’elenco di ricerca (qui esempio2.com), digitare:

# nmcli con mod net-eth0 +ipv4.dns-search example2.com
# nmcli con up net-eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
# more /etc/resolv.conf
# Generated by NetworkManager
search example2.com example.com
nameserver 192.168.1.1
nameserver 8.8.8.8

Non è possibile rimuovere un server DNS fornito tramite DHCP con il comando precedente (con l’opzione -ipv4.dns per esempio), si otterrà questo messaggio di errore: “Error: failed to remove a value from ipv4.dns: the property doesn’t contain DNS server ‘192.168.1.1’.”.
Se si desidera impostare la propria configurazione DNS in questo contesto, digitare:

# nmcli con mod net-eth0 ipv4.ignore-auto-dns yes

Nota: si ottiene lo stesso risultato specificando PEERDNS=no nei file di configurazione di rete.

Con RHEL 7.3 arriva la proprietà ipv4.dhcp-timeout o l’opzione IPV4_DHCP_TIMEOUT nei file ifcfg. Di conseguenza, NetworkManager attende una risposta dal server DHCP solo per un determinato periodo di tempo.

Risorse addizionali

Oltre agli obiettivi dell’esame, potresti essere interessato ad effettuare un tuning di 10G all’interfaccia di rete.
IBM ha scritto un documento su come disabilitare IPv6 in RHEL 7.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.