El hidrógeno es un gas ligero e inodoro que, con el tiempo suficiente, se convierte en gente. Anónimo

Vpn con openvpn

2010-03-17 03:20:52-06                  Esta entrada ha sido vista 308 veces.

Linux

Buenas, en este pequeño tutorial mostrare como montar una vpn tipo roadwarrior, que es una forma para hacer que varios clientes puedan conectarse a una red  privada para poder compartir recursos independientemente del lugar donde esten. La conexión sera ethernet (TAP), OJO: Tambien se puede hacer con dispositivos TUN (desde la capa ip), pero desde mi punto de vista la primera es una mejor alternativa para este tipo de configuración.

En este tutorial se usara ubuntu, pero openvpn como todo el buen software es multiplataforma.  OJO: los dispositivos TAP se generan de diferente forma en diferentes sistemas operativos.

En este ejemplo, estare usando las siguientes ip's

LAN                     ======> 10.9.8.0/24
Servidor Openvpn        ======> 10.9.8.13
Gateway (router)        ======> 10.9.8.1

Cliente                                             =======> 192.168.1.1 (pero puede ser cualquier otra ip que no este dentro del rango de la vpn)


Primero hay que instalar openvpn y bridge-utils, tanto en el servidor como en los clientes, OJO: He tenido problemas con los drivers para Windows Vista, al parecer no cumplen con algunos certificados de confianza, ahi quedan avisados.

 
	sudo apt-get install openvpn bridge-utils


Luego hay que crear el archivo de configuración para openvpn, este puede ser cualquier archivo que termine con *.conf en /etc/openvpn/, en este ejemplo le llamaremos, ejemplo.conf y tendrá lo siguiente:

#===================================================================
#Donde y en que puerto escuchar, es una buena idea cambiarlos para
#evitar ataques automatizados
#===================================================================
local 10.9.8.13
port 10987

#===================================================================
#http://sites.inka.de/~W1011/devel/tcp-tcp.html
#con la conexion tipo "ethernet", nos ahorramos varios problemas de ruteo
#===================================================================
proto udp
dev tap0

#===================================================================
#claves
#===================================================================
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/servidor.crt
key /etc/openvpn/easy-rsa/keys/servidor.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem

#===================================================================
#Para que push redirect-gateway funcione se debe habilitar port
#forwarding en el servidor (net.ipv4.ip_forward=1), y desactivar el
#firewall (ufw, en ubuntu).
#===================================================================
server-bridge 10.9.8.13 255.255.255.0 10.9.8.150 10.9.8.159
push "redirect-gateway"
#===================================================================
#Que las ip's sean persistentes entre sesiones
#===================================================================
ifconfig-pool-persist ipp.txt

#===================================================================
#Los clientes podran verse
#===================================================================
client-to-client
keepalive 10 60

#===================================================================
#Usar compresion
#===================================================================
comp-lzo

#===================================================================
#permitir que un mismo usuario se logee varias veces al mismo tiempo
#===================================================================
#duplicate-cn

#===================================================================
#Igual al numero de ip's asignadas para la vpn
#===================================================================
max-clients 10

#===================================================================
#Quitar permisos a openvpn
#===================================================================
user nobody
group nobody
persist-key
persist-tun

status openvpn-status.log

;log         openvpn.log
;log-append  openvpn.log

# 9 is extremely verbose
verb 7

mute 20


El archivo viene lo suficientemente comentado, por lo que solo explicare las partes criticas:

 
server-bridge 10.9.8.13 255.255.255.0 10.9.8.150 10.9.8.159
push "redirect-gateway"

el primer parrafo se lee de esta forma, "El servidor openvpn esta corriendo en la ip 10.9.8.13, y se habilitan a los clientes de las direcciones 10.9.8.150 a la 10.9.8.159, obvio que deberan tener esas direcciones disponibles en su red, y su servidor dhcp debera funcionar correctamente (esto lo hace la mayor parte de los routers de manera automatica). Hay que verificar que este habilitado el port-forwarding agregando:

"vm.swappiness=10
net.ipv4.ip_forward=1"


al archivo /etc/sysctl.conf

El primero no es necesario, pero me no ara daño, uhhh se me olvidaba, deberan tener una ip estática, de lo contrario el servicio no funcionara de manera adecuada, para asignar una ip estática en cada arranque en ubuntu editen el archivo /etc/network/interfaces y agreguen:

