Espacio de tecnologia, software libre y sus derivados. Una horda de monos entrenados escriben de vez en cuando por aqui algunas noticias, opiniones e incluso alguna que otra cosa fuera del tema. Maqueros, favor de abstenerse que no somos lo suficientemente guapos.

Piano daemon

VPN Multipunto (Multihomed) en Centos 5 con OpenVPN

Buenas Tardes a todos! (usuarios de solaris, bsderos ), dejo a su disposicion este guia, para la instalacion de openvpn en modo multihomed, modo muy requerido por todos aquellos roadwarriors que requiera tu empresa. Lo hice para linux, debido a que ya lo tenia hecho de tiempo atras :).. y debido a que soy un gran amante del tiempo libre fuera de la compu…. asi que pues se quedo en linux el howto…. no lo habia publicado solo por decidia.. espero y les sea util.

1 - Software a instalar

j4nusx@zorrita$> yum install bridge-utils openvpn lzo openssl
j4nusx@zorrita$> yum install openssl
j4nusx@zorrita$> rpm -Uvh http://dag.wieers.com/rpm/packages/lzo2/lzo2-2.02-2.el5.rf.i386.rpm
j4nusx@zorrita$> rpm -Uvh http://dag.wieers.com/rpm/packages/lzo2/lzo2-devel-2.02-2.el5.rf.i386.rpm
j4nusx@zorrita$> rpm -Uvh http://dag.wieers.com/rpm/packages/openvpn/openvpn-2.0.9-1.el5.rf.i386.rpm

2 - Dispositivos y Puentes a crear

j4nusx@zorrita$> openvpn –mktun –dev tap0
Tue Jun 19 23:22:06 2007 TUN/TAP device tap0 opened
Tue Jun 19 23:22:06 2007 Persist state set to: ON openvpn –mktun –dev tap0

Estableceremos un bridging que inclulla a las interfaces tap0 y eth1 (en este caso la interface conectada a nuestra lan coorporativa)

j4nusx@zorrita$> brctl addbr br0 && brctl addif br0 eth1 && brctl addif br0 tap0

Establecemos la interfaces que conforman el bridging en modo promiscuo

j4nusx@zorrita$> ifconfig eth1 0.0.0.0 promisc up && ifconfig tap0 0.0.0.0 promisc up
j4nusx@zorrita$> ifconfig br0 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255


3 - Generacion de certificados de autentificacion solo root para determinar si un cliente tiene permisos de coneccion o no, openvpn verifica si este tiene las firmas que lo certifica en un servidor

j4nusx@zorrita$> cd /etc/openvpn && mkdir ssl && cd ssl
j4nusx@zorrita$> mkdir certs

3.1 - Creamos nuestro certificado de autoridad ca privado

j4nusx@zorrita$> openssl req -x509 -newkey rsa:1024 -out openvpn-ca.crt -outform pem -days 10000

“Generating a 1024 bit rsa private key
……………………………..++++++
…………………………………………..++++++
writing new private key to ‘privkey pem’
enter pem pass phrase verifying: mayte
enter pem pass phrase: mayte
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [GB]:MX
State or Province Name (full name) [Berkshire]:Sinaloa
Locality Name (eg, city) [Newbury]:Culiacan
Organization Name (eg, company) [My Company Ltd]:Oxkintok
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:EdwinPlauchu
Email Address []:plauchu@oxkintok.com

“Ahora Echaremos un vistazo a lo que hemos creado”

j4nusx@zorrita$> ls
openvpn-ca.crt privkey.pem

“Renombremos el archivo privkey.pem”

j4nusx@zorrita$> mv privkey.pem openvpn-ca.key

3.2 - Llave diffie hellman a 1024 bits

j4nusx@zorrita$> openssl dhparam -out dh1024.pem 1024


3.3 - Generacion de certificados individuales por cada cliente “cada punto”

