Vlan (reti), 03-12-22


Lezione estremamente densa di contenuti, in cui è stato spiegato il concetto di VLAN e applicato in laboratorio. Potete contattarmi alla mia e-mail se trovate errori.

Il concetto che sta alla base delle VLAN è rendere indipendenti la struttura fisica e la struttura logica di una rete. La topologia fisica e la topologia logica possono quindi essere configurate diversamente, in modo indipendente. In questo modo, se si ha una rete configurata in un certo modo a livello fisico, posso configurarla logicamente nel modo che voglio proprio grazie alle VLAN. E' un modo per suddividere i compiti durante la configurazione nel mondo reale di una rete.

La configurazione di VLAN è utile quando si hanno delle reti "collassate" a livello fisico ma che devono essere suddivise a livello logico. Non sempre è necessario farlo, ma soltanto quando è necessario.

Si vogliono suddividere i domini di broadcast di host connessi allo stesso switch.

Un requisito necessario è l'avere dei dispositivi di livello 2 configurabili: si dice allo switch/bridge a quale VLAN inoltrare i pacchetti. Si può immaginare che ciascuna porta sia associata a una o più VLAN \(\rightarrow\) quando allo switch arriva un pacchetto riesce a capire a quale VLAN è destinato!

Per implementare questo tipo di funzionalità, si può lavorare in modi diversi, in base al livello dello stack in cui ci si "posiziona". Vediamo ora come si può simulare la configurazione di una VLAN: \(\downarrow\)

Si realizza la configurazione in figura, facendo attenzione alle porte a cui vengono collegati i cavi. Ci si ricordi anche di spuntare "show VDE terminal" durante la creazione dello swtich.

In questo caso usiamo IP per assegnare due indirizzi all'interfaccia eth0 del router. Ci si deve ricordare anche di abilitare l'ip forwarding. Per il resto, gli altri host si configurano normalmente.

Attivare l'intefaccia di rete usando

root@router:~# ip link set dev eth0 up

Per poter comunicare correttamente a livello 3 è necessario aggiungere le regole di routing ai vari host, nonostante essi possano "parlarsi" anche a livello 2, essendo connessi allo stesso switch.

Infatti il comando ping per prima cosa controlla se esiste una regola nella tabella di routing per inviare i pacchetti, nel caso in cui non ci sia, viene ritornato un messaggio di errore!

Proviamo ora a posizionarci su H1 e usare il seguente comando:

ping 192.168.2.1

si riceve la seguente risposta:

From 192.168.1.254: icmp_seq=2 Redirect Host (New nexthop: 192.168.2.1)

Si tratta di un pacchetto ICMP che indica l'individuazione di un "path" più breve per raggiungere il target indicato. Infatti i due host sono connessi anche a livello 2! Ce ne si può rendere conto usando arping, che usa il protocollo ARP per inviare pacchetti a tutti gli host connessi alla rete locale.

arping -i eth0 192.168.2.1

A tal proposito, ecco alcuni comandi utili:

  • ip route \(\rightarrow\) fornisce le regole configurate staticamente;

  • ip route get 192.168.2.1 --> fornisce anche informazioni

memorizzate in cache per il raggiungimento dell'host indicato! Infatti il messaggio ICMP accennato prima viene "cachato" in memoria. Ecco l'output del comando: \(\Downarrow\)

root@H1:~# ip route get 192.168.2.1
192.168.2.1 via 192.168.2.1 dev eth0  src 192.168.1.1 
    cache <redirected> 

Nel caso sia utile, ricordiamo che si può dire ad H1 che può comunicare con H2 usando il protocollo H2N, usando ad esempio il seguente comando: \(\Downarrow\)

route add -host 192.168.2.1 dev etho

Si possono usare i seguenti comandi per resettare il router, se non si vuole spegnere la VM (utili in sede d'esame):

ip addr del dev eth0 192.168.1.254/24
ip addr del dev eth0 192.168.2.254/24
ip link set dev eth0 down

Configurazione permanente del router \(\downarrow\)

auto etho 
iface eth0 inet static
  address 192.168.1.254/24
  # alternativa senza alias:
  # post-up ip addr add dev eth0 192.168.2.254/24
  
iface eth0:1 inet static
  address 192.168.2.254/24

Per configurare più indirizzi IP sulla stessa interfaccia usando ifconfig si usa questo "trucco" che fa uso di alias:

ifconfig eth0 192.168.1.254/24
ifconfig eth0:1 192.168.2.254/24

Il fatto che H1 e H2 possano comunicare a livello 2 è un problema a livello di sicurezza, ed è per questo che entrano in gioco le VLAN!

  • Access Link \(\rightarrow\) si agisce soltanto sullo switch, senza agire sugli host. Le lan sono identificate da un'intero: si crea un mapping Network \(\rightarrow\) \(ID_{vlan}\)

Per creare una vlan con identificativo = 10 (arbitrario), si usa il seguente comando:\(\Downarrow\)

vlan/create 10

Bisogna poi aggiungere le porte dello switch alla lan con identificativo 10:

port/setvlan 1 10
port/setvlan 3 10

Con questo comando si stampa l'attuale configurazione dello switch:

vlan/print

Ora se ci si posiziona su H1 e si prova ad usare:

arping -i eth0 192.168.2.1

vediamo che lo switch manda delle richieste ARP soltanto alla porta 3. Si può constatare anche controllando le lucine dello swtich (si illuminano ad intermittenza soltanto la \(1^o\) e la \(2^o\)). Se ci si posiziona sul router e si usa tcpdump, si vedono i pacchetti ARP inviati da H1. Il router ovviamente non risponde a queste richieste dato che il target non è lui.

Ora configuriamo la seconda vlan:

vlan/create 20
port/setvlan 2 20

\(\Rightarrow\) problema: H2 non può comunicare con il router, dato che si trovano su vlan diverse. \(\Rightarrow\) Possibile soluzione ("naive"):

port/setvlan 3 20

in questo modo sposto il problema dall'altra parte: ora il router non può più comunicare con H1. Questo perchè nelle vlan access link non possono essere associate diverse VLAN alla stessa porta dello switch. Per risolvere questo problema si usano le VLAN tagged \(\Downarrow\)

Nel frame ethernet viene aggiunto un campo di 12 bit (tag) che identifica la VLAN a cui il pacchetto ethernet è destinato.

Con questo comando inserisco la porta 3 all'interno della vlan 20, usando una configurazione con i tag!

  • tagged = 1 \(\rightarrow\) se sulla porta 3 lo switch riceve un frame con estensione(quindi ha il tag della vlan), allora viene inoltrato alla VLAN 20. Se sulla porta 3 riceve un pacchetto non taggato allora esso viene associato alla VLAN 10.

  • Esempio: un pacchetto broadcast non taggato arriva sulla porta 2, e deve essere inoltrato sulla porta 3 che lavora con logica tagged. \(\rightarrow\) lo switch modifica il frame ethernet prima di inoltrarlo, in modo da mandare un pacchetto compatibile con la porta!

auto eth0 eth0.20

iface eth0 inet static
  address 192.168.1.254/24
  
iface eth0.20 inet static
  address 192.168.2.254/24