auto eth0
iface eth0 inet static
address 10.9.8.13
netmask 255.255.255.0
network 10.9.8.0
broadcast 10.9.8.255
gateway 10.9.8.1


despues de ello tendran que reiniciar la red, 'sudo /etc/init.d/networking restart' para aplicar los cambios.

Siguiendo con el tutorial, deberan asegurarse que las interfaces TAP se creen ANTES de levantar siquiera el servicio, para esto se descargan este archivo:  http://pastebin.com/rtBXhg5u y lo agregan al nivel 5 de init, en ubuntu con update-rc.d

Por supuesto que hay que cambiarle los parametros de red:

	sudo chmod +x ./bridge; sudo update-rc.d ./bridge defaults

Con esto el script se ejecutara cada vez que la maquina arranque, y podran usar openvpn sin problemas, OJO: esto solo se hace en el servidor, en el cliente como veremos mas adelante, el proceso quedara bastante simplificado.

Despues de ello, solo quedará crear y distribuir las claves de acceso, crearemos nuestras llaves con easy-rsa, en ubuntu:

	sudo cp -v /usr/share/doc/openvpn/examples/easy-rsa/2.0  /etc/openvpn/easy-rsa


lo que creara un directorio llamado 'easy-rsa' en /etc/openvpn que trae algunos scripts para generar las claves y los certificados, OJO: esto tambien se puede hacer directamente con openssl (no estoy seguro si tambien se puede con gnutsl, alguien sabe?)

El primer paso sera editar el archivo VARS, con los datos de la empresa o del lugar donde estes implementando la vpn, luego hay que logearse como root:

	sudo su

Y ejecutar:

	# source ./vars


esto inicializara las variables, luego:

 
	# ./clean-all


OJO: solo deberan ejecutar ./clean-all cuando esten instalando la vpn, despues para remover certificados y agregar clientes extra se ejecuta source ./vars y ./build-key o ./revoke-full cliente directamente, si en esas instancias ejecutan ./clean-all eliminaran las claves que tenian hasta entonces y tendran que volver a configurar TODOS los clientes.

OJO: los scripts deben ejecutarse desde una consola de root '#', obtendran algunos errores si lo intentan con 'sudo'

	# ./build-ca

Se crea el certificado, y luego la llave del servidor

 
	./build-key-server servidor


OJO: aqui debe tener el mismo nombre que se especifica en el archivo de configuracion, para este ejemplo puntual, seria 'servidor', una vez generado este archivo sera el más importante, asegurense que solo root pueda "verlo".

Se genera los parametros diffie-helman, ahora, para ser sinceros, no tengo la mas remota idea para que sirve esto, pero no funciona sin el, asi que hay que generarlo:

	# ./build-dh


Finalmente se crearan los certificados de los clientes:

 
	# ./build-key  nombre_cliente

Este último proceso se puede hacer las veces que se requiera para un numero ilimitado de clientes, se generarán por cada cliente 3 archivos:


  • nombre_cliente.crt
    nombre_cliente.key
    nombre_cliente.csr
  •  


Los clientes solo requieren los 2 primero y el certificado del servidor 'ca.crt', todas las claves se guardan por default y para este ejemplo, en '/etc/openvpn/easy-rsa/keys', entonces juntan esos 3 archivos de cada usuario y se los pasan, de preferencia que todos queden en el mismo folder.

Se reinicia el servidor y todo deberia estar funcionando

	sudo /etc/init.d/openvpn start


deberan un mensaje como este en /var/log/syslog :

 
Initialization Sequence Completed


Entonces sabran que al menos del lado del servidor todo funciona : ) , la configuración de los clientes es realmente ridicula, y más si instalan:

	sudo apt-get install network-manager-openvpn


Entonces podran ir a "editar conexiones" -> vpn -> add -> agregan su conf y listo, sus clientes solo tendran que dar click en network-manager y seleccionar su vpn, el final feliz tendra que ser + o - asi:


Listo! : )

En caso de que no funcione pueden hacer la conexión e ir viendo los mensajes que se generan en '/var/log/syslog', tambien se puede lanzar openvpn desde consola con una salida más verbosa, para lo cual se necesitará un archivo muy básico de configuración, para este ejemplo puntual, sería este:

client
dev tun
proto tcp
remote ejemplo.com
float #debido a que la IP de arriba es dinamica
resolv-retry infinite
nobind
persist-key
persist-tun
ca "/home/chilicuil/ca.crt"
cert "/home/chilicuil/chilicuil.crt"
key "/home/chilicuil/chilicuil.key"
comp-lzo
verb 4

