Como hacer una vpn que funcione

Hola, segundo post de la siesta. espero que no salga kilométrico como el de Slim (iluso)

La verdad es que hace rato que queria hacer esto, en parte por curiosidad y en parte porque me resuelve varios temas con un trabajo a distancia.
Paso a explicar brevemente que es una VPN (Virtual Private Network) o Red Privada Virtual (en castellano). No es ni más ni menos que una conexión similar a una LAN pero através de internet, que es una red pública. Esto se logra encriptando el tráfico entre las dos computadoras para darle la "privacidad" y asemejar una conexion poco y nada privada o siquiera anonima con una LAN que es algo totalmente bajo nuestro control.

Como hacer una vpn que funcione


Para lograr esto existen servicios como hamachi que con un cliente te solucionan todo y ellos tienen los servidores para que todo funcione. En este post no tratamos eso sino el uso de OpenVPN para lograrlo nosotros sin ninguna dependencia de terceros que no sean los prestadores de internet que tengamos en cada pc. Como ventaja, nadie sabe que yo tengo una VPN y controlo todo tipo de cuestiones de seguridad, además que si don hamachi se muere en un accidente automovilístico u algo asi, no me quedo en pelotas con mi red.

Este tutorial lo escribo despues de tener éxito en el montado de la VPN entre dos pcs a varias cuadras de distancia por internet. Siguiendo el howto del sitio oficial que se encuentra en http://openvpn.net/index.php/open-source/documentation/howto.html

Ahora, a los bifes:

como siempre digo, en Debian/ubuntu/mint y demáses, usan apt-get o Synaptic, en gentoo es emerge, en otros es yum y así... en Archlinux es pacman.
hacemos un
# pacman -S openvpn
para instalar el paquete con sus dependencias.

o lo bajan y compilan desde el sitio oficial: http://openvpn.net/index.php/open-source.html
las dependencias son:
* lzo2
* openssl


esto lo hacemos en cada pc que queremos conectada por la VPN

ahora viene lo bueno:
para el servidor, o sea, la maquina a la que todos se conectan y que asigna las direcciones y controla el tráfico, hacemos unos cuantos pasos y luego copiamos desde ahi los archivos que necesitamos en el resto.

Entonces a partir de ahora, todo lo que hacemos es en el servidor, hasta nuevo aviso.

por ello, esta bueno tener un servidor ssh corriendo en esa compu, asi no necesitamos estar sentados en frente, pero eso es asunto de cada uno.

Primero lo primero, todo lo manejamos desde el directorio /etc/openvpn, pero este aparece vacio. Los archivos que necesitamos estan en /usr/share/openvpn.
copiamos, entonces, el contenido de la carpeta easy-rsa a la carpeta /etc/openvpn con un comando:
# cp -v /usr/share/openvpn/easy-rsa/* /etc/openvpn
y nos cambiamos a esa carpeta:
# cd /etc/openvpn

Hay que crear los certificados de autenticidad (CA) y las llaves, lo hacemos asi:
# . ./vars
# ./clean-all
# ./build-ca

noten que la primera dice "punto" "espacio" "punto" "barra" vars
Del último comando sale algo asi:
Generating a 1024 bit RSA private key
............++++++
...........++++++
writing new private key to 'ca.key'
-----
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) :
State or Province Name (full name) :
Locality Name (eg, city) [BISHKEK]:
Organization Name (eg, company) [OpenVPN-TEST]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:OpenVPN-CA
Email Address [me@myhost.mydomain]:

donde responden a los datos con lo que quieren en realidad.

paso siguiente: crear los certificados del servidor, lo hacemos con
# ./build-key-server server
ese es único y solo para el servidor !

ahora contiuamos con los certificados de los clientes, uno por cada cliente:
# ./build-key-server cliente1
# ./build-key-server cliente2
# ./build-key-server cliente3

y asi todos los que quieran. El sitio oficial sugiere que se elija un nombre comun pero único para cada cliente, se habran dado cuenta de que hablo.

ahora un paso un poco más largo: creamos los parametros "Diffie Hellman" (no se quien o quienes sean)
# ./build-dh
tiene una salida como esta:
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.................+...........................................
...................+.............+.................+.........
......................................


ahora tenemos en una carpeta llamada keys todos los archivos creados. Algunos van solo al servidor y otros solo a los clientes, y uno a ambos.
al servidor y solo al servidor van: ca.crt; ca.key; dh1024.pem; server.crt; server.key
los copiamos a la carpeta /etc/openvpn:
# cp /etc/openvpn/keys/server.* /etc/openvpn/
# cp /etc/openvpn/keys/ca.* /etc/openvpn/
# cp /etc/openvpn/keys/dh*.pem /etc/openvpn/


