VPN configurata manualmente disabilita accesso ad internet

Networking, configurazione della connessione, periferiche e condivisioni di rete.
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2924
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

VPN configurata manualmente disabilita accesso ad internet

Messaggio da DoctorStrange »

Buongiorno a tutti,

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.pem
Qui genero i certificati di un generico client. Impacchetto inoltre gli stessi certioficati in formato PKCS12, perche volevo provare ad installarli sullo smartphone ed usarli per la connessione al medesimo server, ma è una cosa secondaria. I certificati P12, possono essere ignorati.

Codice: 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.der
A questo punto il problema: ogni volta che connetto il client al server, il client perde ogni connessione ad internet. Sospetto che il problema sia questo: il client "droppa" la connessione regolare al DNS resolver che mi fornisce la connessione ordinaria ad internet, e "veicola" ogni connessione di rete sulla VPN. Logicamente questo interrompe la connessione ad internet, perche il mio server VPN non è un host autoritativo od un server DNS e quindi non può fornire connessione internet.

La 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
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 13126
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: VPN configurata manualmente disabilita accesso ad internet

Messaggio da thece »

Si, è possibile.
Nella configurazione della VPN non devi effettuare il reindirizzamento del gateway.

Ti suggerisco di osservare insieme:

- la configurazione delle scede di rete

Codice: Seleziona tutto

ip a
- la tabella di routing

Codice: Seleziona tutto

ip r
- la configurazione dei server DNS

Codice: Seleziona tutto

cat /etc/resolv.conf
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2924
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: VPN configurata manualmente disabilita accesso ad internet

Messaggio da DoctorStrange »

Documentandomi un po su internet, e leggendo la tua risposta, mi è venuta in mente un'idea, ma non so quanto sia praticabile. Prima di domani non potrò provarla, perche in questo momento sono in ufficio, e non ho accesso al client.
thece ha scritto:Nella configurazione della VPN non devi effettuare il reindirizzamento del gateway.
Questa parte non saprei come farla. C'è qualche impostazione specifica di ipsec che lo consenta?

Vorrei provare ad inserire, sul solo client, una regola di routing. Sulla catena "POSTROUTING". Se l'IP di destinazione è quello del server, allora l'interfaccia di connessione deve essere "tun0". Metterò questa regola, prima della normale rotta del gateway, in questo modo avrà priorità, e netfilter andrà a confrontare l'IP di destinazione del pacchetto. Se questo IP corrisponde al server remoto, ovvero alla regola di routing impostata, allora dovrebbe avere precedenza sul normale instradamento al gateway. In caso contrario, qualunque altro pacchetto, verrà mandato al gateway.
Pensi che possa funzionare?
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 13126
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: VPN configurata manualmente disabilita accesso ad internet

Messaggio da thece »

DoctorStrange ha scritto:
giovedì 6 giugno 2024, 14:37
Questa parte non saprei come farla. C'è qualche impostazione specifica di ipsec che lo consenta?
Non so come si configurano le VPN IPSec, mai fatto. Ti ho risposto sulla base della mia esperienza con OpenVPN e WireGuard.
DoctorStrange ha scritto:
giovedì 6 giugno 2024, 14:37
Pensi che possa funzionare?
Qualcosa ne mastico, ma a mente, senza le cose di cui sopra, per me è difficile dire. A naso ti direi che non hai bisogno di intevenire su IPTables.
Scrivi risposta

Ritorna a “Connessione e configurazione delle reti”

Chi c’è in linea

Visualizzano questa sezione: Martin0 e 3 ospiti