In questi giorni mi
sono trovato ad affrontare e gestire presso un cliente un problema di configurazione
che vorrei condividere con voi.
Da richiesta del
cliente, il sistema deve prevedere un accesso WiFi separato per SSID, ad ogni
SSID deve essere associata una VLAN e ad ogni VLAN deve corrispondere una
classe ip assegnata via DHCP.
Nella prima parte
della configurazione vedremo come creare un sistema WiFi multi ssid in VLAN.
Per prima cosa dobbiamo accertarci (dalle specifiche del prodotto) che il
nostro AP sia in grado di lavorare in multi SSID. In questo esempio useremo
degli AP Cisco 1242 AG.
Le configurazioni che
seguono fanno riferimento a questo specifico apparato, ma con poche modifiche
posso essere adattate a qualsiasi (o quasi) apparato.
[Creazione SSISD e
VLAN - Access Point]
Per prima cosa
abilitiamo il multi ssid in configuration mode :
dot11 mbssid
Creiamo gli SSID :
dot11 ssid
Managment
vlan 1
authentication
open
authentication key-management
wpa
wpa-psk ascii
Managment
!
dot11 ssid
Terminalini
vlan 12
authentication
open
authentication
key-management wpa
wpa-psk ascii
Terminalini
!
dot11 ssid
SmartPhone
vlan 11
authentication
open
authentication
key-management wpa
mbssid guest-mode
wpa-psk ascii SmartPhone
In questo esempio ho
creato 3 SSID associati alle vlan 1,11 e 12 con autenticazione WPA (che
chiaramente puo' essere sostituita a seconda delle esigenze).
Lo SSID Managment sarà
l'unico su cui abiliteremo il lIvello 3 in modo da poter ragguingere l'AP via
http, ssh o telnet per operazioni di
managment.
Ora possiamo procedere
con la configurazione della interfaccia Radio 0 :
interface
Dot11Radio0
no ip address
no ip
route-cache
!
encryption vlan
1 mode ciphers tkip
!
encryption vlan
11 mode ciphers tkip
!
encryption vlan
12 mode ciphers tkip
!
ssid Terminalini
!
ssid SmartPhone
!
ssid Managment
!
station-role root
!
In questo modo abbiamo
informato l'interfaccia Radio di quali SSID deve prendersi carico e sul tipo di
encryption da utilizzare per le VLAN interessate.
Ora dobbiamo separare
il traffico tra le diverse VLAN e dobbiamo fare in modo che la parte WiFi possa
parlare con la parte Wired. Per fare questa operazione dobbiamo creare delle
sotto- interfacce sia a livello radio sia a livello ethernet. L'anello di
congiunzione tra le sotto-interfacce radio e quelle Ethernet sarà il
Bridge-Group.
Creiamo i bridge group
:
bridge 1 protocol ieee
bridge 2 protocol ieee
bridge 3 protocol ieee
A questo punto
possiamo creare le sotto interfacce e le relative VLAN :
!
interface
Dot11Radio0.1
description
"Managment - VLAN 1 - NO DHCP"
encapsulation
dot1Q 1 native
no ip route-cache
bridge-group 1
!
interface
Dot11Radio0.2
description
"SmathPhone - vlan 11 - dhcp"
encapsulation
dot1Q 11
no ip
route-cache
bridge-group 2
!
interface
Dot11Radio0.3
description
"terminalini - vlan 12 - dhcp"
encapsulation
dot1Q 12
no ip route-cache
bridge-group 3
!
Le VLAN vengono
associate alle sotto- inferfacce con in comando encapsulation dot1Q
!
interface
FastEthernet0.1
encapsulation
dot1Q 1 native
no ip
route-cache
bridge-group 1
no bridge-group
1 source-learning
bridge-group 1
spanning-disabled
!
interface
FastEthernet0.2
description
"SmartPhone - vlan 11 - dhcp"
encapsulation
dot1Q 11
no ip
route-cache
bridge-group 2
no bridge-group
2 source-learning
bridge-group 2
spanning-disabled
!
interface
FastEthernet0.3
description
"Terminalini - vlan 12 - dhcp"
encapsulation
dot1Q 12
no ip
route-cache
bridge-group 3
no bridge-group
3 source-learning
bridge-group 3
spanning-disabled
Come si puo' vedere
dalla configurazione le sotto- interfacce radio e Fastethernet sono legate tra
loro attraverso i bridge Group.
Non ci resta che
abilitare il livello 3 sul Bridge 1 in modo da garantirci l'accesso IP al
nostro AP.
!
interface BVI1
ip address
192.168.1.10 255.255.255.0
no ip
route-cache
!
L'interfaccia BVI è
legata al Bridge attraverso il numero. Quindi, in questo caso, la BVI 1 sarà
legata al bridge-Group 1.
L'utlimo passaggio per
rendere il nostro AP operativo è legato al tipo di connessione con lo switch di
accesso. Per abilitare il transito delle VLAN, sarà necessario configurare il
trunk sulla porta dello switch su cui è connesso l'AP.
interface
GigabitEthernet1/0/11
switchport trunk
encapsulation dot1q
switchport trunk
allowed vlan 1,11,12
switchport mode
trunk
[DHCP SERVER - DHCP SCOPE - DHCP Agent Relay]
Una volta terminata la
programmazione degli AP resta un altro nodo da sciogliere: dobbiamo preoccuparci di assegnare il Livello
3 (ip, dns, gateway, .....) agli apparati connessi sugli AP, separando le
classi IP a seconda della VLAN, utilizzando il nostro server DHCP posizionato
sulla VLAN 1.
In questo scenario
tutti i client su VLAN diverse da 1 non
riceveranno mai alcuna offerta dal DHCP server perchè sono posizionati su
domini di broadcast differenti.
Una soluzione
possibile potrebbe essere quella di inserire dei server DHCP all'interno dei
singoli domini di broadcast definiti dalle diverse VLAN, ma come potete
immaginare la gestione diventerebbe complicata e, in alcuni scenari complessi,
ingestibile.
Un’ altra soluzione
(adottata in questo articolo) è quella di utilizzare dei server DHCP Lite,
chiamati Agent Relay, posizionati all'interno di ogni dominio di broadcast e di
definire sui nostri server DHCP degli scope dedicati ai singoli domini di
brodcast.
Un Agent Relay (http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol#DHCP_Relaying) è a tutti gli effetti
un server DHCP, ma non è in grado di assegnare direttamente un Livello 3 ai
client. Il suo compito è quello di intercettare le richieste DHCP (0.0.0.0 -
255.255.255.255) prenderle in carico e di rigirarle (proxy) al sever DHCP.
Prima di rigirare la richiesta, l'agent relay opera alcune modifiche
sostituendo 0.0.0.0 con il suo indirizzo IP e il 255.255.255.255 con
l'indirizzo IP del server DHCP (ho semplificato molto per rendere il processo
comprensibile anche senza particolari conoscenze di networking) e trasforma la
richiesta in unicast (http://en.wikipedia.org/wiki/Unicast ) così da poterla
inviare direttamente al server DHCP. Il server DHCP recupera la Network ID
dall'indirizzo del relay agent, consulta se esiste uno scope dedicato a quella
network ed invia le info al Relay Agent il quale risponde al client che ne ha
fatto richiesta chiudendo il cerchio.
Bene, a questo punto
vediamo nel dettaglio come costruire questa seconda parte.
Per prima cosa
definiamo gli scope sul nostro server DHCP. Nel mio caso ho utilizzato un
server Windows 2012, ma è possibile utilizzare qualsiasi apparato attivo che
supporti il DHCP Server. All'interno dello scope andremo a definire tutti i
parametri di livello 3 da inviare ai client che ne faranno richiesta. Questa
operazione va fatta per ogni VLAN a cui desideriamo assegnare una Classe Ip
specifica. Nel nostro caso avremo due scope: uno per la VLAN 11 e uno per la
VLAN 12.
Definiti gli scope,
creiamo gli Agent Relay. Usero' per questa operazione uno switch di accesso Cisco
3750. Prima di entrare nel merito della programmazione, dobbiamo ancora
rispondere ad una domanda: dove posizioniamo l’ Agent Relay ?
L'unica certezza che
posso darvi è che l' Agent Relay e i client devono trovarsi sullo stesso
dominio di broadcast. Il suo posizionamento è legato a fattori specifici
tecnici e politici della rete in cui si lavora. Quindi, ad esempio, volendo
utilizzare gli switch come agent relay, potremmo posizionalo su uno switch di
accesso o di distribuzione o di core.
In uno scenario
standard, forse e ripeto forse (è una mia personale considerazione), il posizionamento su uno switch di core
sarebbe preferibile.
Bene, riprendiamo il
nostro cacciavite in mano e proseguiamo con le configurazioni :
in configurazione
generale definiamo le due vlan :
vlan 11
name SmartPhone
!
vlan 12
name Terminalini
!
Definiamo adesso il
Livello 3 per le VLAN ed abilitiamo due agent relay (uno per ogni vlan) :
interface Vlan11
description
"ReLay Agent - VLAN 11 - DHCP 192.168.11.x"
ip address
192.168.11.251 255.255.255.0
ip
helper-address 10.168.1.45
!
interface Vlan12
description
"ReLay Agent - VLAN 12 - DHCP 192.168.12.x"
ip address
192.168.12.251 255.255.255.0
ip
helper-address 10.168.1.45
!
Vediamo nel dettaglio,
analizzando solo la VLAN 12 :
Creiamo un interfaccia
virtuale per la VLAN 12.
interface Vlan12
Alziamo il livello 3
sulla interfaccia virtuale :
ip address 192.168.12.251 255.255.255.0
Questo sarà
l'indirizzo che verrà inviato al server DHCP come source da parte dell'agent
relay, dal quale verrà ricavato il networkID (192.168.12.0) usato dal DHCP
server per identificare lo scope relativo.
Abilitiamo l'Agent Relay :
ip helper-address 10.168.1.45
L'indirizzo IP
inserito qui è l'indirizzo IP del server DHCP, in questo modo l'agent relay
potrà operare una richiesta unicast contattando direttamente il server DHCP.
A questo punto, tutti
i client WiFi autenticati sulla VLAN 12 e/o sulla VLAN 11 riceveranno i dati
per lo scope dedicato.
[SICUREZZA -
VERTICALIZZAZIONE]
L'ultimo aspetto che
affronteremo in questo articolo è legato alla sicurezza e alla
verticalizzazione nella assegnazione degli indirizzi IP. Come abbiamo visto
finora, l'agent relay si preoccupa solo di modificare Source e Destination e il
server DHCP ha solo il source IP come elemento per poter decidere quale scope
utilizzare e quali paramentri assegnare.
Lo standard che
definisce il DHCP Agent Relay (https://www.ietf.org/rfc/rfc3046.txt) prevede anche la
possibilità di aggiungere altre informazioni alla richiesta inviata al server
DHCP. Questa future si chiamata Relay Agent Information Option, meglio
conosciuta come Option 82 (82 è il codice della Option, vedi RFC per i
dettagli).
Una trattazione
esaustiva di questa future richiederebbe un sessione dedicata, diciamo solo che
grazie alla Option 82 possiamo creare delle policy all'interno degli scope per
suddividere gli IP e le impostazioni da assegnare ai singoli client.
In questo articolo mi
limiterò a descrivervi come abilitarla e come utilizzarla per uno scopo ben
preciso: riconoscere il mio l'agent relay.
Per prima cosa
abilitiamo la future sull'agent relay :
A livello di
interfaccia inseriamo questo comando per abilitare la Option 82
ip dhcp relay information option-insert;
Sempre a livello di
interfaccia inseriamo la option desiderata :
ip dhcp relay information option subscriber-id
Terminalini
N.B.: la subscriber-id
è successiva alla definizione dell'RFC; le specifiche le trovate qui http://tools.ietf.org/html/draft-ietf-dhc-subscriber-id-03
Il risultato finale
sarà :
interface Vlan11
description
"ReLay Agent - VLAN 11 - DHCP 192.168.11.x"
ip dhcp relay
information option subscriber-id SmartPhone
ip dhcp relay
information option-insert
ip address
192.168.11.101 255.255.255.0
ip
helper-address 10.168.1.45
!
interface Vlan12
description
"ReLay Agent - VLAN 12 - DHCP 192.168.12.x"
ip dhcp relay
information option subscriber-id Terminalini
ip dhcp relay
information option-insert
ip address
192.168.12.251 255.255.255.0
ip
helper-address 10.168.1.45
!
Bene, a questo punto
non ci resta che definire una policy sul nostro server DHCP.
La policy che ho
creato serve solo ad essere sicuro che la richiesta provenga da uno specifico Agent-relay,
ma nulla ci vieta di creare più policy all'interno dello stesso scope per
assegnare parametri diversi a host differenti all'interno dello stesso dominio
di broadcast.
N.B.: la subscriber-id
prevede come parametro un valore stringa a nostra libera scelta. Nella
definzione degli agent- relay abbiamo usato :
ip dhcp relay information option
subscriber-id SmartPhone
....
ip dhcp relay
information option subscriber-id Terminalini
In windows il valore
va inserito in esadecimale e non in formato testo. Quindi bisogna prima
convertire la stringa in HEX e poi incollarla nel campo relativo della policy.
Se non fate questa operazione, la policy non verrà metchata e quindi i client
non riceveranno il livello 3.
Ad esempio la parola
SmartPhone in Hex diventa: 536d61727450686f6e65
Con questa ultima
parte ho terminato. Spero che la lettura sia stata di vostro gradimento.
G.