Instala Tu Propio Servidor VPN con OpenVPN en Ubuntu 10.04 Server

Instala Tu Propio Servidor VPN con OpenVPN en Ubuntu 10.04 Server

Instala Tu Propio Servidor VPN con OpenVPN en Ubuntu 10.04 Server

ATENCIÓN

COMO VEN ESTE POST TIENE MAS DE 1 AÑO, ESTA MUY DESACTUALIZADO, LO ACTUALIZARE NI BIEN PUEDA, MIENTRAS NO PODRE RESPONDER LOS COMENTARIOS.

Luego de un tiempo sin postear les traigo esta guía de como crear su propia VPN en Ubuntu Server,ya sea para conectarse a la pc de casa o para usar internet de forma segura en redes wifi inseguras.

OpenVPN es un Software que hace de cliente y servidor según como lo configuremos, aclaro que hay 2 versiones de este:
* OpenVPN Community Software: Es la versión que utilizaremos y es 100% Open Source
* OpenVPN Access Server: Es la versión de pago, puede usar gratis solo hasta 2 usuarios, los usuarios adicionales son muy económicos, además tiene extras como panel de administración web, es súper fácil de configurar y mas.

Introducción

OpenVPN, es un producto de software creado por James Yonan en el año 2001 y que ha estado siendo mejorado desde entonces.

Ninguna otra solución ofrece una mezcla semejante de seguridad a nivel empresarial, seguridad, facilidad de uso y riqueza de características.

Es una solución multiplataforma que ha simplificado mucho la configuración de VPN’s dejando atrás los tiempos de otras soluciones difíciles de configurar como IPsec y haciéndola más accesible para gente inexperta en este tipo de tecnología.

Supongamos que necesitamos comunicar diferentes sucursales de una organización. A continuación veremos algunas soluciones que se han ofrecido como respuesta a este tipo de necesidades.

En el pasado las comunicaciones se realizaban por correo, teléfono o fax. Hoy en día hay factores que hacen necesaria la implementación de soluciones más sofisticadas de conectividad entre las oficinas de las organizaciones a lo largo del mundo.

Dichos factores son:

* La aceleración de los procesos de negocios y su consecuente aumento en la necesidad de intercambio flexible y rápido de información.
* Muchas organizaciones tienen varias sucursales en diferentes ubicaciones así como también tele trabajadores remotos desde sus casas, quienes necesitan intercambiar información sin ninguna demora, como si estuvieran físicamente juntos.
* La necesidad de las redes de computación de cumplir altos estándares de seguridad que aseguren la autenticidad, integridad y disponibilidad.

Fuente: Wikipedia

El Servidor:

Esta guía es para Ubuntu 10.04 Server, imagino que funciona en otras versiones y distros, tenemos un ubuntu server ya instalado y funcionando.
Instalamos OpenVPN y también OpenSSL, ya que la seguridad se basa en ssl.

sudo apt-get -y install openvpn
sudo apt-get -y install openssl

Configuramos el Demonio de OpenVPN para que No Auto Inicie con el Sistema
Comentamos todo agregando # al comienzo de cada linea.

sudo nano /etc/default/openvpn

tambien eliminar el script de inicio, para evitar que no inicie si configurar

sudo update-rc.d -f /etc/init.d/openvpn remove

Ahora Creamos el Archivo openvpn.conf en /etc/openvpn/

sudo nano /etc/openvpn/server.conf

y colocamos esta configuración

dev tun
proto tcp
port 1194
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/servidor.crt
key /etc/openvpn/keys/servidor.key
dh /etc/openvpn/keys/dh2048.pem
user nobody
group nogroup
server 10.6.0.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/clients.txt
status /etc/openvpn/status.txt
persist-key
persist-tun
push "redirect-gateway def1"
push "route 192.168.0.0 255.255.255.0"
keepalive 10 120
verb 3
comp-lzo
max-clients 3

como verán se puede personalizar, este es un ejemplo que fue probado

si no quieren usar la vpn para internet seguro, osea no navegar usan internet desde la vpn, quitar la linea “redirect-gateway”.