y los archivos llamados client1.key; client1.crt y los demás similares van para cada cliente. Los tienen que copiar en la carpeta /etc/openvpn
Pueden hacerlo por ftp o con scp o lo llevan en un pendrive, o se lo mandan por email o se lo anotan en una hoja y lo escriben en cada una de las pcs. Yo prefiero usar scp porque no tengo que levantar la cola de la silla ni irme caminando a la otra pc, a varias cuadras, o al otro lado del mundo (seria lo mismo). Para eso es el servidor ssh que les nombraba al principio.
Si quieren hacerlo como yo, tienen que usar el comando scp de la siguiente forma DESDE EL SERVIDOR:
# scp /etc/openvpn/keys/cliente1.* root@IPDELCLIENTE1:/etc/openvpn

donde dice IPDELCLIENTE1 reemplazan por la IP de la pc que llamamos cliente1, les va a pedir la pass del root del cliente y lo copia. Siempre y cuando puedan hacer una session remota con ssh como root y hayan creado la carpeta destino (se crea cuando instalan el paquete), no van a tener problemas. Si les surge un contratiempo con esto, les pasé varias opciones, googleen y lo solucionan como quieran.

IMPORTANTE: los archivos con extensión .key tienen que ser secretiiisimos, asi no se les cuelan en la VPN y les quitan la importante Privacidad. los otros no importa si se los mandan a su tia, pero esos son la base de la privacidad. (otra razón más para usar scp)

Ahora, lo que nosotros queremos es una red tipo TUN, porque asi lo sugiere el tutorial oficial basandose en la simplicidad y conveniencia al público general (como nosotros).
Eso lo especificamos en el archivo server.conf, el cual no les voy a explicar mucho porque ya viene muy bien comentado (solo que en ingles) y esto no es para niños, si no entienden que dice cada cosa, usen hamachi.
Estos archivos .conf los encuentran en la carpeta /usr/share/openvpn/examples copian el que mejor se ajuste a sus necesidades o directamente el server.conf y client.conf según corresponda a cada pc.
el caso es que les tiene que quedar algo así:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.0.10.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
cipher BF-CBC
max-clients 3
persist-key
persist-tun
status openvpn-status.log
verb 3


OjO con los nombres de los archivos
abran el puerto 1194 en su firewall
las IPs de la vpn seran de la 10.0.10.1 para el servidor hasta 10.0.10.254 para los clientes. pero lo eligen a conciencia.
la cantidad de clientes máximas en este es de tres, asegurense que no sean ni mas ni menos que los que ustedes crearon.
el cifrado será blowfish <--- acuerdensé para el client.conf
creando un archivo llamado ipp.txt le asignan una ip determinada a cada cliente para que siempre sea la misma.

Sobre el ipp.txt
lo crean haciendo:
# nano /etc/openvpn/ipp.txt
y lo completan de la siguiente forma:
cliente1,IP1
cliente2,IP2
cliente3,IP3

o sea, nombre que usaron para generar las claves: cliente1; cliente2; cliente3 y la IP que le van a asignar en la VPN separados por una coma, y uno por línea.

Sobre las IPs en la vpn:
Es importante que no se superpongan con otras IP de redes que tengan en cualquiera de las pcs. por ejemplo, si uso un router o un modem adsl que me asigna una IP privada 10.0.0.1 a mi pc y me quiero conectar con el servidor de la VPN que tiene esa misma IP en la VPN, sonamos!.
Ni siquiera se puede tener una IP distinta pero del mismo rango, ya probé. En un cliente tengo 3 IPs, la del cablemodem de internet (publica), la de mi LAN (192.168.0.1) y la de la VPN (tun0), que queria que sea 192.168.0.100 por capricho y en el afan de conectar la VPN a mi LAN, pero no funciona así, seguramente tengo que puentearlos con iptables, pero no es una prioridad para mi.
Así que tengan eso en cuenta, los routers y cablemodems en general asignan direcciones por defecto que caen en 10.0.0.0 ó 192.168.0.0 (sea el último numero distinto de cero). Entonces elijan un rango que no les estorbe con esas cosa. las IPs privadas estan convenidas en los siguientes rangos:
10.0.0.0 a 10.255.255.255
172.16.0.0 a 172.31.255.255
192.168.0.0 a 192.168.255.255


