= 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 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 }}}