Discussione: HOWTO avanzati
View Single Post
Old 10-05-2004, 09:13   #8
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
OpenVPN mini HOWTO
Autore: gurutech
L'howto originale può essere trovato, insieme ad altra documentazione, presso www.gurutech.it

1. Disclaimer

La creazione di una VPN può comportare l'unione di due reti. Gli amministratori delle due reti *DEVONO* essere d'accordo in questa unione.
L'impostazione di una VPN comporta sempre una revisione delle tabelle di routing, e quindi va a toccare l'essenza delle comunicazioni che avvengono tra una rete privata ed internet, pertanto bisogna andarci con i piedi di piombo.
Inoltre, la crittografia sul traffico vi mette al riparo da sguardi malintenzionati sui vostri dati, ma *NON* è infallibile.
Detto questo: NE IO NE CHIUNQUE ABBIA PARTECIPATO A QUESTO DOCUMENTO PUO' ESSERE RITENUTO RESPONSABILE DI QUALSIASI DANNO EFFETTUATI IN SEGUITO ALLA LETTURA DELLO STESSO.


2. Prerequisiti

Conoscenza dei protocolli di rete
per Linux:
kernel 2.4.x con modulo tun
saper caricare/scaricare un modulo ed eventualmente ricompilare il kernel
saper gestire un firewall con iptables ove necessario
per Windows: Windows 2000/XP
un indirizzo ip pubblico (dinamico o statico)

3. Installazione
Non mi dilungherò troppo sulla compilazione da codice sorgente. L'unica attenzione è avere i pacchetti di sviluppo delle librerie di compressione lzo e openssl. Ad ogni modo ho preparato un pacchetto precompilato per debian, apt-gettabile includendo in sources.list


deb http://www.gurutech.it/ debs/

Il programma è veramente semplice, ed è composto dal solo eseguibile /usr/sbin/openvpn.
Innanzitutto è assolutamente necessario avere inserito nel kernel il modulo tun (modprobe tun) per il quale riporto letteralmente l'help in linea del kernel:

Quote:
TUN/TAP provides packet reception and transmission for user space
programs. It can be viewed as a simple Point-to-Point or Ethernet
device, which instead of receiving packets from a physical media,
receives them from user space program and instead of sending packets
via physical media writes them to the user space program.

When a program opens /dev/net/tun, driver creates and registers
corresponding net device tunX or tapX. After a program closed above
devices, driver will automatically delete tunXX or tapXX device and
all routes corresponding to it.

Please read Documentation/networking/tuntap.txt for more
information.
Per cui bisogna anche preoccuparsi della presenza del device node /dev/net/tun; Nel caso non esista, può essere creato con

mknod /dev/net/tun c 10 200
Da notare che se la vostra distribuzione usa il devfs, il device node verrà automaticamente creato al caricamento del modulo tun.

A questo punto siamo pronti ad impostare la VPN. Non c'è una struttura rigida server/client, ma ad ogni modo uno dei due capi del tunnel va impostato per primo e messo in ascolto (quindi dovrà avere un ip pubblico se la vpn si appoggia su internet), mentre l'altro va creato successivamente ed avrà il ruolo di chiamante.
Giusto per fare ordine, creiamo la directory /etc/openvpn dove metteremo il file di configurazione e l'importantissima chiave. Cominciamo proprio dalla generazione di quest'ultima con il comando

openvpn --genkey --secret /etc/openvpn/key

dal quale dovremo ottenere un file dal contenuto simile a questo:
Quote:
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
45b417076e22d94d603c478a772c85cb
e9bba7163f78796f881eea0463cd54b2
06e44952d50455840679f4630793682d
96788c8e42268125b3d1c1b1787adce9
11681bf9a16d5daddc0572d2fb19c574
c51697805fbfc6a0e6e4427affe55a9d
7f84898b369138fc504b70d7a37ccc7f
02300d9ec0693fda54bf6d4cd340dddf
5f626e9f0ba59a7421b477ccc28b68bc
7c5cf4bc4c8dde0285d3984e7301ed8e
f97d37123670cc0d81d4d9f7a0a1f26e
278d6566cdd598c7c0b5582e65ba01cf
638b331aea3af5dbef6dd15f7ed19d1a
a3654391b9f8088aa8b18055a1c9b112
2aa44adbe48f6bac37ec331df9c32698
3c9067017763544d011d4e437b65b97a
-----END OpenVPN Static key V1-----
Passiamo ora al file di configurazione vero e proprio, che chiameremo /etc/openvpn/config.ovpn giusto per stare in linea con quello che viene creato sotto windows. Con il nostro editor preferito scriviamo:

Quote:
dev tap
secret /etc/openvpn/key
ping 10
verb 1
mute 10
ifconfig 10.0.1.1 255.255.255.252
lport 5002
Adesso possiamo far partire il programma con

openvpn --config /etc/openvpn/config.ovpn --log-append /var/log/openvpn.log --daemon

(se omettiamo le opzioni log-append e daemon vedremo a video l'output del programma)
Questo aprirà la porta UDP 5002 e starà in attesa di essere chiamato su un qualsiasi indirizzo IP disponibile da una macchina con una chiave valida.
Sulla macchina chiamante, in questo esempio un PC con windows, dopo aver installato openvpn-1.5.0-install.exe con le impostazioni di default, e avergli fatto installare il servizio OpenVPN, creiamo

Quote:
remote the.ip.public.address
rport 5002
dev tap
ifconfig 10.0.1.2 255.255.255.252
secret c:\programmi\openvpn\config\key
ping 10
verb 1
mute 10
route-gateway 10.0.1.1
redirect-gateway
dove al posto di the.ip.public.address va messo l'indirizzo ip pubblico della macchina in ascolto.
Da notare che le impostazioni

Quote:
route-gateway 10.0.1.1
redirect-gateway
fanno si che il gateway di default con cui la macchina windows si è connessa ad internet venga sostituito dall'indirizzo della macchina linux dall'altro capo della VPN, cosa che nel mio caso era vitale visto che quest'ultima conteneva circa 700 route importate via BGP.
Prima di far partire il tutto dobbiamo copiare la chiave che c'è sul server nella directory c:\programmi\openvpn\config\ in un modo *SICURO* (perciò no email o simili, piuttosto il caro vecchio dischetto trasportato da persona fidata, cioè te stesso).
Adesso possiamo far partire "OpenVPN Service" nei servizi di windows 2000/XP e provare a pingare 10.0.1.1. Se inoltre alla macchina linux c'è attaccata un'altra rete privata, ad esempio una classica 192.168.0.x, saremo automaticamente in grado di pingare un qualsiasi ip di questa a patto di aver configurato l'ip forwarding (mi raccomando, NON il MASQUERADE!) sulla macchina linux.


4. Licenza/License
Copyright (c) 2002 Gianluca Mascolo
è garantito il permesso di copiare, distribuire e/o modificare questo documento seguendo i termini della Licenza per Documentazione Libera GNU, Versione 1.1 o ogni versione successiva pubblicata dalla Free Software Foundation; con la possibilità di modificare qualsiasi sezione. Una copia della licenza può essere trovata qui (italiano) or you can found GNU FDL here (english)
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12

Ultima modifica di ilsensine : 10-05-2004 alle 09:20.
ilsensine è offline