Otros datos que pueden modificar:
* ca, cert, key y dh = son la entidad, el certificados, la llave y la Diffie Hellman del servidor, mas adelante los crearemos.
* server 10.6.0.0 255.255.255.0 = es el rango de ip que usara la vpn, usen otro pero, no usar el mismo que la red real.
* ifconfig-pool-persist ipp.txt = guarda a quien se le asigno cada ip en la vpn
* proto y port = protocolo y puerto, se puede usar tcp y utp, en utp no me dio buenos resultados, el puerto es pueden cambiarlo.
* duplicate-cn = permite que se use el mismo certificado y llave en varios clientes al mismo tiempo, recomiendo no activarlo.
* up /etc/openvpn/openvpn.up = es un script que carga openvpn al iniciar, se usa para el ROUTING y FORWARDING, mas adelante lo creamos.
* client-to-client = es para evitar que los usuario de la vpn se vean entre si, según el caso es útil.
* comp-lzo = compresión, comprime todo el trafico de la vpn.
* verb 3 = aumenta o disminuye los detalles de error en el server.
* max-clients 30 = cantidad máxima de usuarios conectados simultáneamente al servidor, se puede aumentar o disminuir.
* push route = permite ver o estar en la red detras del vpn server, ojo no activar client-to-client.
* push “redirect = oblica al cliente a usar la vpn como gateway.

ahora creamos el script para que configure e inicie el servidor de vpn.

sudo nano /etc/init.d/vpnserver

y pegamos este codigo, cambiar el rango de ip según la configuración de paso anterior

#!/bin/sh
#
vpnserver_start()
{
 echo "VPN Server [OK]"
 echo 1 > /proc/sys/net/ipv4/ip_forward
 /etc/init.d/networking restart  > /dev/null
 /sbin/iptables -t nat -A POSTROUTING -s 10.6.0.0/24 -o eth0 -j MASQUERADE
 /usr/sbin/openvpn --config /etc/openvpn/server.conf 2>> /etc/openvpn/error.txt 1>> /etc/openvpn/normal.txt &
}
vpnserver_stop()
{
 echo "VPN Server [NO]"
 /usr/bin/killall "openvpn"
 iptables -F
 iptables -X
 /etc/init.d/networking restart > /dev/null
}
vpnserver_restart()
{
  vpnserver_stop
  sleep 1
  vpnserver_start
}
#
case "$1" in
 'start')
   vpnserver_start
  ;;
 'stop')
   vpnserver_stop
  ;;

 'restart')
   vpnserver_restart
  ;;
 *)
  vpnserver_start
 ;;
esac

ahora le asignamos permisos de ejecutable

sudo chmod +x /etc/init.d/vpnserver

tambien y que configurar para que auto inicie con el sistema

sudo update-rc.d vpnserver defaults

bueno ya configuramos OpenVPN, ahora tenemos que activar el modulo TUN en el kernel, con estas lineas, lo cargamos y listo

sudo modprobe tun
sudo echo "tun" >> /etc/modules

como verán no fue tan difícil la configuración, pero ahora viene lo mas lento:

* Crear Diffie Hellman de 2048bits
* Crear la Entidad emisora de certificados.
* Crear los Certificados y llaves del servidor.
* Crear los certificados y llaves de cada usuario.

Copiamos los ejemplo de easy-rsa para crear la entidad, los certificados, llaves y encriptación, que usar OpenVPN,

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

ahora hay que entrar en la carpeta donde están las utilidades que copiamos y crear la carpeta keys

sudo cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/
cd /etc/openvpn/easy-rsa/2.0
sudo mkdir keys

solo nos queda editar el archivo vars que esta en /etc/openvpn/easy-rsa/2.0

sudo nano /etc/openvpn/easy-rsa/2.0/vars

y modificamos estos valores

export KEY_DIR="$EASY_RSA/keys"

por

export KEY_DIR="/etc/openvpn/easy-rsa/2.0/keys"

