sabato 25 luglio 2015

Assegnare IP statico a client OpenVPN

Se utilizzare OpenVPN, prima o poi vi capiterà di imbattervi nella necessità di mettere in piedi una configurazione con assegnamento statico degli indirizzi IP dei client. L'operazione risulta semplice anzi banale a patto di conoscere i comportamenti bizzarri di alcuni client.
Tra questi non poteva mancare Windows che in quanto ad anomalie non ci lascia mai a bocca asciutta.
Prima di iniziare rammentiamo alcuni concetti di base:
  1. tutte le configurazioni OpenVPN sono di tipo Client-Server;
  2. anche le VPN Site to Site sono di tipo Client-Server;
  3. quando parliamo di IP del client ci stiamo riferendo all'IP del tunnel stabilito tra client e server.
Sebbene siano nozioni scontate è bene rinfrescarle perchè spesso ci si dimentica che anche una connessione tra due firewall pfSense o più in generale tra due gateway deve essere configurata come client-server e che al nostro client non verrà mai assegnato un IP della subnet locale del server.

Per poter assegnare un indirizzo IP statico ad un client è necessario:
  1. poterlo individuare con certezza;
  2. che non esistano due client che si presentino con lo stesso nome.
L'unico modo per farlo è utilizzare connessioni OpenVPN con certificati dove ogni client è idenificato da un certificato con CN univoco e soprattutto usato per una sola installazione. 

Se non sapte come fare vi consiglio di legere prima l'articolo "Configurare penVPN server su pfSense"

A questo punto assumiamo:
  1. di aver configurato correttamente server e client;
  2. di aver creato due certificati client: MILANO e ROMA;
  3. di aver scelto come subnet per il tunnel 10.0.0.0/24;
Per poter assegnare un IP statico alle due connessioni occorre effettuare la seguente configurazione sul server.
Accediamo a VPN > OpenVPN > Client Specific Overrides

In questa sezione dovremo creare un override per ogni client a cui vogliamo assegnare un IP statico

Per ogni Overrides dovremo indicare il Common Name (es: MILANO), e nel campo advanced riportare l'IP che intendiamo assegnare con il comando

ifconfig-push 10.0.0.6 10.0.0.1

Questo comando andrà a specificare al client che si presenta con il CN MILANO che il suo indirizzo dovrà essere 10.0.0.6 e che il gateway sarà 10.0.0.1.

Questa configurazione però non funziona per tutti i client, nello specifico i client per windows che fanno uso del driver TAP-WIN32 le subnet utilizzate tra client e server devono essere delle /30 (255.255.255.252)
Questo comporta una serie di cose:
  1. Per ogni client verranno bruciati 4 IP;
  2. Se state usando un tunnel /24 come nel nostro esempio avrete a disposizione un massimo di 64 connessioni OpenVPN;
  3. Occorre conoscere le subnet valide per assegnare correttamente gli IP ai client.
I primi due punti sono dati di fatto e non ci si può fare nulla, per il terzo se non avete dimestichezza con il calcolo delle subnet vi può vnire in aiuto direttamente il client OpenVPN di windows.
Digitando da riga di comando quanto segue, il client vi stamperà a video tutte le possibili subnet valide.

openvpn --show-valid-subnets

Il risultato sarà una tabella simile a questa

[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]

La tabella va interpretata in questo modo: l'IP più basso è l'indirizzo del gateway (10.0.0.5) l'IP più alto quello del client (10.0.0.6)

Quindi la configurazione per un client windows dowrà essere la seguente

ifconfig-push 10.0.0.6 10.0.0.5

Prima vi ho detto che ogni connessione brucia 4 IP ma ora ne abbiamo usati solo 2, quindi che fine hanno fatto gli IP non presenti nella lista? 
La risposa è molto semplice, se abbiamo delle subnet /30 occorre ricordare che gli IP in gioco sono 4 e nel nostro sempio sono così distribuiti:
  • 10.0.0.4 = Identifica la subnet
  • 10.0.0.5 = Primo host disponibile (sempre il server)
  • 10.0.0.6 = Secondo host disponibile (sempre il client)
  • 10.0.0.7 = Indirizzo di broadcast

Posta un commento