Dentro de un enlace openvpn corriendo en modo tls devera de poseer su propio certificado cert y un archivo de llave privada key para lograr esto primero obtendremos de la ca un certificate signing request mi_certificado.csr de la siguiente manera, tambien obtenemos la llave que requerimos en el proceso:

j4nusx@zorrita$> openssl req -newkey rsa:1024 -keyout llave.key -keyform pem -out mi_certificado.csr -outform pem -nodes

“ahora firmamos el certificate signing request asi:”

j4nusx@zorrita$> openssl x509 -req -days 10000 -in ./mi_certificado.csr -CA ../../openvpn-ca.crt -CAkey ../../openvpn-ca.key -CAcreateserial -out ./mi_certificado.crt
Signature ok
subject=/C=MX/ST=Sinaloa/L=Culiacan/O=Oxkintok/OU=Developers/CN=EdwinPlauchu/emailAddress=pianodaemon@hotmail.com
Getting CA Private Key
Enter pass phrase for ../../openvpn-ca.key: mayte

j4nusx@zorrita$> ls

llave.key mi_certificado.crt mi_certificado.csr

##j4nusx@zorrita$> openssl x509 -req -days 10000 -in mi_certificado csr -ca certs openvpn-ca ##crt -cakey openvpn-ca key -cacreateserial -out certs mi_certificado.crt

Listo hemos obtenido nuestro certificado individual “mi_certificado.crt” ahora borramos el archivo csr que utilizamos para fabricarlo.

j4nusx@zorrita$> rm mi_certificado csr

4 -archivo de configuracion de openvpn 2 lado servidor linux

####dispositivo a utilizar###########
dev tap0

##### bandera que permite a los clientes visualizarce entre ellos ##
client-to-client
################################

#### mantiene vivo el servidor vpn
keepalive 10 30
################################

#### instrucciones que se ejecutaran
#### en los clientes al conectarce
push "ping-restart 60"
################################

#### archivo que indica el estado de openvpn
status tmp maxima-vpn status ################################ #### numero de clientes permitidos max-clients 150 ################################

#### net mask de la vpn ##########
server-bridge 192.168.2.1 255.255.255.0 192.168.2.50 192.168.2.250 ################################

#### implementacion de la trasmision de capa segura tsl #####
tls-server
################################

#### llaves ssl a utilizar ###########
dh /etc/openvpn/ssl/dh1024.pem
ca /etc/openvpn/ssl/certs/openvpn-ca.crt
cert /etc/openvpn/ssl/certs/mi_certificado.crt
key /etc/openvpn/ssl/llave.key
################################

#### protocolo y puerto ########
proto tcp-server port 5000
################################

#### modus operandi ############
mode server
################################

#### compresor de informacion ##
comp-lzo
################################

### nivel de verbose ###########
verb 0
# 0 — no output except fatal errors
# 5 — output r and w characters to the console for
# each packet read and write uppercase is used for
# tcp udp packets and lowercase is used for tun tap
# packets
################################

persist-key
persist-tun

5.- Configurando el Lado cliente con SO windows XP

Archivo de configuracion multihomed-client.conf

#puerto
port 5000
dev tap
remote mayte.homeunix.net
# tls parametros

tls-client
ca c:\vpn\openvpn-ca.crt
cert c:\vpn\alberto_certificado.crt
key c:\vpn\llave.key

# this parm is required for connecting
# to a multi-client server it tells
# the client to accept options which
# the server pushes to us pull
ping 20

rogerkrush

July 10, 2008 @ 7:10 pm

Se requiere interfaces tap0 tap1 tap2 para cada cliente que se va a conectar??

rogerkrush

July 10, 2008 @ 7:36 pm

este modo es similar al bridged

Edwin Plauchu

July 11, 2008 @ 10:34 am

solo requieres una interface tap para todos los clientes :)

rogerkrush

July 22, 2008 @ 1:27 pm

Probando, gracias saludos

RSS feed para comentarios en esta entrada · TrackBack URI

Comenta