VLAN
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.
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
- 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