Ho una situazione un po strana che vorrei provare a risolvere con un minimo di assistenza. Lo scopo è di realizzare una connessione VPN protetta tra il mio host di casa, ed un server remoto, tramite una VPN che sia conforme allo standard ipsec/ikev2.
Logicamente, non ho bisogno di alcuna connessione protetta, ma voglio solo imparare come si configura questo tipo di connessione.
Al momento la connessione VPN ipsec è di tipo point-to-point tra un server remoto ed un client locale.
Il SERVER:
Il server è come detto prima un host remoto con una sessione linux senza interfaccia grafica. Questo è raggiungibile tramite il suo IP pubblico. Non è nattato.
Il CLIENT:
Il client è il mio PC di casa. E' sotto NAT. In particolare il NAT è questo. L'IP locale del PC è 192.168.1.11, e connesso direttamente, con destination NAT al router, che ha un'interfaccia con IP pubblico.
Il tunnel ipsec:
Il tunnel l'ho configurato separatamente su server e client. L'autenticazione dei due host avviene tramite certificati SSL, che genero io stesso.
Questa è la procedura con la quale genero i certificati sia di server che di client:
Certificati server:
Codice: Seleziona tutto
#!/bin/bash
#openssl genrsa -out chiavePrivataCA.pem 2048
#openssl rsa -passin pass:"" -in chiavePrivataCA.pem -out chiaveCA.pem
#rm chiavePrivataCA.pem
#sudo chmod 0600 chiaveCA.pem
ipsec pki --self \
--ca \
--lifetime 3650 \
--dn "C=IT, O=certificatoCA, CN=CA-server" \
--in chiaveCA.pem \
--type rsa \
--outform der > certificatoCAX509.der
#Genero ora la chiave privata del server.
#Questa, è quella che andrà aggiunta sia
#si /etc/ipsec.d/private, che su ipsec.secrets
ipsec pki --gen \
--type rsa \
--size 4096 \
--outform der > chiavePrivata_OVH-server.der
chmod 600 chiavePrivata_OVH-server.der
ipsec pki --pub \
--in chiavePrivata_OVH-server.der \
--type rsa | \
ipsec pki --issue \
--lifetime 730 \
--cacert certificatoCAX509.der \
--cakey chiaveCA.pem \
--dn "C=IT, O=certificato_OVH_server, CN=OVH-server" \
--san "OVH-server" \
--san "3.<public IP server>" \
--san "5.<public IP router>" \
--san "10.154.0.3" \
--flag serverAuth \
--flag ikeIntermediate \
--outform der > certificato_OVH-server.der Qui, la prima cosa che faccio è di creare la chiave ed il certificato della "Certification Authority", ovvero dell'attore univoco che fiormerà tutti i certificati emessi. Genererò poi il certificato e la chiave del server.
Qui la procedura per il client:
Codice: Seleziona tutto
#!/bin/bash
#Genero la chiave privata
sudo ipsec pki --gen \
--type rsa \
--size 2048 \
--outform der > chiave_Leonardo.der
sudo chmod 0600 chiave_Leonardo.der
#Genero ora la chiave ed il certificato, firmati
#dalla CA che ho creato nella sequenza server.
sudo ipsec pki --pub \
--in chiave_Leonardo.der \
--type rsa |\
ipsec pki --issue \
--lifetime 730 \
--cacert certificatoCAX509.der \
--cakey chiaveCA.pem \
--dn "C=IT, O=certificato_Leonardo, CN=Leonardo-client" \
--san "Leonardo-client" \
--san "34.<IP pubblico server>" \
--san "5.<IP router>" \
--san "10.154.0.3" \
--outform der > certificato_Leonardo.der
#A questo punto, converto la chiave del client in PKCS12
#per poterla usare sullo smartphone:
#Converto le chiavi
openssl rsa \
-inform DER \
-in chiave_Leonardo.der \
-out chiave_Leonardo.pem \
-outform PEM
openssl x509 \
-inform DER \
-in certificato_Leonardo.der \
-out certificato_Leonardo.pem \
-outform PEM
openssl x509 \
-inform DER \
-in certificatoCAX509.der \
-out certificatoCAX509.pem \
-outform PEM
openssl pkcs12 \
-passout pass:miaIndecifrabilePassword \
-name "Certificato client VPN Leonardo" \
-export \
-in certificato_Leonardo.pem \
-out certificato_PKCS12_Leonardo.p12 \
-inkey chiave_Leonardo.pem
rm chiave_Leonardo.pem
#rm chiave_Leonardo.der
rm certificato_Leonardo.pem
#rm certificato_Leonardo.der
rm certificatoCAX509.pemCodice: Seleziona tutto
config setup
charondebug="all"
uniqueids=no
conn VPN-ovh-gcp
type=tunnel
auto=add
compress=no
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
# authby=secret
authby=pubkey
ike=aes256-sha256-modp2048,aes128-sha256-modp2048,aes256-sha1-modp2048,aes128-sha1-modp2048,aes256-sha1-modp1024!
esp=aes256-sha256-modp2048,aes128-sha256-modp2048,aes256-sha1-modp2048,aes128-sha1-modp2048,aes256-sha1-modp1024!
aggressive=no
keyingtries=%forever
ikelifetime=28800s
lifetime=3600s
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
# left=10.154.0.3
left=%any
leftsubnet=0.0.0.0/0
# lefttid=34.<public IP address server>
leftid="C=IT, O=certificato_Leonardo, CN=Leonardo-client"
leftcert=certificato_Leonardo.der
# lefttsourceip=10.10.10.0/24
# lefttdns=8.8.8.8,8.8.4.4
right=5.<public IP address router Vodafone>
rightsubnet=0.0.0.0/0
rightid=%any
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8,8.8.4.4
# rightcert=certificato_OVH-server.derLa domanda: E' possibile configurare la VPN, il client od il server, in particolare il client, per fare in modo che, tutti i pacchetti diretti allo specifico IP del server VPN, passino sulla VPN, mentre tutti gli altri pacchetti raggiungano il normale gateway di casa che, nel mio caso, è impostato su 192.168.1.1?
Grazie

