VLAN

Da GolemWiki.
Achtung: quanto segue fa parte di una sperimentazione per la rete di Officina
attualmente non utilizzata

VLAN = Virtual LAN, insieme di tecnologie che permettono di suddividere una rete basata su switch, in più reti logicamente non comunicanti tra loro, ma che condividono la stessa infrastruttura fisica. (riadattato da Wikipedia)

Noi creeremo due VLAN (interna = #1 = LAN locale ed esterna = #2 = verso il ponte radio). I membri di una VLAN non possono comunicare con quelli dell'altra VLAN (le informazioni trasmesse vengono automaticamente taggate dallo switch con l'ID della VLAN di partenza). I membri di entrambe le VLAN (per noi l'OlinuXino) devono taggare manualmente i pacchetti per notificare allo switch su quale VLAN indirizzarli.

Indice

Piano d'azione

Poiché OLinuXino ha una sola scheda di rete fisica, si configura lo switch per supportare due VLAN (Virtual LAN) (isolate fra loro: come fossero LAN gestite da due switch diversi, ndr).

  • VLAN#1 - Antenna WLAN e porte ethernet LAN fanno parte della VLAN interna
  • VLAN#2 - Il ponte radio fa parte della VLAN esterna

OLinuXino appartiene ad entrambe e funge da router di collegamento. OLinuXino sarà sicuramente anche il gateway predefinito per le macchine della VLAN#1, ed anche il loro server DNS. Inoltre, farà anche da server DHCP.

OLinuXino dovrà gestire le due VLAN. Anche se ha una sola scheda di rete fisica, esso è cosciente dell'esistenza delle due VLAN, perciò si "sdoppia" la scheda di rete fisica in due schede virtuali, una per ogni VLAN.

Configurazione VLAN su switch

Switchone-config.jpeg
  • Creazione due VLAN:
    • ID #1 - interno
    • ID #2 - esterno
  • Si imposta per ogni porta il PVID (Port VLAN IDentifier), ossia si informa lo switch a quale delle due VLAN appartiene la porta per default. Le porte dalla 1 alla 21 hanno PVID #1 (danno verso l'interno), dalla 22 alla 24 hanno PVID #2 (danno verso l'esterno).
  • Poi si imposta la porta 22 sia come membro della VLAN #2 (lo è già per default) che per la VLAN #1. Per default si ha che la porta 22 è:
    • untagged per la VLAN #2 (informazioni non taggate vengono riportate sulla VLAN #2);
    • tagged per la VLAN #1 (ossia per spedire informazioni sulla VLAN #1 l'OlinuXino dovrà saperle taggare);
  • Lo stesso si è fatto per la 23, ma al momento è inutilizzata.

Configurazione OLinuXino

VLAN

Installare il pacchetto vlan

# apt-get install vlan

Abilitare il modulo per il protocollo 8021q e inserirlo per il caricamento all'avvio.

Nota: questo non è necessario sul nostro OLinuXino, perché il modulo è linkato staticamente.

# modprobe 8021q
# echo 8021q >> /etc/modules

Configurare il file /etc/network/interfaces

# VLAN 2 - Untagged. Prendi il DCHP dalla rete esterna
auto eth0
iface eth0 inet dhcp
# VLAN 1 - Bisogna taggare. Mi dò un IP statico
auto eth0.1
iface eth0.1 inet static
address 192.168.5.10
netmask 255.255.255.0
vlan-raw-device eth0

La dicitura eth0.1 indica la VLAN 1, che è raggiungibile fisicamente attraverso eth0.

In breve: l'OlinuXino, come detto prima, deve saper taggare i pacchetti per poter dialogare contemporaneamente con l'interno e con l'esterno. Ora, poiché la porta dove è connesso (22) è untagged per VLAN #2 ciò che lui butta in rete va di per sé verso tale VLAN (l'esterno). Per la VLAN #1 invece l'informazione deve essere taggata, da qui la seconda parte del file interfaces.

DHCP Server

L'OLinuXino si deve occupare di assegnare gli indirizzi IP sulla rete interna VLAN 1. Poiché si dovrà occupare anche di rispondere alle richieste DNS provenienti dalla rete interna VLAN 1, installiamo dnsmasq, che fa tutto lui.

# apt-get install dnsmasq

Modifichiamo /etc/dnsmasq.conf:

# Accettare le richieste solo su questa interfaccia di rete
interface=eth0.1
# Assegnare gli indirizzi IP di questo intervallo
dhcp-range=192.168.5.101,192.168.5.254,12h

Automaticamente, ai computer che richiedono un indirizzo IP, viene anche comunicato anche:

  • Indirizzo del gateway (OLinuXino)
  • Indirizzo del server DNS (OLinuXino)

Se questi servizi non risiedono sull'OLinuXino, spulciare dnsmasq.conf per modificare questo comportamento (a noi non interessa).

DNS Server

Lo fa già da sé, ma nel file dnsmasq.conf decommentiamo anche queste due linee per non far uscire inutilmente query DNS che non potranno essere risolte da nessuno:

domain-needed
bogus-priv

Squid

Installare Squid per tenere una copia di tutto il traffico HTTP, che a questo punto passa attraverso l'OLinuXino.

# apt-get install squid3

Vedere Squid.

Firewall

Script per il firewall, per mandare i pacchetti sulla 80 (HTTP) a Squid, e gli altri direttamente fuori.

#!/bin/sh
# Squid server IP
SQUID_SERVER="192.168.5.10"

# Interface connected to Internet
INTERNET="eth0"

# Interface connected to LAN
LAN_IN="eth0.1"

# Squid port
SQUID_PORT="3128"

# Clean old firewall
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Load IPTABLES modules for NAT and IP conntrack support
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_nat
modprobe ipt_MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

# Set this system as a router for rest of LAN
iptables -t nat -A POSTROUTING -o $INTERNET -j MASQUERADE

# DNAT port 80 request coming from LAN systems to squid 3128 ($SQUID_PORT), aka transparent proxy
iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT
iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT

Bibliografia

Strumenti personali