Abbiamo già parlato più volte della tecnologia Virtual Private Networking (VPN) e degli innumerevoli vantaggi ottenibili predisponendo l'opportuna infrastruttura tecnica
Per chi fosse completamente a digiuno della materia, basti sapere che, disponendo di una VPN, i computer divengono in grado di scambiare file, condividere stampanti e, più in generale, accedere alle risorse come se facessero parte di una stessa rete locale (LAN), anche in caso le workstation in questione siano fisicamente collocate a chilometri di distanza l'una dall'altra.
Questo significa, ad esempio, che è possibile aggregare alla LAN dell'ufficio anche la postazione di casa (o viceversa), oppure realizzare una rete "locale" permanente con gli amici anche quando i calcolatori sono ubicati nelle diverse abitazioni.
Tutti i dati in transito sono crittografati, e la partecipazione alla rete è limitata tramite l'imposizione di una password: la riservatezza, insomma, è garantita.
Questa guida è dedicata ad un pubblico di amministratori o smanettoni che siano disposti a sobbarcarsi numerose complicazioni tecniche a costo di raggiungere l'obbiettivo.
Esistono soluzioni nettamente più semplici che risultano più indicate per l'utenza media: l'impiego di Hamachi, Comodo EasyVPN, Wippien o una delle altre alternative sono, generalmente, consigliabili.
Nel corso di questo articolo, vedremo come predisporre un server VPN con CentOS.
Un risultato analogo è raggiungibile anche utilizzando un semplice PC Windows: ne abbiamo parlato più diffusamente in "Accettare connessioni VPN (PPTP) con Windows 7 in pochi click".
L'unico vero requisito è la presenza di un "super router" CentOS alla guida della vostra rete. Prima di proseguire, sinceratevi di averlo preparato così come dettagliato in "Creare un "super router" con un vecchio PC e CentOS".
Poiché il server VPN dovrà essere sempre raggiungibile dai client che richiedano la connessione, il calcolatore deve rimanere acceso (oppure essere predisposto di modo da ottenere un Wake-on-Internet) e collegato alla rete mondiale.
Come sempre avviene quando si parla di accettare connessioni dall'esterno, il server non potrà utilizzare connettività fornita da Fastweb oppure via UMTS/HSDPA: il sistema ad IP mascherato adottato da questi operatori inibisce infatti tale scenario.
È necessario svolgere la maggior parte delle operazioni con i privilegi di root: per la massima comodità, suggerisco di accedere direttamente al sistema con tale account. Se preferite utilizzare il vostro utente deprivilegiato, potrebbe bastare comunque lanciare tutti i comandi proposti anteponendo la stringa sudo .
Per creare la nostra VPN, utilizzeremo il pacchetto pptpd/Poptop: oltre a tutti i vantaggi della licenza open source, ho preferito questo strumento rispetto ai numerosi concorrenti per l'eccellente compatibilità con i client Windows e per la linearità dell'installazione.
Per ottenerlo, aprite una finestra di terminale (Application -> Accessories -> Terminal) e aggiungete la chiave utilizzata per firmare i pacchetti (per maggiori informazioni su questo passaggio si veda "Come aggiungere e rimuovere repository su CentOS"):
rpm --import http://poptop.sourceforge.net/yum/RPM-GPG-KEY-PPTP
Proseguite ora aggiungendo il riferimento al relativo repository:
rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel5/pptp-release-current.noarch.rpm
Ripulite la cache di yum con yum clean all e concludete con l'installazione del componente:
yum install pptpd ppp -y.
Per iniziare la configurazione, aprite il file delle opzioni con questo comando:
gedit /etc/ppp/options.pptpd
Le impostazioni di default sono già ottimali, ma dovete indicare quale server DNS utilizzare per la risoluzione dei nomi a dominio.
Cercate (comando Find nella barra degli strumenti) la stringa #ms-dns. Sostituitela quindi con questa dicitura:
ms-dns 208.67.220.220
Questo farà sì che i client connessi via VPN utilizzino OpenDNS allo scopo. Va da sé che coloro che disponessero di un server dei nomi locale sono liberi preferire quello.
Salvate e chiudete il file.
Modifichiamo ora il file di configurazione principale del software. Lanciate
gedit /etc/pptpd.conf
Ora viene la parte un pochino più delicata. Dobbiamo infatti scegliere:
Per ottenere il risultato ottimale ed evitare una serie infinita di complicazioni, sia l'indirizzo del server, sia quelli che saranno distribuiti ai client devono far parte della stessa rete utilizzata internamente dalla nostra LAN.
Per esempio, potremmo scegliere 192.168.0.201 per il server e 192.168.0.202, 192.168.0.203, eccetera sino a 192.168.0.254 per i computer remoti: portatevi rapidamente alla fine del documento ed inserite due righe di questo tipo:
localip 192.168.0.201
remoteip 192.168.0.2-254
Salvate e chiudete il file.
Completata questa fase, dovete assicurarvi che il servizio che eroga gli indirizzi IP alla LAN non distribuisca a propria volta tali indirizzi! Se avete svolto la procedura indicata in "Guida: realizzare un server DHCP con CentOS", il file pronto all'uso è già predisposto in maniera appropriata: per esserne sicuri, impartite gedit /etc/dhcpd.conf, cercate la stringa range e controllate che il valore riportato sia
192.168.0.2 192.168.0.200
In tal caso, dhcpd assegnerà solamente gli indirizzi da .2 a .200, lasciando .201 e successivi a disposizione della VPN.
Come ultima fase di predisposizione del servizio, non dobbiamo fare altro che indicare una lista di nomi utente e password autorizzati alla connessione. Le singole credenziali dovranno poi essere comunicate ai client ed impostate nei PC remoti.
Aprite gedit /etc/ppp/chap-secrets. Per creare i vari account, aggiungete una riga per ogni utente basandovi su questo modello:
NomeUtenteClient pptpd PasswordAssociata *
Un esempio pratico potrebbe essere:
gianluigi.zanettini pptpd passwordsegreta *
topolino pptpd disneyland *
peter.parker pptpd spiderman *
Salvate e chiudete il file.
Impartite service pptpd start nel terminale per avviare il servizio. In caso tutto sia funzionante, verrà mostrato l'incoraggiante OK verde.
Impostate il demone di modo che si auto-avvii ad ogni accensione successiva del server lanciando chkconfig pptpd on (oppure spuntando la casella di controllo relativa a pptpd e cliccando quindi il pulsante Save in System -> Administration -> Services).
Ora che il servizio è operativo, dobbiamo far sì che sia raggiungibile!
Per prima cosa, apriamo la porta sul firewall: seguite System -> Administration -> Security Level and Firewall per lanciare il pannello di configurazione.
Cliccate sul pulsante Add in basso a destra, immettete 1723, premete Ok e confermate ripetutamente fino a chiudere il tool.
Se per il collegamento ad Internet del server viene utilizzato un router, sarà necessario configurare anche l'inoltro della stessa porta (port forwarding) verso il server VPN (per risalire all'indirizzo IP locale, fate riferimento all'articolo "Configurare indirizzo IP e DNS su CentOS").
La procedura esatta varia da modello a modello. Per quanto riguarda il diffusissimo Alice Gate fornito in comodato da Telecom Italia, è disponibile l'articolo "Aprire porte TCP/UDP su modem-router Alice gate 2 Plus e 2 Plus Wi-Fi". Per tutti gli altri apparecchi, dovrete fare riferimento al libretto di istruzioni.
Questo passaggio, da solo, potrebbe però non essere sufficiente. Alcuni router bloccano infatti il protocollo Generic Routing Encapsulation (GRE) utilizzato in questo scenario: è quindi necessario sfogliare fra le opzioni disponibili e sincerarsi che non sia attivo questo sbarramento.
A complicare ulteriormente le cose, altri apparecchi prevedono un'opzione chiamata VPN PassThrough (oppure PPTP Passthrough) che deve essere a propria volta esplicitamente attivata per raggiungere lo scopo: di nuovo, siete chiamati ad usare un po' di acume tecnico e spulciare l'interfaccia di gestione dell'apparecchio per raggiungere lo scopo.
Per poter raggiungere il server CentOS dall'esterno, risulta particolarmente comodo l'utilizzo di un nome a dominio dinamico (sarà qualcosa del tipo servervpn.no-ip.org): NO-IP è sicuramente un strumento ottimo tanto quanto DynDns.
Vi suggerisco caldamente di associarne uno al vostro server prima di proseguire oltre.
Arrivati a questo punto, dovrebbe essere tutto pronto. Non vi resta che connettervi da uno dei client! La procedura è stata mostrata in "Come connettersi ad un server VPN con Windows 7 e Ubuntu"
Una volta che il collegamento è stabilito, il server CentOS si occupa di unire in maniera (quasi) trasparente i due rami di rete: quello della VPN e quello della rete locale alla quale fornisce l'accesso.
Notate che i PC Windows della LAN remota potrebbero non essere correttamente mostrati sotto Risorse di rete: se così fosse, utilizzate il solito \\nome-pc da Windows Explorer per raggiungerli direttamente.
Come anticipato in apertura, la tecnica qui proposta non è esattamente "banale". Di conseguenza, vi sono numerosi aspetti che potrebbero intralciare il corretto funzionamento della VPN.
Questa pagina della documentazione ufficiale propone una ricchissima serie di prove, suggerimenti e soluzioni ai vari problemi: ho riassunto di seguito quelli più comuni.
Se il servizio è avviato (lo potete verificare rapidamente impartendo service pptpd restart) ma client non riesce a connettersi, significa che c'è qualche "sbarramento".
Spostate i due computer all'interno della stessa LAN e provare nuovamente: se così funziona, significa quasi sicuramente che non avete configurato opportunamente il router.
In caso contrario, potrebbe essere il firewall a non lasciar passare debitamente il traffico: provate a disabilitarlo temporaneamente (magari scollegando il tutto da Internet per prevenire problemi di sicurezza!) e riprovate.
Se la connessione VPN è stabilita correttamente ma i PC non sono raggiungibili, potrebbe essere un problema di configurazione.
Sul client, lanciate ping 192.168.0.201 (sostituendo l'opportuno indirizzo IP di VPN del server) e sinceratevi di ottenere una risposta.
Se questo non avviene, lanciate yum install tcpdump -y sul server per installare un software cattura-pacchetti, quindi procedete con tcpdump -n -i ppp0 e provate di nuovo ad effettuare il ping: se a terminale non appaiono messaggi informativi, significa che il client non sta "parlando" in alcun modo con il server.
Risalire alla causa di questo problema è tutt'altro che facile.
Verificate che non sia il server stesso ad avere problemi a comunicare con gli altri PC della LAN e, magari, provate a scaricare una versione aggiornata dello script di routing.
Se tutto funziona ma non riuscite a condividere le risorse, avete probabilmente un problema con la specifica funzionalità di Windows: consultate l'articolo "Allestire una rete di computer (LAN)" per maggiori informazioni.
Per come è configurato fino ad ora, il server "passa" il traffico fra la VPN e l'interfaccia Internet in maniera "trasparente".
Se però la macchina è dotata anche del proxy "Squid" (magari con qualche filtro aggiuntivo), potrebbe essere interessante far sì che anche tutte le richieste provenienti dai client VPN vengano gestite da questo componente.
Aprite con gedit il file utilizzato per il routing (è stato salvato in /root/routing.sh, se avevate seguito le indicazioni della guidata dedicata) ed individuate la porzione di testo delimitata dall'indicazione ============ BLOCCO DI ISTRUZIONI CHE ABILITANO LE CONNESSIONI VPN IN ENTRATA ============ (è verso la fine del file).
Poco sotto, dovreste trovare 3 blocchi da 5 righe l'uno: eliminate tutti i cancelletti (#) che trovare all'inizio delle 15 righe in questione
Salvate il file e chiudete l'editor.
A questo punto, riavviate il server per rendere effettive le modifiche (oppure eseguite nuovamente lo script di routing e riavviate Squid con service squid restart) ed il gioco è fatto: tutte le richieste di accesso al web provenienti dai client VPN saranno gestite dal proxy
I client potrebbero avere qualche difficoltà a gestire le pagine veicolate tramite HTTPS ma, come dicevamo, è tutto normale.
In caso questa limitazione risultasse inaccettabile, l'alternativa è quella di consentire all'utenza di accedere alle pagine crittografate senza passare per Squid: per farlo, inserire il carattere # all'inizio delle seguenti righe nel file routing.sh (sono le ultime del blocco di istruzioni dedicate all'uso di Squid abbinato alla VPN)
Per completezza, vi invito a notare che l'impiego di Squid via VPN è una semplice misura tesa ad evitare che per il server circoli materiale illegale o inappropriato, ma non è in alcun modo una tutela per il client: in caso uno degli utenti della VPN volesse aggirare il blocco, gli basterà scollegarsi dalla rete virtuale ed accedere direttamente ai siti come di consueto utilizzando la connessione in dotazione al calcolatore, oppure impostare la VPN in modalità "Split tunnel".
MegaLab.it rispetta la tua privacy. Per esercitare i tuoi diritti scrivi a: privacy@megalab.it .
Copyright 2008 MegaLab.it - Tutti i diritti sono riservati