Configurazione con un server e tanti client ognuno dei quali ha una LAN dietro

Questa e` una configurazione che ho fatto per un cliente, ma vale la pena di conservarla qui. In questa configurazione c'e` un server centrale al quale si connettono tanti client (tutti linux) ognuno dei quali client e` un firewall che ha sotto di se` una rete locale. Le macchina delle varie reti dei vari client vedono quella dietro al server, e viceversa. Volendo e` possibile far vedere anche le reti client l'una con l'altra.

Questa configurazione usa tutta la subnet 10.64.0.0/16, dividendola cosi`: 10.64.0.0/24 viene usata per le interfacce "tun" di tutti i partecipanti (server e clients della vpn), e poi le reti 10.64.x.0/24 vengono usate per le LAN dietro ogni rispettivo client della VPN, assegnandole arbitrariamente con X che va da 1 a 255 alle varie reti.

Il limite di questa configurazione dovrebbe essere di 248 client con le relative reti, limite dato da come openvpn usa gli indirizzi della 10.64.0.0/24 per i vari client (10.64.0.1 va al server, e dal 4 al 254 vanno ai client).

Il sistema generale e` quello della rete per portatili con un concentratore descritto prima, con alcune modifiche. Specificamente, faccio uso di una CCD (client config directory) per assegnare a mia discrezione le varie subnet alle LAN dei client, basandomi sul common name per distinguerli l'uno dall'altro. Inoltre, uso la direttiva "ifconfig-pool-linear" (che dalla openvpn 2.10 cambia nome) sul server per assegnare un solo IP ad ogni client remoto anziche` una rete /30 dal pool 10.64.0.0/24. Questo mi permette di gestire 248 reti remote anziche` 32, pero` mi limita a non usare client (intesi come client della vpn, quindi i firewall remoti) con windows. Ovviamente i client veri e propri nelle varie LAN remote possono benissimo essere Windows. Usando openvpn 2.10 probabilmente potrei fare tutto questo anche con windows sui firewall, ma perche` mai provarci?

Configurazione lato server centrale:

# interfaccia pubblica, porta e protocollo
local 62.94.137.138
port 9000
proto udp

# device usato dalla vpn
dev tun0

# io sono il server TLS (sempre vero per una conf a un server e molti client)
tls-server

# il file con dentro il numero primo per l'algoritmo Diffie Helman
# (serve solo per il server tls).
dh dh2048.pem

# il file con la chiave pubblica
# della CA che ha firmato i certificati per tutti gli endpoint.
ca ca.crt

# il file con la chiave pubblica del mio endpoint (il server)
cert server-impianti-remoti.crt

# il file con la chiave privata del mio endpoint (il server)
key server-impianti-remoti.key

# il file con la shared key per l'autenticazione dei pacchetti
# di handshake
#   The tls-auth directive adds an additional HMAC signature to
#   all SSL/TLS handshake packets for integrity verification.
#   Any UDP packet not bearing the correct HMAC signature can
#   be dropped without further processing
tls-auth tls-auth.key 0

# indirizzi ip delle interfacce tun dei firewll
# (questo e` il classico setup da "road warrior" pero` con un solo ip per client)
server 10.64.0.0 255.255.255.0
topology p2p

# route dal kernel (locale, del server) a openvpn: tutte le 10.64.x.x ci vanno dentro
# quindi anziche` indicarle una per una, le indico tutte assieme con una /16
# i singoli firewall remoti avranno una loro configurazione "speciale" dentro alla
# directory "ccd", nel file chiamato con il loro common name, che indica quale rete
# routare a quale firewall remoto.
route 10.64.0.0 255.255.0.0

# client config dir
client-config-dir ccd

# configurazioni di routing da insegnare ai client che si collegano.
# non voglio che i client si vedano fra loro, quindi non includo
# nulla a riguardo.
# qui vanno indicate le reti LAN dietro al firewall "centrale"
push "route 10.0.0.0 255.255.0.0"
push "route 192.168.2.0 255.255.255.0"


# keepalive e timeout: ping ogni 60 secondi e timeout di 240 secondi.
keepalive 60 240

# downgrade dei privilegi utente dopo l'avvio:
user nobody
group nogroup

# in caso di reload, tieni in memoria i dati che non potresti piu` rileggere a causa del privilegio insufficiente
persist-key
persist-tun

# file che indica lo stato delle connessioni, ad uso di chi lo vuole leggere
status impianti-remoti/server-status.log


# verboso
verb 3
(END)

Configurazione lato client (firewall remoto):

client
dev tun
proto udp
nobind
float
remote <firewall sede centrale> 9000
# file con le chiavi che abbiamo copiato prima dalla directory di easy-rsa:
ca ca.crt
cert client1.crt
key client1.key

# il certificato del server deve essere di tipo "server"
# questo evita che chi possiede un certificato client possa spacciarsi per server
remote-cert-tls server
tls-auth tls-auth.key 1
#loglevel 3
verb 3

Esempio del file che va dentro alla client config directory (ccd) per un client. questo file deve avere come nome il common name del client stesso (ad esempio, client1)

# indico al server openvpn quale subnet remota (10.64.x.0/24) va a questo client:
# In questo caso la 10.64.1.0/24. 
# Ovviamente sul firewall remoto dovro` usare questa subnet per la LAN.

iroute 10.64.1.0 255.255.255.0

OpenVpn/Openvpn_LAN2LAN_Multipla (last edited 2024-10-14 12:20:36 by Kurgan)