sudo openvpn --config cliente.conf


PD: Aunque hay mucha documentación, al principio puede ser intimidamente/no muy clara por lo que la mejor forma de agarrarle la onda es intentar varias configuraciones hasta encontrar la que mejor se adapte a sus necesidades, openvpn puede usarse de muchas y diversas formas. Dejo la liga: http://openvpn.net/howto.html

PD2: No hay que olvidar redireccionar las peticiones de openvpn hacia su servidor desde su router

PD3: Gracias de nuevo @rnstux es mucho más comodo bloggear con este editor

Permalink: http://www.mononeurona.org/entries/view/chilicuil/2145


Comments Commentblogs:
1.- vendaval wrote:

chingon, solo dos sugerencias:

Se me hace menos complicado y mas elegante ligar la MAC a la IP que quieres fijar (servidor OpenVPN) mediante el servicio dhcp del router. Es una configuración independiente de la Distribución o SO.

La segunda es que no estoy seguro que tus llaves sean de calidad, en un ubuntu para X86_64 instalación por default + openvpn no creo que la entropia disponible en la generación de Números Pseudo-aleatorios supere 300 (puedes verlo en /proc/sys/kernel/random/entropy_avail), para la generación de llaves lo ideal esta entre 1500 y 4000.

Saludos Cordiales.

Saludos cordiales.


2010-03-17 09:40:28-06
2.- rnstux wrote:

Chido post, vamos a estar chambeando para que se puedan exportar a PDF..

2010-03-17 09:58:44-06
3.- chilicuil wrote:

@vendaval, voy a considerar lo de la MAC, tienes razón sería menos rollo para cuando se tuviera que migrar a otro servidor

Respecto a las claves, pues en este sistema la salida de /proc/sys/kernel/random/entropy_avail es de 3250 en promedio así que no esta tan mal, además (aunque no se si este ligado) he declarado que el tamaño de las llaves sean de 2048 bits en lugar de 1024, espero que aguante vara por un raton.

En todo caso, si la salida no fuera lo suficiente buena bastaría con hechar a correr algunos procesos mas, no?

@rnstux pues ya ni como pedirlo, ahi llevatela relax no te sobrecargues

Gracias por sus comentarios.

2010-03-17 11:38:18-06
4.- thotmx wrote:

Al pedo tu how-to! muy bueno, y muy útil

2010-03-17 12:37:43-06
5.- aarkerio wrote:

Te la rifaste con el tutorial!

2010-03-17 12:57:52-06
6.- vendaval wrote:

3250!!!! orale hasta te voy a pedir que generes mis certificados jejeje.



2010-03-18 06:19:25-06
7.- profetius wrote:

Buenos días,
Muy buen tutorial, llevo varios días con esto y es uno de los tutoriales más completos que he encontrado.
He conseguido montar la vpn casi sin complicaciones
yo la creo con:
server-bridge 192.168.1.3 255.255.255.0 192.168.1.128 192.168.1.254
y el resto es basicamente igual.
Mi problema radica que al mapear la red local, con por ejemplo nast -m consigo ver todos los equipos locales pero no los de la vpn, aunque tengo conexión a ellos sin problema. Alguna idea de por qué es así?
Gracias y salu2.

2010-07-09 01:02:13-05
8.- chilicuil wrote:

Hola,

Gracias por tu comentario, hablando sobre tu problema, pues no tengo experiencia con $ nast, lo que yo hago para ver quienes esta online es usar nmap, por ejemplo: $ nmap 10.0.0.0/16 -sP

Perdón por la respuesta tan incompleta.

2010-07-10 07:02:06-05
9.- profetius wrote:

Buenas,
En primer lugar gracias por tu respuesta. La verdad es que ya había probado nmap, incluso con timeout alto por si era un problema de latencia. Por lo que he llegado a ver debe ser un problema con el DHCP. No sabrías por casualidad como conectar la vpn con el DHCP en vez de hacerlo con la opción bridge?
Mucha gracias y perdona las molestias.

2010-07-12 03:10:55-05
10.- chilicuil wrote:

Hola profetious,

Mira, la verdad nunca he tenido la necesidad de habilitar dhcp en los clientes vpn, veo que esta cubierto brevemente e incompletamente en la faq: http://tinyurl.com/24h7ook