con lo cual en las que arrancan con 10 podemos tener 256 x 256 x 256 = 16.7 millones de commbinaciones
las que arrancan con 172 son: 16 x 256 x 256 = un millon de combinaciones
y las que van con 192.168 son 256 x 256 = 65 mil (mas o menos)
asi que si tienen más de 65.000 computadoras en su lan, tendran que optar por las dos primeras opciones.
en fin, como en mi lan uso 192.168.x.x y tal vez en otra computadora de la VPN se use un router con el que no me quiero pelear y asigne 10.0.0.x; elijo 10.0.10.0 que es facil de recordar y de escribir y no se pelea con nadie.

Con esto ya tenemos el server listo.


Solo queda crear en cada cliente un archivo de configuración llamado client.conf.
OjO que el servicio levanta todas las configuraciones que encuentra en la carpeta /etc/openvpn, asi que solo pongan los que correspondan... en el server solo el server.conf y en los clientes solo el client.conf.

creamos el archivo en cada cliente o lo creamos en el server y despues lo copiamos a cada cliente, como sugeri con las claves. a gusto propio de cada uno.
Basado en el server.conf anterior el client.conf me queda así:
client
dev tun
proto udp
remote IPDELSERVIDOR 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert cliente1.crt
key cliente1.key
ns-cert-type server
cipher BF-CBC
verb 3


les remarque los temas importantes, client es el que levanta la VPN;
la IPDELSERVIDOR la pueden reemplazar por una direccion que obtengan, por ejemplo, de DynDNS o servicios similares (ddclient anda bien con ese)
y a cada cliente le toca un certificado y llave diferente, la cual individualizamos hoy como cliente1; cliente2; cliente3.
Tienen que tener en cuenta usar el mismo cifrado y compresion que en el servidor, aca esta en la linea "cipher BF-CBC" pero le quite la compresión (tambien al servidor, obviamente)

Entonces esta TODO LISTO !


Solo nos queda iniciar el servicio en cada computadora (primero en el servidor) y lo hacemos con:
# /etc/rc.d/openvpn start
y listo ! VPN ready to go !

para que inicien la VPN con cada inicio de la PC, tienen que agregarlo a la lista de daemons:
# nano /etc/rc.conf

# -----------------------------------------------------------------------
# DAEMONS
# -----------------------------------------------------------------------
#
# Daemons to start at boot-up (in this order)
# - prefix a daemon with a ! to disable it
# - prefix a daemon with a @ to start it up in the background
#
DAEMONS=(syslog-ng hal @fam @alsa crond network iptables firestarter ntpdate @openvpn ddclient @sshd slim)

como dice el comentario, la arroba @ es para que inicie en segundo plano, mientras se cargan los otros servicios. no es necesaria.
Lo importante y obvio es que lo pongan despues de network y preferiblemente, tambien después que su firewall, iptables firestarter en mi caso. Asi estan protegidos desde el vamos en la VPN desde esta pc.

Ahora... con firestarter tengo un problemita que no me esperaba, pero lo solucione para todos ustedes. Se los comento: uso firestarter como firewall y tambien para compartir internet en mi pc para una pequeña LAN en casa. pero como este simpático firewall me reescribe las reglas de iptables cada ves, hay que acordarse de agregar la comparticion de internet a la interfae tun0 (que es la de la VPN), porque sin internet no hay mucho de la VPN (doh).
Para que todo ande como queremos, editamos el archivo /etc/firestarter/user-pre y le agregamos lo siguiente:

# nano /etc/firestarter/user-pre

iptables -A INPUT -i tun0 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT


y ya está !

con eso tenemos todas las pcs, clientes y servidor, en una "LAN virtual" con direcciones 10.0.10.1 para el servidor y similares para los clientes, para configurar cualquier cosa, es igual que con cualquier conexion de red física, solo que la interface se llama tun0 (o algo asi, depende si tenemos una o varias VPN)

Espero que les sirva, personalmente se que como todos mis post en T! a mi me sirven en algún momento como recordatorio para volver a hacer las cosas sin pasarme una semana con google.

Salu2

33 comentarios - Como hacer una vpn que funcione

