Per la configurazione di partenza del serverino che opera da gateway/router e firewall, faccio riferimento al mio serverino di casa: Si tratta di una installazione di Debian 6 64bit su cpu ATOM con una mobo dual-Lan configurata per operare come gateway/firewall.
Per aggiungere il supporto alle VLAN al server Linux e renderlo quindi in grado di discriminare il traffico dotato di un TAG, è sufficiente installare il pacchetto "vlan" con apt e aggiungere il modulo “8021q” all'elenco dei moduli contenuto nel file “/etc/modules” con i seguenti comandi:
codice:
sudo apt-get install vlan
sudo echo 8021q >> /etc/modules
In modo che il modulo sia ricaricato automaticamente al riavvio. Per attivare il supporto a questo protocollo senza riavviare, è sufficiente caricare a mano il modulo con il comando:
codice:
sudo modprobe 8021q
Riassumendo velocemente, quando si usano le VLAN i pacchetti che transitano sulla rete vengono marcati con un “id” denominato VID (Vlan ID) che identifica l' appartenenza alla specifica VLAN.
Il valore del “id” o “tag” può variare tra 0 e 4095 ma i due estremi sono riservati quindi il “tag” avrà un valore compreso tra 1 e 4094. Ho letto che solitamente il “VID” 1 viene riservato a scopi amministrativi ma mi risulta essere una consuetudine piuttosto che un obbligo. Inoltre, sempre per consuetudine, è frequente che venga l'utilizzato come “VID” un identificativo che richiami la configurazione di rete esistente: Nel mio caso, userò come “VID” un valore che richiami la classe di IP della rete associata alla VLAN.
Avviso che, mentre di fanno i primi test, è molto facile finire per tagliarsi fuori dal server, situazione non molto comoda se il server è “headless” (senza monitor ne tastiera) o in fisicamente in una posizione scomoda, quindi consiglio molta attenzione...
In questa guida si trovano alcune istruzioni su come configurare le vlan sul server usando il comando “vconfig“.
In alternativa è possibile procedere modificando manualmente il file "/etc/network/interfaces" per aggiungere delle nuove interfacce di rete virtuali associate alle VLAN ed io preferisco procedere in questo secondo modo. La mia configurazione originale per la sola interfaccia di rete eth1 (inside) prevede questo:
codice:
matteo@server:~$ sudo ifconfig
eth0 Link encap:Ethernet HWaddr 00:25:90:35:6b:7a
inet addr:192.168.50.2 Bcast:192.168.50.255 Mask:255.255.255.0
inet6 addr: fe80::225:90ff:fe35:6b7a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:456227615 errors:0 dropped:0 overruns:0 frame:0
TX packets:507576434 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:266927082174 (248.5 GiB) TX bytes:143666480259 (133.7 GiB)
Interrupt:16 Memory:feae0000-feb00000
eth1 Link encap:Ethernet HWaddr 00:25:90:35:6b:7b
inet addr:192.168.200.1 Bcast:192.168.200.255 Mask:255.255.255.0
inet6 addr: fe80::225:90ff:fe35:6b7b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:142454788 errors:0 dropped:63 overruns:0 frame:0
TX packets:295264552 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:21841295703 (20.3 GiB) TX bytes:413736636979 (385.3 GiB)
Interrupt:17 Memory:febe0000-fec00000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:571659 errors:0 dropped:0 overruns:0 frame:0
TX packets:571659 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:84261853 (80.3 MiB) TX bytes:84261853 (80.3 MiB)
Per la scheda di rete "inside", la configurazione in "/etc/network/interfaces" prevede questo:
codice:
[...]
# Scheda di rete secondaria - Inside -
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.200.1
netmask 255.255.255.0
dns-search fracassetti.lan
broadcast 192.168.200.255
A cui devo semplicemente aggiungere di seguito la configurazione che definisce le interfacce virtuali che cui fanno capo le VLAN:
codice:
# Scheda di rete secondaria - VLAN Wi-Fi -
auto eth1.150
allow-hotplug eth1.150
iface eth1.150 inet static
address 192.168.150.1
netmask 255.255.255.0
dns-search fracassetti.lan
broadcast 192.168.150.255
vlan_raw_device eth1
# Scheda di rete secondaria - VLAN Wi-Fi Ospiti -
auto eth1.100
allow-hotplug eth1.100
iface eth1.100 inet static
address 192.168.100.1
netmask 255.255.255.0
broadcast 192.168.100.255
Le nuove interfacce di rete, ad eccezione della denominazione che è nel formato “device.vlanid” (eth1.150 o eth1.100), sono configurate come se fossero schede fisiche normalissime con il loro IP ed i loro parametri di rete. Il valore che segue il "." nella denominazione è appunto il VID della rete.
Ho quindi configurato delle interfacce associate alle VLAN cui appartengono il vid “100” (eth1.100) e “150” (eth1.150): Nella configurazione della eth1.150 ho specificato anche il parametro “vlan_raw_device eth1” che indica al sistema che l'interfaccia virtuale con VID 150 si appoggia al device hardware “eth1”. Non è un parametro obbligatorio, la configurazione (a meno che non si usi un alias per definire le interfacce come nella guida linkata in precedenza) funziona perfettamente anche senza questa indicazione,
- L'interfaccia eth1 è la mia rete cablata o “wired” lato inside;
- L'interfaccia eth1.150 sarà la VLAN associata alla mia rete Wi-Fi ad accesso controllato. Dato che farà parte della mia rete privata “inside” ho specificato il parametro “dns-search fracassetti.lan”.
- L'interfaccia eth1.100 sarà la VLAN associata alla mia rete Wi-Fi ad accesso libero;
Per applicare la configurazione, si può riavviare il server oppure utilizzare i comandi:
codice:
matteo@server:~$ sudo ifup eth1.150 && sudo ifup eth1.100
Set name-type for VLAN subsystem. Should be visible in /proc/net/vlan/config
Added VLAN with VID == 150 to IF -:eth1:-
Set name-type for VLAN subsystem. Should be visible in /proc/net/vlan/config
Added VLAN with VID == 100 to IF -:eth1:-
per attivare le interfacce di rete, verificando il risultato con il comando:
codice:
matteo@server:~$ sudo cat /proc/net/vlan/config
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth1.150 | 150 | eth1
eth1.100 | 100 | eth1
oppure semplicemente:
codice:
matteo@server:~$ sudo ifconfig
eth0 Link encap:Ethernet HWaddr 00:25:90:35:6b:7a
inet addr:192.168.50.2 Bcast:192.168.50.255 Mask:255.255.255.0
inet6 addr: fe80::225:90ff:fe35:6b7a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:456230582 errors:0 dropped:0 overruns:0 frame:0
TX packets:507580719 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:266927462524 (248.5 GiB) TX bytes:143666875867 (133.8 GiB)
Interrupt:16 Memory:feae0000-feb00000
eth1 Link encap:Ethernet HWaddr 00:25:90:35:6b:7b
inet addr:192.168.200.1 Bcast:192.168.200.255 Mask:255.255.255.0
inet6 addr: fe80::225:90ff:fe35:6b7b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:142454971 errors:0 dropped:63 overruns:0 frame:0
TX packets:295264690 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:21841326378 (20.3 GiB) TX bytes:413736671508 (385.3 GiB)
Interrupt:17 Memory:febe0000-fec00000
eth1.100 Link encap:Ethernet HWaddr 00:25:90:35:6b:7b
inet addr:192.168.100.1 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fe80::225:90ff:fe35:6b7b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:468 (468.0 B)
eth1.150 Link encap:Ethernet HWaddr 00:25:90:35:6b:7b
inet addr:192.168.150.1 Bcast:192.168.150.255 Mask:255.255.255.0
inet6 addr: fe80::225:90ff:fe35:6b7b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:468 (468.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:571716 errors:0 dropped:0 overruns:0 frame:0
TX packets:571716 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:84270000 (80.3 MiB) TX bytes:84270000 (80.3 MiB)
Questa configurazione prevede due reti VLAN ed un rete non taggata. L'interfaccia del server ha quindi una configurazione "ibrida" in quanto trasporta sia pacchetti taggati che pacchetti privi di tag.
Questa configurazione è stata adottata per evitare di dover riconfigurare i pc client connessi alla rete cablata per aggiungere alla configurazione il supporto alle VLAN, che come detto non è scontato siano dotati del supporto necessario.
Questa configurazione da sola sarebbe una porcheria inutile, in quanto un qualunque dispositivo con la corretta configurazione IP impostata staticamente e connesso alla rete open potrebbe accedere tranquillamente alla risorse sulla rete cablata e sulla rete wireless privata, vanificando tutto il lavoro: Il mezzo fisico di trasmissione e accesso alla rete è infatti lo stesso e non supporta le VLAN (mi riferisco allo switch netgear) quindi finisce per mischiare tutti i pacchetti in un'unica orgia TCP/IP che si propaga per tutta la rete.
A questa mancanza, è possibile ovviare con sufficiente efficacia lavorando sulla configurazione del firewall sul router.