Lo que si he notado es que el pool de ips de tu servidor esta en el rango 192.168.1.0/24, al comienzo del tutorial recomiendo que se use un rango diferente al de los clientes, esto porque tambien tuve errores parecidos cuando usaba el mismo rango en ambos lados. La gran mayoria de los clientes se conectan desde redes del tipo 192.168.x.x . Ya se que no es facil cambiar de rango cuando tienes muchos equipos, a mi me tomo 1 semana cambiar todas las maquinas, pero desde entonces no he tenido ningun problema. Te recomiendo que hagas una prueba rapida conectando un cliente desde una subnet diferente y viendo si aun asi no encuentra el dispositivo.

Saludos y suerte.

2010-07-12 06:59:24-05
11.- profetius wrote:

Buenas Chilicuil,
Gracias por tu respuesta. He cambiado el direccionamiento cambiando a una 192.168.0.0/22
dejando 192.168.1.0/24 para la local y el resto remoto.
Lo curioso es que los mapeos de red siguen sin funcionar si los hago a toda la red local, es decir, solo detecta los equipos locales. Sin embargo si los hago sobre la zona vpn
nmap -sP 192.168.2.0/24 p. ejem. si encuentra los equipos conectados. Es curioso.
Seguire investigando y si encuentro algo mas te lo comento.
De nuevo gracias por tu ayuda.
Salu2.

2010-07-13 01:17:46-05
12.- profetius wrote:

Hola,
He seguido haciendo pruebas y creo que el problema radica en el retardo de la conexión de los equipos remotos ya que utilizan una conexión a internet muy lenta. Por lo demás todo funciona a la perfección magnifico tutorial y gracias por los consejos.

2010-07-14 07:28:16-05
13.- profetius wrote:

Hola de nuevo,
Después de tener el sistema durante varias semana todo parece funcionar perfectamente pero me surge una duda si quisiese cambiar el servidor openvpn y conservar los certificados ¿qué ha de hacerse?
Muchas gracias por todo.

2010-07-26 06:35:55-05
14.- profetius wrote:

Hola
Perdon por volver al mismo hilo pero no tengo muy claro donde buscar para este problema.
La vpn me funciona de lujo, pero he detectado que envia muchisimo trafico del servidor a lso clientes. No creo q sea un problema de configuracion y no se si es normal. ¿Alguna idea?

2010-09-08 10:04:37-05
New Commentblog
CAPTCHA Image




Join us!
Forgot your password?
This blog has been visited
18,864 times
chilicuil
A random 26 years old guy living at México city
Powered by
Despabilando la MonoNeurona.org
Livechat
<-Nombre

reiken wrote:
http://tinyurl.com/782vp5u
4 days, 4 hours ago

e17_easy wrote:

on 26/10/11

chilicuil wrote:
musica, videos y programas chingones!
on 8/3/11

chilicuil wrote:
claro que si!, http://rockerboymexico.blogspot.com/
on 8/3/11

rockerboy wrote:
q onda!! chilicuil!!! pon un link de mi blog!!!
on 18/12/10

chilicuil wrote:
Vara, $250 porque puse como pretexto que era estudiante :&#41;, en realidad eran $350
on 21/2/08

aarkerio wrote:
Cuánto te costo el CONSOL?
on 20/2/08

scarecrow wrote:
Bienvenido!
on 19/1/08


clonando discos
2 weeks ago
xD
on 4/1/12
feliz año nuevo MNes, cuendo sea viejo y decrepito les contare historias a mis nietos sobre los MNes, vamos por uno mas.., 2012, alla vamoooos __~~~o/
on 31/12/11
jajaja, es cierto @aarkerio, sobrevivimos!
on 20/12/11
gracias por las recomendaciones, aplique la del caldo de pollo, sin embargo creo que voy a peor, es lo malo cuando no te enfermas todo el año y el karma te cobra todas juntas al final
on 20/12/11
con dolor en la garganta, creo que morire en mi cama, @vendaval xD, no se si reir o llorar, creo que poco a poco me voy convirtiendo en un sysadmin
on 17/12/11
asi es, a mi me desperto
on 10/12/11
jajajaja @rnstux eso te pasa por no usar ubuntu ;), xD, ntc
on 1/12/11
que le paso al anterior @humusanito?
on 30/11/11
@aakerio ok, no lo habia visto x.x
on 30/11/11
FirefoxjEdit.orgGimpOpenOffice.orgHacker
Top
Colectivo MonoNeurona.org © 2002-2011.