@Ferchos
Se ve que le pusiste ganas. A fav. para leerlo mas tranca. Mañana te dejo puntines.
@takedown +1
mucha garra men! ese es el tipo de post que me gustan leer en esta categoría.
Abrazo
@8MoCoSo7 +2
que bueno esto che, ta bueno para jugar al CS con amigos nomas, sin los giles esos que la chitean o se ponen a putiar e insultar si alguien juega mal. desde que me cambie a arnet 1Mb no puedo acer la VPN en 10.0.0.2 donde la acia siempre para crear mi servidor dedicado
Obviamente este post es mucho mas serio que solamente eso, espero no me reten por el comentario jaja te dejo unos porotitos
te gustan 10?
@pcdm79
Buenísimoooo!! carajo solo me quedaban 2 puntos, a favoritos mañana vuelvo y te doy más puntos. Grandísimo aporte!
@spikderman
Buen post... va a favoritos!
@logan1476
muy bueno, buen aporte!!! +10
@Tuxuntu -1
Vamos a probarla y cuando me funcione te doy mis 10... por ahora a favoritos...
Lo bueno de LINUX es que cada día me gusta más .....
@cyberalejo17
Lo que estaba buscando.

Muchas gracias.
@hernansaa -1
Aca les dejo un link para hacerlo con hamachi, aunque es muy sencillo, hay un video tutorial que explica como hacerlo para el que lo necesite, tambien se puede descargar desde ahi. saludos
@dolchi21
yo seguí el tutorial de la página y me funciona sólo en la red LAN que tengo.
tengo esto:
Router: 192.168.1.1 - Abierto el puerto 1194 hacia ArchLinuxServer
PC de casa: 192.168.1.100
--- VirtualBox:
--- ArchLinuxServer (Server de OpenVPN): 192.168.1.111
--- ArchLinux (Client): 192.168.1.110

ArchLinux Client sólo se conecta cuando en client.conf pongo &quot;remote 192.168.1.111&quot;
cuando pongo la IP pública del router no se conecta. como si no respondiera el puerto 1194.

probé con otros puertos y lo mismo.

Osea, la pregunta es: como configuro cuando el servidor está detrás de un router?
@dolchi21
santodelaespada dijo:
dolchi21 dijo:yo seguí el tutorial de la página y me funciona sólo en la red LAN que tengo.
tengo esto:
Router: 192.168.1.1 - Abierto el puerto 1194 hacia ArchLinuxServer
PC de casa: 192.168.1.100
--- VirtualBox:
--- ArchLinuxServer (Server de OpenVPN): 192.168.1.111
--- ArchLinux (Client): 192.168.1.110

ArchLinux Client sólo se conecta cuando en client.conf pongo &quot;remote 192.168.1.111&quot;
cuando pongo la IP pública del router no se conecta. como si no respondiera el puerto 1194.

probé con otros puertos y lo mismo.

Osea, la pregunta es: como configuro cuando el servidor está detrás de un router?

Tenes que configurar el dominio de tu router y que acepte la conexion local al puerto externo.
Si no podes en tu router, te haces una configuracion para la LAN y otra para cuando estas fuera.
Si tu router es una PC con linux, en /etc/hosts agregas una linea &quot;localhost url.remota.a.tu.pc&quot; para que todo lo que sea enviado/pedido a &quot;url.remota.a.tu.pc&quot; sea traducido a &quot;localhost&quot;

es un linksys WRT54G2
ya fui a Aplications &amp; Gaming y habilité el puerto 1194 para la IP 192.168.1.111 y nada
eso decías?
@HADES81
+10, Muy bueno. Podrias hacer un tuto similar para hcer el servidor VPN en un Windows Server 2003 / 2008 con terminales win 2000,XP o 7 ???.
@capri84
muy buen post, te felicito la verdad que algún día voy a hacer esto porque de apoco me estoy metiendo en el mundillo de las redes, por eso te ganas un 10, me lo llevo a favorito y te sigo jeje. Saludos
@Bona3000
yo tengo el tema de que uso brazilFW 3.x como router quiero conectar 2 por vpn pero ya vi como hacer todo y lo se y va a funcionar pero no se como generar el certificado sin eso no camina :S :/
@Bona3000
ya esta no habia visto la opcion.. xD
@sigollen -8
ES TIEMPO YA DE BUSCAR A DIOS Y ACEPTAR A JESUCRISTO. ESTE MUNDO SE ESTA DESTRUYENDO RAPIDAMENTE. ESCAPA POR TU VIDA. NO PERMITAS QUE SATANAS SE LLEVE TU ALMA AL INFIERNO. HAZ ESTA ORACION Y DIOS TE PERDONARA Y TE SALVARA.

REPITA ESTA ORACION DE FE PARA RECIBIR A JESUCRISTO EN SU CORAZON.