es para genere si o si en /etc/openvpn/easy-rsa/2.0/keys
seguimos, también modificamos los parámetros para Diffie Hellman de 2048bits

export KEY_SIZE=1024

por

export KEY_SIZE=2048

solo nos faltan los datos para la entidad emisora

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"

modifica cada valor por los de tu país, provincia, ciudad, empresa y correo
un ejemplo

export KEY_COUNTRY="AR"
export KEY_PROVINCE="SF"
export KEY_CITY="Armstrong"
export KEY_ORG="LAGA-Systems"
export KEY_EMAIL="info@lagasystems.com.ar"

Como ven AR = Argentina, SF = Santa Fe (mi provincia) y los demas se entienden.
bueno ahora estamos preparados para comenzar, seguir estos pasos al pie de la letra, porque un error y se arruina todo.

ejecutamos

source ./vars

y nos pide que limpiemos por si hay entidades, certificados y llaves, lo hacemos con gusto

./clean-all

ahora generamos la seguridad Diffie Hellman de 2048bits

./build-dh

ahora generamos la entidad emisora de certificados les pedirá los mismos datos que en el archivos vars recomiendo completar cada uno, aunque ya están, no importa

./build-ca

ya estamos para poder generar lo certificados y llaves primero el servidor, cambiar server por el nombre que gusten,les pedirá los mismos datos que en el archivos vars recomiendo completar cada uno, aunque ya están, no importa.

./build-key-server servidor

ya tenemos los certificados y llaves de servidor ahora el cliente, cambiar cliente por el nombre que gusten,
les pedirá los mismos datos que en el archivos vars recomiendo completar cada uno, aunque ya están, no importa.

./build-key cliente

este paso se debe repetir para cada cliente o usuario que quiere conectar a la vpn ya tenemos todo para funcionar, no, falta copiar los archivos que generamos al lugar que configuramos en openvpn.conf
ya que copiar la carpeta keys a /etc/openvpn/

sudo cp -R /etc/openvpn/easy-rsa/2.0/keys /etc/openvpn/

ahora comprobamos que este todo en su lugar, entramos en la carpeta /etc/openvpn/keys

cd /etc/openvpn/keys

y con un ls miramos si están los archivos
ahora generamos un archivo mas, este lo genera openvpn

sudo openvpn --genkey --secret ta.key

Solo falta copiar los archivos ca.crt, cliente.crt, cliente.key, si creaste mas clientes copia los crt y key de cada un pendrive u otro medio no usar email para enviarlos, es como darle la llave de tu casa a un desconocido.

Listo ya esta todo en el servidor, ahora lo iniciamos para probar que todo esta correcto

sudo /etc/init.d/vpnserver start

Si no hay errores ya tenemos nuestra vpn funcionando, solo falta el cliente.

El Cliente:

Esta guía es para Ubuntu 10.04 Desktop, imagino que funciona en otras versiones y distros, tenemos un ubuntu ya instalado y funcionando.
Instalamos OpenVPN y también OpenSSL, ya que la seguridad se basa en ssl
y como usaremos el Network Manager de Ubuntu hay que instalar el plugins para OpenVPN

sudo apt-get -y install openvpn
sudo apt-get -y install openssl
sudo aptitude -y install network-manager-openvpn

Ahora ya estamos en condiciones de configurar nuestro cliente un ejemplo de configuración:

Con un editor de texto, gedit puede ser, pegan este código

client
dev tun
proto tcp
remote IP-DEL-SERVIDOR PUERTO
resolv-retry infinite
nobind
#user nobody
#group nobody
persist-key
persist-tun
ca ca.crt
cert cliente.crt
key cliente.key
comp-lzo
tun-mtu 1500
keepalive 10 120
verb 4

Modifican los datos, IP-DEL-SERVIDOR este es el ip publico o de internet del servidor y PUERTO por el que asignaron en el servidor, los archivos ca.crt, cliente.crt y cliente.key son los que generamos y copiamos antes en un pendrive o en lo que sea.

Si Tiene IP Publico Dinámico, les recomiendo usar algún servicio de DDNS (DyDNS, NO-IP, CDMon), y no se olvide de abrir y redirigir el puerto 1194 o el que eligieron para el servidor.

