4.4 Lezione 1
Certificazione: |
Linux Essentials |
---|---|
Versione: |
1.6 |
Argomento: |
4 Il Sistema Operativo Linux |
Obiettivo: |
4.4 Il Tuo Computer in Rete |
Lezione: |
1 di 1 |
Introduzione
Al giorno d’oggi, qualsiasi tipo di dispositivo informatico scambia informazioni sulle reti. L’idea alla base delle reti di computer è la connessione fisica tra un dispositivo e i suoi peer. Queste connessioni sono chiamate link e sono le connessioni più semplici tra due diversi dispositivi. I link possono essere stabiliti attraverso vari mezzi, come cavi in rame, fibre ottiche, onde radio o laser.
Ogni link è collegato a un’interfaccia di un dispositivo. Ogni dispositivo può avere più interfacce e quindi essere connesso a più link. Attraverso questi link i computer possono formare una rete: una piccola comunità di dispositivi che possono connettersi direttamente tra loro. Esistono numerosi esempi di reti di questo tipo nel mondo. Per essere in grado di comunicare al di fuori di una rete link layer (a livello di link), i dispositivi utilizzano i router. Pensa alle reti link layer come isole collegate da router, proprio come da ponti, sui quali viaggiano le informazioni per raggiungere un dispositivo che fa parte di un’isola remota.
Questo modello porta a diversi livelli di rete:
- Link Layer
-
Gestisce la comunicazione tra dispositivi collegati direttamente.
- Network Layer
-
Gestisce il routing al di fuori delle singole reti e l’indirizzamento univoco dei dispositivi al di fuori di una rete link layer.
- Application Layer
-
Consente ai singoli programmi di connettersi tra loro.
Quando furono inventate, le reti di computer usavano gli stessi metodi di comunicazione dei telefoni in quanto erano a commutazione di circuito. Ciò significa che era necessario creare un link dedicato e diretto tra due nodi affinché fossero in grado di comunicare. Questo metodo funzionava bene, ma richiedeva tutto lo spazio su un dato link perché solo due host potessero comunicare.
Successivamente le reti di computer sono passate a un meccanismo chiamato commutazione di pacchetto. Secondo questo metodo i dati vengono raggruppati con un header (intestazione), che contiene informazioni sull’origine e sulla destinazione. Le informazioni sul contenuto effettivo sono contenute in questo frame e inviate tramite il link al destinatario indicato nell’header del frame. Ciò consente a più dispositivi di condividere un singolo link e comunicare quasi contemporaneamente.
Rete Link Layer
Il compito di ogni pacchetto è trasportare le informazioni dalla sorgente alla destinazione attraverso un link che collega entrambi i dispositivi. Questi dispositivi hanno bisogno di un modo per identificarsi reciprocamente. Questo è lo scopo di un indirizzo di link layer (indirizzo a livello di link). In una rete Ethernet, gli indirizzi MAC (Media Access Control) vengono utilizzati per identificare i singoli dispositivi. Un indirizzo MAC è composto da 48 bit. Non sono necessariamente univoci a livello globale e non possono essere utilizzati per indirizzare peer al di fuori del collegamento corrente. Pertanto, questi indirizzi non possono essere utilizzati per instradare i pacchetti verso altri collegamenti. Il destinatario di un pacchetto controlla se l’indirizzo di destinazione corrisponde al proprio indirizzo di link layer e, in caso affermativo, elabora il pacchetto. Altrimenti il pacchetto viene scartato. L’eccezione a questa regola è rappresentata dai pacchetti di broadcast (un pacchetto inviato a chiunque in una rete locale) che sono sempre accettati.
Il comando ip link show
mostra un elenco di tutte le interfacce di rete disponibili e dei loro indirizzi di link layer, nonché alcune altre informazioni sulla dimensione massima del pacchetto:
$ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff
L’output sopra riportato mostra che il dispositivo ha due interfacce, lo
e ens33
. lo
è il dispositivo di loopback e ha indirizzo MAC 00:00:00:00:00:00
, mentre ens33
è un’interfaccia ethernet e ha indirizzo MAC 00:0c:29:33:3b:25
.
Rete IPv4
Per visitare siti web come Google o Twitter, per controllare la posta elettronica o per consentire alle aziende di connettersi tra loro, i pacchetti devono essere in grado di spostarsi da una rete link layer all’altra. Spesso queste reti sono collegate solo indirettamente, con diverse reti link layer intermedie che i pacchetti devono attraversare per raggiungere l’effettiva destinazione.
Gli indirizzi di link layer di un’interfaccia di rete non possono essere utilizzati al di fuori di quella specifica rete link layer. Poiché questo indirizzo non ha alcun significato per i dispositivi in altre reti link layer, è necessaria una forma di indirizzi univoci a livello globale per implementare il routing. Questo schema di indirizzamento, insieme al concetto generale di routing, è implementato dall'Internet Protocol (IP).
Note
|
Un protocollo è un insieme di procedure per fare qualcosa in modo che tutte le parti che seguono il protocollo siano compatibili tra loro. Un protocollo può essere visto come la definizione di uno standard. In informatica, l’Internet Protocol è uno standard accettato da tutti in modo che diversi dispositivi prodotti da diversi produttori possano comunicare tra loro. |
Indirizzi IPv4
Gli indirizzi IP, come gli indirizzi MAC, rappresentano un modo per indicare da dove proviene un pacchetto dati e dove sta andando. IPv4 è stato il primo protocollo. Gli indirizzi IPv4 hanno 32 bit, fornendo un numero massimo teorico di 4.294.967.296 indirizzi. Tuttavia, il numero di questi indirizzi utilizzabili dai dispositivi è molto inferiore in quanto alcuni intervalli sono riservati per usi speciali come, per esempio, gli indirizzi broadcast (che vengono utilizzati per raggiungere tutti i partecipanti di una specifica rete), gli indirizzi multicast (simili agli indirizzi broadcast, ma il dispositivo deve sintonizzarsi come una radio) o quelli riservati per uso privato.
Gli indirizzi IPv4 sono rappresentati da quattro cifre separate da un punto e ogni cifra può variare da 0
a 255
. Per esempio, considera il seguente indirizzo IP:
192.168.0.1
Tecnicamente, ciascuna di queste cifre rappresenta otto singoli bit. Quindi questo indirizzo può anche essere scritto in questo modo:
11000000.10101000.00000000.00000001
All’atto pratico viene utilizzata la notazione decimale come visto sopra. Tuttavia, la rappresentazione bit per bit è importante per comprendere il subnetting.
Sottoreti IPv4
Per supportare il routing, gli indirizzi IP possono essere suddivisi in due parti: la porzione di rete e la porzione host. La porzione di rete identifica la rete su cui si trova il dispositivo e viene utilizzata per instradare i pacchetti verso quella rete. La porzione host viene utilizzata per identificare in modo specifico un dato dispositivo su una rete e per consegnare il pacchetto allo specifico destinatario una volta che ha raggiunto la sua rete link layer.
Gli indirizzi IP possono essere suddivisi nella porzione di sottorete e nella porzione host in qualsiasi punto. La cosiddetta maschera di sottorete (subnet mask), chiamata anche maschera di rete (netmask), definisce dove avviene questa divisione. Prendiamo nuovamente in considerazione la rappresentazione binaria dell’indirizzo IP del precedente esempio:
11000000.10101000.00000000.00000001
Per questo indirizzo IP, la subnet mask imposta ogni bit che appartiene alla porzione di rete a 1
e ogni bit che appartiene alla porzione host a 0
:
11111111.11111111.11111111.00000000
All’atto pratico la netmask viene scritta in notazione decimale:
255.255.255.0
Ciò significa che questa rete va da 192.168.0.0
a 192.168.0.255
. Nota che i primi tre numeri, per i quali sono impostati tutti i bit nella maschera di rete, rimangono invariati negli indirizzi IP.
Infine, c’è una notazione alternativa per la subnet mask, che viene chiamata Classless Inter-Domain Routing (CIDR). Questa notazione indica semplicemente quanti bit sono impostati nella subnet mask e aggiunge tale numero all’indirizzo IP. Nell’esempio precedente, 24 bit su 32 sono impostati a 1
nella subnet mask. Questo può essere espresso secondo la notazione CIDR come 192.168.0.1/24
.
Indirizzi Privati IPv4
Come accennato in precedenza, alcune sezioni dello spazio degli indirizzi IPv4 sono riservate per usi speciali. Uno di questi è l’assegnazione di indirizzi privati. Le seguenti sottoreti sono riservate per l’indirizzamento privato:
-
10.0.0.0/8
-
172.16.0.0/12
-
192.168.0.0/16
Chiunque può utilizzare gli indirizzi di queste sottoreti. Tuttavia, queste sottoreti non possono essere instradate sulla rete Internet pubblica poiché sono potenzialmente utilizzate da numerose reti in contemporanea.
Oggi la maggior parte delle reti utilizza questi indirizzi interni. Consentono la comunicazione interna senza la necessità di alcuna assegnazione di indirizzi esterni. La maggior parte delle connessioni Internet oggi viene fornita con un unico indirizzo IPv4 esterno. Quando inoltrano i pacchetti a Internet, i router mappano tutti gli indirizzi interni su quell’unico indirizzo IP esterno. Questo è chiamato Network Address Translation (NAT). Il caso speciale di NAT in cui un router mappa gli indirizzi interni su un singolo indirizzo IP esterno è talvolta chiamato mascheramento (masquerading). Ciò consente a qualsiasi dispositivo sulla rete interna di stabilire nuove connessioni con qualsiasi indirizzo IP globale in Internet.
Note
|
Con il masquerading non è possibile fare riferimento ai dispositivi interni da Internet poiché non hanno un indirizzo valido a livello globale. Tuttavia, questa non rappresenta una caratteristica di sicurezza. Anche quando si utilizza il masquerading, è comunque necessario un firewall. |
Configurazione di Indirizzi IPv4
Esistono due modi principali per configurare gli indirizzi IPv4 su un computer: o assegnando gli indirizzi manualmente o utilizzando il Dynamic Host Configuration Protocol (DHCP) per la configurazione automatica.
Quando si utilizza il DHCP, un server centrale controlla quali indirizzi vengono distribuiti a quali dispositivi. Il server può anche fornire ai dispositivi altre informazioni sulla rete come, per esempio, gli indirizzi IP dei server DNS, l’indirizzo IP del default router, o, nel caso di configurazioni più complesse, può avviare un sistema operativo dalla rete. Il DHCP è abilitato per impostazione predefinita su molti sistemi; quindi probabilmente avrai già un indirizzo IP una volta connesso a una rete.
Gli indirizzi IP possono anche essere aggiunti manualmente a un’interfaccia utilizzando il comando ip addr add
. Nel seguente esempio aggiungiamo l’indirizzo 192.168.0.5
all’interfaccia ens33
. La rete utilizza la netmask 255.255.255.0
che equivale a /24
secondo la notazione CIDR:
$ sudo ip addr add 192.168.0.5/255.255.255.0 dev ens33
Ora possiamo verificare che l’indirizzo sia stato aggiunto utilizzando il comando ip addr show
:
$ ip addr show 1: 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 25: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff inet 192.168.0.5/24 192.168.0.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::010c:29ff:fe33:3b25/64 scope link noprefixroute valid_lft forever preferred_lft forever
L’output mostra sia l’interfaccia lo
sia l’interfaccia ens33
con il relativo indirizzo, assegnato tramite il precedente comando.
Per verificare che un dispositivo sia raggiungibile è possibile utilizzare il comando ping
. Questo invia un tipo speciale di messaggio chiamato echo request in cui il mittente chiede una risposta al destinatario. Se la connessione tra i due dispositivi può essere stabilita correttamente, il destinatario invierà un echo reply, verificando così la connessione:
$ ping -c 3 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=2.16 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=1.85 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=3.41 ms --- 192.168.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 5ms rtt min/avg/max/mdev = 1.849/2.473/3.410/0.674 ms
L’opzione -c 3
interrompe il comando ping
dopo aver inviato tre echo request. Altrimenti, ping
continua a funzionare all’infinito e deve essere fermato premendo Ctrl+C.
Routing IPv4
Il routing è il processo tramite il quale un pacchetto passa dalla rete di origine alla rete di destinazione. Ogni dispositivo mantiene una tabella di routing che contiene informazioni sulle reti IP che possono essere raggiunte direttamente tramite il collegamento del dispositivo alle reti link layer, e informazioni sulle reti IP che possono essere raggiunte inoltrando i pacchetti a un router. Infine, una default route definisce un router che riceve tutti i pacchetti che non hanno corrispondenza con alcun altro percorso.
Quando si stabilisce una connessione, il dispositivo cerca l’indirizzo IP della destinazione nella sua tabella di routing. Se una voce ha corrispondenza con l’indirizzo, il pacchetto viene inviato o alla rispettiva rete link layer o inoltrato al router indicato nella tabella di routing.
Anche i router stessi mantengono delle tabelle di routing. Quando riceve un pacchetto, un router cerca l’indirizzo di destinazione nella propria tabella di routing e invia il pacchetto al router successivo. Questo viene ripetuto fino a quando il pacchetto arriva al router sulla rete di destinazione. Ogni router coinvolto in questo percorso è chiamato hop. Quest’ultimo router individua, nella sua tabella di routing, un link diretto per l’indirizzo di destinazione e invia i pacchetti alla sua interfaccia.
La maggior parte delle reti domestiche ha solo un punto di uscita: il singolo router fornito dall'internet service provider (ISP). In questo caso, un dispositivo semplicemente inoltra tutti i pacchetti che non sono per la rete interna direttamente al router di casa che li invia quindi al router del provider per un ulteriore inoltro. Questo è un esempio di default route.
Il comando ip route show
elenca la tabella di routing IPv4 corrente:
$ ip route show 127.0.0.0/8 via 127.0.0.1 dev lo0 192.168.0.0/24 dev ens33 scope link
Per aggiungere una default route, tutto ciò che serve è l’indirizzo interno del router che sarà il gateway predefinito. Se, per esempio, il router ha l’indirizzo 192.168.0.1
, possiamo usare il seguente comando per configurarlo come default route:.
$ sudo ip route add default via 192.168.0.1
Per fare una verifica, esegui nuovamente ip route show
:
$ ip route show default via 192.168.0.1 dev ens33 127.0.0.0/8 via 127.0.0.1 dev lo0 192.168.0.0/24 dev ens33 scope link
Rete IPv6
IPv6 è stato progettato per risolvere le lacune di IPv4, in particolare la mancanza di indirizzi poiché sempre più dispositivi venivano messi online. Tuttavia, IPv6 include anche altre funzionalità come nuovi protocolli per la configurazione automatica della rete. Invece di 32 bit per indirizzo, IPv6 ne utilizza 128. Ciò consente circa 2128 indirizzi. Tuttavia, come IPv4, il numero di indirizzi utilizzabili univoci a livello globale è molto inferiore poichè alcune sezioni sono riservate per altri usi. Questo gran numero di indirizzi significa che ci sono indirizzi pubblici più che sufficienti per ogni dispositivo attualmente connesso a Internet e per molti altri che ci saranno in futuro, riducendo così la necessità di mascheramento e i problemi da esso generati come il ritardo nella traduzione e l’impossibilità di connettersi direttamente a dispositivi mascherati.
Indirizzi IPv6
Gli indirizzi utilizzano 8 gruppi di 4 cifre esadecimali ciascuno separati da due punti:
2001:0db8:0000:abcd:0000:0000:0000:7334
Note
|
Le cifre esadecimali vanno da |
Per semplificare le cose, gli zeri iniziali di ogni gruppo possono essere rimossi; tuttavia, ogni gruppo deve contenere almeno una cifra:
2001:db8:0:abcd:0:0:0:7334
Quando più gruppi contenenti solo zeri si susseguono direttamente uno dopo l’altro, possono essere completamente sostituiti da "::":
2001:db8:0:abcd::7334
Tuttavia, questo può accadere solo una volta in ogni indirizzo.
Prefisso IPv6
I primi 64 bit di un indirizzo IPv6 sono noti come prefisso di routing (routing prefix). Il prefisso viene utilizzato dai router per determinare a quale rete appartiene un dispositivo e, quindi, su quale percorso devono essere inviati i dati. Il subnetting avviene sempre all’interno del prefisso. Gli ISP di solito distribuiscono i prefissi /48 o /58 ai propri clienti, lasciando 16 o 8 bit per il loro subnetting interno.
Esistono tre principali tipi di prefisso in IPv6:
- Global Unique Address
-
Il prefisso viene assegnato dai blocchi riservati agli indirizzi globali. Questi indirizzi sono validi in tutta Internet.
- Unique Local Address
-
Non può essere instradato su Internet. Possono, tuttavia, essere instradati internamente all’interno di un’organizzazione. Questi indirizzi vengono utilizzati all’interno di una rete per garantire che i dispositivi abbiano un indirizzo anche in assenza di connessione Internet. Sono l’equivalente degli intervalli di indirizzi privati in IPv4. I primi 8 bit sono sempre
fc
ofd
, seguiti da 40 bit generati casualmente. - Link Local Address
-
Sono validi solo su un particolare link. Ogni interfaccia di rete compatibile con IPv6 ha uno di questi indirizzi, che inizia con
fe80
. Questi indirizzi vengono utilizzati internamente da IPv6 per richiedere indirizzi aggiuntivi utilizzando la configurazione automatica e per trovare altri computer sulla rete utilizzando il Neighbor Discovery Protocol.
Identificativo dell’Interfaccia IPv6
Mentre il prefisso determina in quale rete risiede un dispositivo, l’identificativo dell’interfaccia viene utilizzato per elencare i dispositivi all’interno di una rete. Gli ultimi 64 bit in un indirizzo IPv6 formano l’identificativo dell’interfaccia, proprio come gli ultimi bit di un indirizzo IPv4.
Quando un indirizzo IPv6 viene assegnato manualmente, l’identificativo dell’interfaccia viene impostato come parte dell’indirizzo. Quando si utilizza la configurazione automatica dell’indirizzo, l’identificativo dell’interfaccia viene scelto casualmente o derivato dall’indirizzo link layer del dispositivo. Questo fa apparire una variante dell’indirizzo di link layer all’interno dell’indirizzo IPv6.
Configurazione di Indirizzi IPv6
Come per IPv4, un indirizzo IPv6 può essere assegnato sia manualmente sia automaticamente. Tuttavia, IPv6 ha due diversi tipi di configurazione automatica, DHCPv6 e Stateless Address Autoconfiguration (SLAAC).
SLAAC è il più semplice dei due metodi automatizzati ed è integrato nello standard IPv6. I messaggi utilizzano il nuovo Neighbor Discovery Protocol che consente ai dispositivi di trovarsi e richiedere informazioni su una rete. Queste informazioni vengono inviate dai router e possono contenere prefissi IPv6 che i dispositivi possono utilizzare combinandoli con un identificativo di interfaccia di loro scelta, purché l’indirizzo risultante non sia ancora in uso. I dispositivi non forniscono feedback al router sugli indirizzi effettivi che hanno creato.
DHCPv6, invece, è il DHCP aggiornato per funzionare con le modifiche di IPv6. Consente un controllo più preciso delle informazioni fornite ai client, per esempio consentendo ogni volta la distribuzione dello stesso indirizzo allo stesso client e l’invio di più opzioni al client rispetto a SLAAC. Con DHCPv6, i client devono ottenere il consenso esplicito di un server DHCP per utilizzare un indirizzo.
Il metodo per assegnare manualmente un indirizzo IPv6 a un’interfaccia è lo stesso di IPv4:
$ sudo ip addr add 2001:db8:0:abcd:0:0:0:7334/64 dev ens33
Per verificare che l’operazione di assegnazione sia andata a buon fine viene utilizzato lo stesso comando ip addr show
visto in precedenza:
$ ip addr show 1: 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 25: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff inet 192.168.0.5/24 192.168.0.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::010c:29ff:fe33:3b25/64 scope link noprefixroute valid_lft forever preferred_lft forever inet6 2001:db8:0:abcd::7334/64 scope global valid_lft forever preferred_lft forever
Qui possiamo vedere anche l’indirizzo link-local fe80::010c:29ff:fe33:3b25/64
.
Come per IPv4, il comando ping
può essere utilizzato per confermare la raggiungibilità dei dispositivi anche in IPv6:
$ ping 2001:db8:0:abcd::1 PING 2001:db8:0:abcd::1(2001:db8:0:abcd::1) 56 data bytes 64 bytes from 2001:db8:0:abcd::1: icmp_seq=1 ttl=64 time=0.030 ms 64 bytes from 2001:db8:0:abcd::1: icmp_seq=2 ttl=64 time=0.040 ms 64 bytes from 2001:db8:0:abcd::1: icmp_seq=3 ttl=64 time=0.072 ms --- 2001:db8:0:abcd::1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 43ms rtt min/avg/max/mdev = 0.030/0.047/0.072/0.018 ms
Note
|
Su alcuni sistemi Linux, |
Per verificare nuovamente l’indirizzo link-local, puoi utilizzare ancora ping
. Ma poiché tutte le interfacce usano il prefisso fe80::/64
, l’interfaccia corretta deve essere specificata insieme all’indirizzo:
$ ping6 -c 1 fe80::010c:29ff:fe33:3b25%ens33 PING fe80::010c:29ff:fe33:3b25(fe80::010c:29ff:fe33:3b25) 56 data bytes 64 bytes from fe80::010c:29ff:fe33:3b25%ens33: icmp_seq=1 ttl=64 time=0.049 ms --- fe80::010c:29ff:fe33:3b25 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.049/0.049/0.049/0.000 ms
DNS
Gli indirizzi IP sono difficili da ricordare e non sono sicuramente molto attraenti se stai cercando di commercializzare un servizio o un prodotto. È qui che entra in gioco il Domain Name System. Nella sua forma più semplice, il DNS è una rubrica telefonica distribuita che mappa nomi di dominio facili da ricordare, come example.com
, su indirizzi IP. Quando, per esempio, un utente naviga su un sito Web, immette il nome host del DNS come parte dell’URL. Il browser web invia quindi il nome del DNS a qualsiasi resolver DNS sia stato configurato. Questo resolver DNS scopre a sua volta l’indirizzo correlato al dominio; quindi risponde con quell’indirizzo e il browser web cerca di raggiungere il server web a quell’indirizzo IP.
I resolver che Linux utilizza per cercare i dati di DNS si trovano nel file di configurazione /etc/resolv.conf
:
$ cat /etc/resolv.conf search lpi nameserver 192.168.0.1
Quando il resolver esegue la ricerca di un nome, controlla prima il file /etc/hosts
per vedere se contiene un indirizzo per il nome richiesto. Se lo trova, restituisce quell’indirizzo e non contatta il DNS. Ciò consente agli amministratori di rete di impostare la risoluzione dei nomi senza dover configurare un server DNS completo. Ogni riga in qesto file contiene un indirizzo IP seguito da uno o più nomi:
127.0.0.1 localhost.localdomain localhost ::1 localhost.localdomain localhost 192.168.0.10 server 2001:db8:0:abcd::f server
Per eseguire una ricerca nel DNS, usa il comando host
:
$ host learning.lpi.org learning.lpi.org has address 208.94.166.198
Puoi ottenere informazioni più dettagliate usando il comando dig
:
$ dig learning.lpi.org ; <<>> DiG 9.14.3 <<>> learning.lpi.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21525 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 2ac55879b1adef30a93013705d3306d2128571347df8eadf (bad) ;; QUESTION SECTION: ;learning.lpi.org. IN A ;; ANSWER SECTION: learning.lpi.org. 550 IN A 208.94.166.198 ;; Query time: 3 msec ;; SERVER: 192.168.0.1#53(192.168.0.1) ;; WHEN: Sat Jul 20 14:20:21 EST 2019 ;; MSG SIZE rcvd: 89
Qui possiamo anche vedere il nome dei tipi di record DNS, in questo caso A
per IPv4.
Socket
Un socket è un punto finale di comunicazione per due programmi che parlano tra loro. Se il socket è connesso a una rete, i programmi possono essere eseguiti su diversi dispositivi, come un browser web in esecuzione sul laptop di un utente e un server web in esecuzione nel data center di un’azienda.
Esistono tre tipi principali di socket:
- Socket Unix
-
Connettono processi in esecuzione sullo stesso dispositivo.
- Socket UDP (User Datagram Protocol)
-
Connettono applicazioni utilizzando un protocollo veloce ma non robusto.
- Socket TCP (Transmission Control Protocol)
-
Sono più affidabili dei socket UDP e, per esempio, confermano la ricezione dei dati.
I socket Unix possono solo connettere applicazioni in esecuzione sullo stesso dispositivo. Tuttavia, i socket TCP e UDP possono stabilire connessioni su una rete. TCP consente a un flusso di dati di arrivare sempre nell’ordine esatto in cui è stato inviato. UDP è più "invia e dimentica"; il pacchetto viene inviato, ma la sua consegna non è garantita. UDP, tuttavia, non ha l'overhead di TCP, rendendolo perfetto per applicazioni a bassa latenza come i videogiochi online.
Sia TCP sia UDP utilizzano delle porte per indirizzare più socket sullo stesso indirizzo IP. Mentre la porta di origine per una connessione è solitamente casuale, le porte di destinazione sono standardizzate per uno specifico servizio. HTTP, per esempio, è solitamente ospitato sulla porta 80, mentre HTTPS viene eseguito sulla porta 443. SSH, un protocollo per accedere in modo sicuro a un sistema Linux remoto, è in ascolto sulla porta 22.
Il comando ss
consente a un amministratore di esaminare tutti i socket su un computer Linux. Mostra tutto: dall’indirizzo di origine, all’indirizzo di destinazione e al tipo. Una delle sue migliori caratteristiche è l’uso di filtri in modo che un utente possa monitorare i socket in qualsiasi stato di connessione desideri. ss
può essere eseguito con un insieme di opzioni oltre che un’espressione di filtro per limitare le informazioni mostrate.
Quando viene eseguito senza alcuna opzione, il comando mostra un elenco di tutti i socket stabiliti. L’opzione -p
include informazioni sul processo che utilizza ogni socket. L’opzione -s
mostra un riepilogo dei socket. Ci sono molte altre opzioni disponibili per questo strumento, ma le ultime principali da ricordare sono -4
e -6
per restringere il campo di ricerca del protocollo IP rispettivamente a IPv4 o IPv6, -t
e -u
per consentire all’amministratore di selezionare i socket TCP o UDP, e -l
per mostrare solo i socket che sono in attesa di nuove connessioni.
Il seguente comando, per esempio, elenca tutti i socket TCP attualmente in uso:
$ ss -t State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.0.5:49412 192.168.0.1:https ESTAB 0 0 192.168.0.5:37616 192.168.0.1:https ESTAB 0 0 192.168.0.5:40114 192.168.0.1:https ESTAB 0 0 192.168.0.5:54948 192.168.0.1:imap ...
Esercizi Guidati
-
A un ingegnere di rete viene chiesto di assegnare due indirizzi IP all’interfaccia
ens33
di un host: un indirizzo IPv4 (192.168.10.10/24
) e un indirizzo IPv6 (2001:0:0:abcd:0:8a2e:0370:7334/64
). Quali comandi deve usare? -
Quali indirizzi del seguente elenco sono privati?
192.168.10.1
120.56.78.35
172.16.57.47
10.100.49.162
200.120.42.6
-
Quale voce dovresti aggiungere nel file hosts per assegnare
192.168.0.15
aexample.com
? -
Qual è l’effetto del seguente comando?
sudo ip -6 route add default via 2001:db8:0:abcd::1
Esercizi Esplorativi
-
Indica il tipo di record DNS utilizzato per le seguenti richieste:
-
Dati testuali
-
Ricerca inversa per indirizzo IP (Reverse IP address lookup)
-
Un dominio che non ha un proprio indirizzo e fa affidamento su un altro dominio per queste informazioni
-
Server di posta
-
-
Linux prevede una funzionalità chiamata bridging: cosa fa e come può esserti utile?
-
Quale opzione deve essere passata al comando
ss
per visualizzare tutti i socket UDP stabiliti? -
Quale comando mostra un riepilogo di tutti i socket in esecuzione su un sistema Linux?
-
Il seguente output è stato generato dal comando dell’esercizio precedente. Quanti socket TCP e UDP sono attivi?
Total: 978 (kernel 0) TCP: 4 (estab 0, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0 Transport Total IP IPv6 * 0 - - RAW 1 0 1 UDP 7 5 2 TCP 4 3 1 INET 12 8 4 FRAG 0 0 0
Sommario
Questa lezione tratta il collegamento in rete di un computer Linux. Per prima cosa abbiamo imparato a conoscere i vari livelli di rete:
-
Il link layer che collega direttamente i dispositivi;
-
Il netwok layer che prevede il routing tra le reti e uno spazio di indirizzi globale;
-
L’application Layer in cui le applicazioni si connettono tra loro.
Abbiamo visto come IPv4 e IPv6 vengono utilizzati per indirizzare i singoli computer e come TCP e UDP enumerano i socket utilizzati dalle applicazioni per connettersi tra loro. Abbiamo anche appreso come viene utilizzato il DNS per risolvere i nomi in indirizzi IP.
Comandi utilizzati negli esercizi:
dig
-
Interroga il DNS e fornisce informazioni dettagliate sulle domande e sulle risposte.
host
-
Interroga il DNS e fornisce un output sintetico.
ip
-
Configura la rete su Linux, comprese le interfacce di rete, gli indirizzi e il routing.
ping
-
Testa la connettività di un dispositivo remoto.
ss
-
Mostra informazioni sui socket.
Risposte agli Esercizi Guidati
-
A un ingegnere di rete viene chiesto di assegnare due indirizzi IP all’interfaccia
ens33
di un host: un indirizzo IPv4 (192.168.10.10/24
) e un indirizzo IPv6 (2001:0:0:abcd:0:8a2e:0370:7334/64
). Quali comandi deve usare?sudo ip addr add 192.168.10.10/24 dev ens33 sudo ip addr add 2001:0:0:abcd:0:8a2e:0370:7334/64 dev ens33
-
Quali indirizzi del seguente elenco sono privati?
192.168.10.1
X
120.56.78.35
172.16.57.47
X
10.100.49.162
X
200.120.42.6
-
Quale voce dovresti aggiungere nel file hosts per assegnare
192.168.0.15
aexample.com
?192.168.0.15 example.com
-
Qual è l’effetto del seguente comando?
sudo ip -6 route add default via 2001:db8:0:abcd::1
Aggiunge una default route nella tabella di routing che invia tutto il traffico IPv6 al router con indirizzo interno
2001:db8:0:abcd::1
.
Risposte agli Esercizi Esplorativi
-
Indica il tipo di record DNS utilizzato per le seguenti richieste:
-
Dati testuali
TXT
-
Ricerca inversa per indirizzo IP (Reverse IP address lookup)
PTR
-
Un dominio che non ha un proprio indirizzo e fa affidamento su un altro dominio per queste informazioni
CNAME
-
Server di posta
MX
-
-
Linux prevede una funzionalità chiamata bridging: cosa fa e come può esserti utile?
Un bridge collega più interfacce di rete. Tutte le interfacce connesse a un bridge possono comunicare come se fossero connesse alla stessa rete link layer: tutti i dispositivi utilizzano indirizzi IP della stessa sottorete e non richiedono un router per connettersi tra loro.
-
Quale opzione deve essere passata al comando
ss
per visualizzare tutti i socket UDP stabiliti?L’opzione
-u
mostra tutti i socket UDP stabiliti. -
Quale comando mostra un riepilogo di tutti i socket in esecuzione su un sistema Linux?
Il comando
ss -s
mostra un riepilogo di tutti i socket. -
Il seguente output è stato generato dal comando dell’esercizio precedente. Quanti socket TCP e UDP sono attivi?
Total: 978 (kernel 0) TCP: 4 (estab 0, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0 Transport Total IP IPv6 * 0 - - RAW 1 0 1 UDP 7 5 2 TCP 4 3 1 INET 12 8 4 FRAG 0 0 0
I socket TCP e UDP attivi sono 11.