SEÑOR JESUCRISTO, ME ARREPIENTO Y TE PIDO PERDON POR MIS PECADOS.HAZME LA PERSONA QUE TU QUIERES QUE YO SEAS, TRANSFORMAME Y CAMBIA TODO MI SER CUERPO, ALMA Y ESPIRITU COMPLETAMENTE. ESCRIBE MI NOMBRE EN EL LIBRO DE LA VIDA Y NUNCA JAMAS LO BORRES. BAUTIZAME EN ESPIRITU SANTO Y FUEGO Y AYUDAME A MANTENERME FIRME EN SANTIDAD, OBEDIENCIA, ORACION, LECTURA BIBLICA Y A CONGREGARME EN UNA IGLESIA DEL EVANGELIO COMPLETO. GRACIAS JESUS POR MORIR POR MI EN LA CRUZ. AMEN Y AMEN.

DIOS TE BENDIGA SIEMPRE Y TE CONCEDA LAS PETICIONES DE TU CORAZON.

TODO LO PUEDO EN CRISTO QUE ME FORTALECE. FILIPENSES 4:13.

NADA ES IMPOSIBLE PARA DIOS.

ASI DICE EL SEÑOR DIOS TODOPODEROSO. CLAMA A MI Y YO TE RESPONDERE Y TE ENSEÑARE COSAS GRANDES Y DIFICULTOSAS QUE TU NO CONOCES.

EL ANGEL DE JEHOVA ACAMPA, ALREDEDOR DE LOS QUE LE TEMEN Y LOS DEFIENDE. SALMOS 34:7.

LA SANGRE DE NUESTRO SEÑOR JESUCRISTO CONSUME, QUEBRANTA Y DESTRUYE TODO PLAN SATANICO Y DIABOLICO EN CONTRA DE MI PERSONA.

LLEVANDO CAUTIVO TODO PENSAMIENTO PECAMINOSO, INICUO, PERVERSO Y SATANICO A LA OBEDIENCIA A JESUCRISTO DE NAZARET. Y CORTANDO TODA REPRESALIA EN CONTRA DE MI PERSONA Y CUBRIENDOME CON LA PODEROSA SANGRE DE JESUCRISTO. AMEN Y AMEN.

LEE LA BIBLIA, CAMBIARA TU VIDA TOTALMENTE.

HAY PODER EN LA PODEROSA SANGRE DE JESUCRISTO.

JESUCRISTO VIENE YA. BUSCALE AHORA POR FAVOR.

EL OJO DE DIOS ESTA SOBRE TI, TEN CUIDADO CON LO QUE DICES O HACES, PUES POR TU PALABRA SERAS JUZGADO.

PARA MAYOR INFORMACION PUEDES VISITARNOS Y VER COSAS MARAVILLOSAS EN:milagrosysantidad.blogspot.com/
Iglesia Pentecostal Santidad a Jesucristo
milagrosysantidad.blogspot.com

http://www.youtube.com/watch?v=jk5tulRCxR4&feature=related

http://www.youtube.com/watch?v=h2t5Zo8IPm4&feature=related

Testimonio del infierno es un lugar real, es una carcel gigante de tortura

Mire este video por favor del infierno

http://www.youtube.com/watch?v=Gpioi09w71Q

Iglesia Pentecostal Santidad a Jesucristo
milagrosysantidad.blogspot.com
@el_vecino_01
Lean la biblia linux y no sean ignorantes, estudien y no se dejen comprar, busquen del conocimiento busquen Taringa.
@gurumart
déjate de joder con Dios que te agarro en la cama y te mato
@elkinyoanardilab
men podrias hacer un video del procedimiendo para crear un servidor vpn en mi pc y poder compartir el internet a mi celuar con android te lo agradezco es que no entiendo nesesito un poco de ayuda para poder crear el servidor vpn
@liontunechi +2
Wajajajajajajajaa que pedo con tu: ''además que si don hamachi se muere en un accidente automovilístico u algo asi, no me quedo en pelotas con mi red. '' Casi me meo de risa y escupo a mi hermana el jugo que estaba por tomar, gracias a tu comentario chistoso. Saludos bro, gracias por tan excelente información. Andaba busque y busque como montar la vpn yo mismo sin ''terceros proveedores''.
@robyir
Disculpa mi ignoráncia...en qué parte nos enlazamos con Internet?
@pipodut
aaah gracias..yo sabia a hacer una vpn que no funcione XD
@0late
Gracias por este gran aporte!