Guardan el el código con el nombre que quieran pero con extensión .conf y en la misma carpeta de los archivos ca.crt, cliente.crt y cliente.key

Ahora abre el Network Manager de Ubuntu y en la pestaña VPN hay un botón Importar, buscan el archivo .conf que guardamos antes y ya esta todo.

espero que les ayude, ya que para hacer funcionar openvpn me recorrí todas la guías y manuales que encontré.

Gracias por sus Comentarios, Si hay algún ERROR es producto de su imaginación, jajajaj

Post Relacionados

  • Francisco Javier

    Buenas tardes!!
    Simplemente felicitar al autor de este blog, pues, me ha funcionado al 100% en mi nuevo servidor que he comprado.

    Ahora podré conectarme desde iPhone, iPad o cualquier PC !!
    Gracias desde España :)

  • Francisco Javier

    Mi segundo comentario en la tarde.
    Yo el servidor, lo he instalado bajo ubuntu server 11.04

    Ahora bien, el cliente, lo he instalado en Windows, y simplemente tienes que tener en el archivo conf, la ruta correcta hacia los .key y .crt.

    Solo me surge una duda…. quiero crear para mas clientes ( ./build-key cliente2 ) y… me dice el siguiente mensaje:

    root@ubuntu:/etc/openvpn/easy-rsa/2.0# ./build-key cliente2
    Please edit the vars script to reflect your configuration,
    then source it with “source ./vars”.
    Next, to start with a fresh PKI configuration and to delete any
    previous certificates and keys, run “./clean-all”.
    Finally, you can run this tool (pkitool) to build certificates/keys.

    ¿es necesario tener que generar de nuevo los ficheros de servidor para generar otro cliente? seria una locura….

    • http://www.lucianolagassa.com.ar Luciano Lagassa

      hola, para generar mas certificados hay que hacer los mismo pero saltando la parte del servidor, te pongo un ejemplo:
      cd /etc/openvpn/easy-rsa/2.0
      source ./vars
      ./clean-all
      ./build-key cliente
      sudo cp -R /etc/openvpn/easy-rsa/2.0/keys /etc/openvpn/

      es mas yo uso algo similar e incluso tengo un servidor vpn que tiene los certificados creados en otro equipo, asi tengo vpn redundante.

  • Iñigo

    Hola a todos, lo primero de todo dar las gracias por este manual. Me he puesto a hacerlo en mi ubuntu server 10.04 pero tengo este error,
    “admin@ks:~$ sudo modprobe tun
    [sudo] password for admin:
    FATAL: Could not load /lib/modules/2.6.38.2-grsec-xxxx-grs-ipv6-64/modules.dep: No such file or directory”

    Me pueden ayudar,

    • Francisco Javier

      Buenas Iñigo,

      Yo desde hace 3 dias, lo instalé sobre ubuntu-server 11.04 y NINGUN PROBLEMA. Todo a la primera.¿Porque no pruebas con el 11.04 ?Parece que la 10.04 no tiene el modulo que intenta cargar.

      Al autor del tutorial, tengo una pregunta. ¿Es posible restringir en el servidor para que únicamente pueda conectarse el cliente desde un host en concreto? ( mediante IP o un host dyndns.org por ejemplo )
      Si no es posible, ¿Como configuro para que, independientemente de que el cliente necesite los certificados, cuando conecte le pida en una ventana login (user&password) ? Es posible esto ultimo?

      Gracias.

  • Francisco Javier

    Buenas a todos de nuevo :)

    Despues de varias semanas conectandome al servidor VPN, he notado que no me dá DNS.

    Me conecto, accedo a los recursos escribiendo la IP privada, pero, automaticamente, dejo de navegar por la web.
    Si hago un ipconfig , me dá IP, GW, pero falta la DNS.
    ¿Podria añadirlo en el fichero de configuracion del demonio openvpn, o bien en la config del cliente?

    Gracias.

  • Migue

    Muchísimas gracias por el tuto!!! va genial!!!

    Lo único que no he conseguido es poder navegar sin que pase todo el trafico por el servidor.

    Quiero poner 30 maquinas en la vpn para mover ficheros de forma segura, pero si la navegación (web, mail, etc etc) de los clientes pasa toda por el server creare un cuello de botella e ira lento.

    Como dices en el manual he quitado la linea
    push “redirect-gateway def1″

    Reinicio la vpn y el trafico sigue pasando por el server…

    Muchas gracias de antemano por la ayuda!!!!

    • Francisco Javier

      ME encuentro con el mismo problema que tu tienes, he leido foros y webs, pero nada de lo que encuentro me funciona.

      Todo trafico pasa por el servidor VPN.
      Haber si alguien nos ilumina :)

      Un saludo

      • Migue

        He dado con la solución, muy poco ortodoxa y muy poco profesional. Pero ami me ha resuelto el problema….

        Como también tenia problemas para conectarme usando las redes que vienen con Ubuntu, gogleé sobre gui y openvpn y me encontré con KVpnc (esta en los repositorios) y ahí con cargar el fichero de configuración (no recuerdo como, pero me pareció muy muy fácil) conectó a la primera (aunque el trafico seguía pasando por el túnel)

        Cambiando solamente en settings-configure KVpnc-Network-Routes

        seleccione: Keep default route. en el 2º desplegable

        Espero que te sea útil.

  • Roberto

    ola excelente guía pero tengo un problema, hizo todo cual esta, creer el archivo del cliente y lo pegue dentro de la carpeta /etc/openvpn/keys/ donde también pegue los archivos de ca .crt y etc …, bueno luego de importar eso al network manager me sale el siguiente mensaje :

    The VPN conecction ‘usuario’ failed because there were no valid VPN secrets.

    Espero me puedan ayudar. muchas gracias de antemano

  • mattias

    hola spero me puedas ayudar sigo todo al pie de la letra pero a la otra de editar esta parte me marca gran error
    root@ubuntu:/etc/openvpn/easy-rsa/2.0# source ./vars
    bash: ./vars: línea 68: EOF inesperado mientras se buscaba un `”‘ coincidente
    bash: ./vars: línea 69: error sintáctico: no se esperaba el final del fichero
    root@ubuntu:/etc/openvpn/easy-rsa/2.0# ./clean-all
    Please source the vars script first (i.e. “source ./vars”)
    Make sure you have edited it to reflect your configuration.

    que puedo hacer

  • sesin

    hola no conosco mucho de redes pero deseo ayudar a mi cuñado en cuba el trabaja en una empresa como especialista de redes o algo asi
    lo cierto es que me ha pedido que instalara un proxy en
    mi PC para armar una VPN y conectarse a traves de mi
    no entiendo de esto por favor si me pudieras explicar e iluminarme en cuanto esto te lo agradeceria mucho

    • http://www.ubunlog.com Ubunlog

      sesin no soy el autor del post ni tengo idea del tema, pero entiendo que el tutorial de este post sería el que tienes que seguir para hacer eso que quieres hacer
      Saludos

    • http://www.lucianolagassa.com.ar Luciano Lagassa

      hola, la verdad para hacer lo que nos cuentas, tienes que poseer conocimientos de informatica y de redes. siguendo la guia al pie de la letra podras crear un servidor y un cliente vpn pero igualmente nose si podran saltarse el bloqueo que tiene dicho pais, espero que si pero no puedo asegurar que puerto podra pasar. muy probable que tengas que usar el puerto 80 para simular una web.

  • sesin

    muchas gracias luciano por tu respuesta
    y si me imagino que no sera facil sortear el bloqueo informatico de mi pais pero creo que lo intentare,
    profundizare mas en este mundo de las redes informaticas asi que espera nuevas inquietudes de mi parte,
    por favor espero que tengas paciencia
    una vez mas gracias

    <> Albert Einstein

  • sesin

    No entiendes realmente algo a menos que seas capaz de explicárselo a tu abuela.
    Albert Einstein