Instalar OpenVPN en Ubuntu, Hulu fuera de los Estados Unidos y seguridad en la Red

Sólo un idiota puede ser totalmente feliz.

Mario Vargas Llosa

Suscríbete al feed

Comentarios recientes

Hace algunos días escribí sobre Hulu, su restricción para usuarios fuera de los Estados Unidos y como utilizar una red privada virtual (VPN) con un servidor en ese país podía ayudarnos a conectar con el servicio.

Pero una VPN no sirve solo para acceder a servicios como Hulu o Pandora (aún cuando fue eso lo que me animó a dedicarle unas horas al tema), es mucho más que eso y es importante que todo aquel que pasa más de la mitad de su vida conectado a la Red (y esos son ustedes, queridos lectores) entienda el concepto.

Veamos cómo instalar OpenVPN en Ubuntu Gutsy.

Qué es una VPN

Una red privada virtual (virtual private network) es una red de comunicaciones canalizada a través de otra red y dedicada a un uso específico. Para nuestro caso esa otra red es Internet. Establecer una VPN que use una red pública como Internet permite eliminar los costos de contratar un enlace dedicado.

Pero Internet no es una red segura así que una VPN debe utilizar autenticación y encriptar el contenido que viaja a través de ella para evitar el uso de packet sniffers (software o hardware que puede interceptar el tráfico en una red insegura).

Utilizar una VPS puede sonar muy esotérico para muchos pero con el incremento de conexiones WiFi y hotspots inseguros en todo el mundo pronto será una necesidad para todos los que no quieren que su información viaje desnuda por la Red.

En el siguiente artículo veremos cómo instalar OpenVPN, una aplicación de código abierto para VPN, en Ubuntu 7.10. Son los pasos que seguí para conectar mis computadoras en Lima con uno de mis servidores en Nueva York y navegar la Red usando su IP. Ahora todos los sitios web y servicios que visito usando OpenVPN detectan mi conexión como si fuera hecha desde los Estados Unidos y todos mis datos viajan seguros.

Y aún con más de una decada trabajando con muchos tipos de redes no pretendo ser un experto en TCP/IP y seguridad o que este sea un tratado sobre el tema así que no puedo ofrecer asistencia técnica sobre el tema pero estoy que tendremos a varios especialistas que podrán aportar en los comentarios.

Instalar OpenVPN en Ubuntu paso a paso

Vale, aquí los pasos que seguí para instalar OpenVPN en un cliente y un servidor, ambos corriendo con Ubuntu 7.10 aunque el procedimiento debe ser muy parecido en otras distribuciones. Gracias a Javier Albarracín, Bruno Kamiche y César Villegas por los tips.

Primero definamos algunos puntos:

  • Servidor: es el equipo que aceptará las conexiones de los clientes a través de la VPN. En mi ejemplo usará el IP x.y.z.w (reemplaza por el IP público de tu servidor) y tiene como nombre servo.
  • Cliente: el equipo que se conectará al servidor a través de la VPN. Lo llamaremos cliento.
  • Red privada: la red que definiremos en nuestra VPN, usaremos 10.8.0.0 por lo que tendremos IP's como 10.8.0.1, 10.8.0.2, etc.
  • Todos los comandos deben ser ejecutados por root o través de sudo.
  • Los comandos que debes escribir están en negrita.
  • Para comentar una línea en openvpn.conf usa # al inicio de la línea.

Lo primero es instalar OpenVPN:

sudo apt-get install openvpn

OpenVPN se instala tanto en el cliente como en el servidor, el archivo de configuración que usaremos al iniciar OpenVPN más adelante definirá el rol de cada equipo.

Ahora comenta todas las líneas en /etc/default/openvpn y añade:

AUTOSTART="openvpn"

Esto le dice a OpenVPN cuál archivo de configuración predeterminado utilizará al iniciar el servicio. Los archivos de configuración se guardan en /etc/openvpn y usan la extensión .conf por lo que la instrucción de arriba le dice a OpenVPN que use /etc/openvpn/openvpn.conf, es un archivo que aún no existe y que crearemos en un momento.

Ahora el servicio OpenVPN puede ser iniciado, detenido o reiniciado en la forma usual, veamos:

Iniciar OpenVPN:

/etc/init.d/openvpn start

Detener OpenVPN:
/etc/init.d/openvpn stop

Reiniciar OpenVPN:
/etc/init.d/openvpn restart

Cada vez que se cambian parámetros en /etc/openvpn/openvpn.conf se debe reiniciar OpenVPN.

Crear claves y certificados

Pero antes de continuar crearemos los certificados y claves de seguridad. Todo esto se hace en el servidor como root. Ejecuta:

cd /etc/openvpn/

Y ahora copia el directorio easy-rsa a /etc/openvpn:

cp -r /usr/share/doc/openvpn/examples/easy-rsa/ .

Recuerda que seguimos en el directorio /etc/openvpn. Ahora editaré el archivo vars con nuestro editor favorito (reemplaza vi con el que tú prefieras):

vi easy-rsa/vars

Comenta esta línea:

#export D=pwd

Añade esta:
export D=/etc/openvpn/easy-rsa

Y modifica los siguientes parámetros:

export KEY_COUNTRY=PE
export KEY_PROVINCE=LI
export KEY_CITY=Lima
export KEY_ORG="Nombre-OpenVPN"
export KEY_EMAIL="tu-nombre@example.com"

Graba y cierra el archivo.

Ahora ejecuta:

. ./vars

Importante, eso es un punto, un espacio y luego otro punto y seguido por /vars. Muchos lo olvidan.

A continuación:
./clean-all

El siguiente comando crea la autoridad de certificados (CA) usando los parámetros arriba definidos, solo deberás añadir Common Name, yo usé OpenVPN-CA. Este paso usa OpenSSL y si no lo tenías en tu servidor deberás instalarlo primero con:

sudo apt-get install openssl

Ahora sí:

./build-ca

Ahora creamos las claves, primero para el servidor:

./build-key-server server

Esta parte es muy importante. Cuando build-key-server te solicite Common Name escribe server, el mismo parámetro que le diste al comando.

Hay dos preguntas más: Sign the certificate? [y/n] y 1 out of 1 certificate requests certified, commit? [y/n], responde afirmativamente en ambos casos.

Y ahora la clave para el cliente:

./build-key client1

Recuerda usar client1 como Common Name, al igual que el parámetro que usaste para build-key.

Si vas a tener más clientes puedes repetir este último paso para client2, client3, etc.

Ahora genera parámetros Diffie Hellman:

./build-dh

Ahora debes tener un nuevo directorio con claves y certificados en tu servidor: /etc/openvpn/easy-rsa/keys. Para configurar tu primer cliente copia los siguientes archivos de servo a cliento:

ca.crt
client1.crt
client1.key

Lo ideal es usar un canal seguro, yo prefiero scp con autenticación RSA (tema para otro artículo), ejecutando algo como esto en el cliente:

scp alexis@servo:ca.crt .
scp alexis@servo:client1.crt .
scp alexis@servo:client1.key .

Estos comandos asumen que copiaste los archivos al directorio personal del usuario alexis en el servidor y les asignaste permisos de lectura. Luego debes moverlos a /etc/openvpn en el cliente.

Los archivos de configuración: openvpn.conf

Aún en el cliente crea un archivo llamado openvpn.conf en /etc/openvpn y escribe lo siguiente en él:

dev tun
client
proto tcp
remote x.y.z.w 1194
resolv-retry infinite
nobind
user nobody
group nogroup

# Try to preserve some state across restarts.
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo

# Set log file verbosity.
verb 3

No olvides reemplazar x.y.z.w por el IP público de tu servidor.

Ahora en el servidor crea un archivo openvpn.conf en /etc/openvpn y escribe lo siguiente en él:

dev tun
proto tcp
port 1194

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem

user nobody
group nogroup
server 10.8.0.0 255.255.255.0

persist-key
persist-tun

#status openvpn-status.log
#verb 3
client-to-client

push "redirect-gateway def1"

#log-append /var/log/openvpn
comp-lzo

En mi primeras pruebas tuve conexiones muy lentas y me ayudó desactivar la compresión en cliente y servidor comentando esta línea:

#comp-lzo

Y finalmente configura IP forwarding e iptables para NAT en el servidor:

echo 1 > /proc/sys/net/ipv4/ip_forward

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Puedes verificar que la regla fue escrita correctamente con un listado:
sudo iptables -L -t nat

Si tienes un Firewall deberás desactivarlo para probar y luego crear reglas que permitan que el tráfico de tu VPN pase.

Si quieres remover todas las reglas si cometiste un error con:
sudo iptables -F -t nat

Reiniciar OpenVPN en ambos equipos, cliente y servidor, y deberías estar listo.

Si ahora ejecutas ifconfig y route -n deberías ver una nueva interfaz, tun0, en cliente y servidor.

Puedes confirmar que hay conexíon haciendo ping entre ambos usando los IP de las interfaces tun0, por ejemplo:

ping 10.8.0.1

Ahora tu cliente está conectado al servidor a través de OpenVPN y puedes navegar en forma segura a través del IP del servidor (y usar Hulu y Pandora).

Suerte.

Recursos adicionales

<

ul>

  • QuickStart de OpenVPN
  • Ayuda de OpenVPN para Ubuntu
  • Ayuda sobre IPTables para Ubuntu
  • <

    ul>

    Participa en la discusión

    Perfecto Gracias

    Horale esta muy bueno tu tutorial estaba buscando por la red como montarme un servidor VPN y me encontre con tu tutorial resulta que quiero montar una red privada gracias lo probare :)

    Excelente Tutorial

    Hola de antemano muchas gracias por el tutorial, realmente llevaba tiempo intentando hacer una vpn con openvpn y no habia podido pero ahora ya lo pude hacer.

    Sigan publicando tutos como este muy claros a la hora de aplicarlos y solo tuve una pequeña perdida cuando se generan los certificados pero lo unico es ubicarse en la carpeta de easy-rsa.

    Gracias....

    Vienen más tutoriales en camino

    Tan pronto encuentre el tiempo :)

    Saludos.

    Alexis Bellido

    Gracias por el articulo ;)

    Hey Alexis, excelente articulo, la verdad que me ha servido de much, ahora ya no tengo que reiniciar mi router 20 veces para acceder al panel de administración de mi vps en VPSland(https://cp.vpsland.com/cp), no se porque motivo nunca me podia conectar a la primera, pero ahora con la IP de USA si todo va bien y ademas disfruto de Pandora ;).

    Saludos.

    Gracias de verdad!!!

    Muchas gracias por este excelente tutorial...... estaba necesitando urgentemente esta informacion para mi trabajo de grado y no encontre nada tan bueno cono este. Muchas gracias por la claridad, y correcta explicacion.

    Mil gracias

    hola a todos alguien sabe

    hola a todos
    alguien sabe como tener un ip de suramerica vivo en italia y quisiera ver la tele con terratv pero me da que el contenido no esta disponible en mi region
    gracias

    Install OpenVPN on Ubuntu

    Sure, here it is: how to install OpenVPN on Ubuntu.

    Cheers!

    Alexis Bellido

    Una duda

    Hola antes que nada excelente el tutorial en verdad pero mi duda es den la parte donde se asigna la IP publica bueno Yo no tengo una Ip publica asi directamente es decir Yo uso un ISP TELMEX y este me da un madsl/modem 2wire....entonces no se que poner en la parte de IP publica o como configurar el 2wire con OpenVPN.

    Si me pueden orientar mil gracias.

    El IP público es el de tu servidor

    La configuración en este artículo asume que tienes un servidor hospedado en los Estados Unidos, allí corre la parte de servidor de OpenVPN.

    Alexis Bellido

    dudas con las ip locales

    Hola, intente conectarme tal cual esta en el manual y lo logre, pero al tratar de accesar/buscar equipos no me lo permite, ni responde ping, no se si sea por la ip local de mi servidor que es 192.168.2.4 asignado por DHCP(192.168.2.1).
    entonces mi pregunta seria, que debo modificar? o como deberia de quedar mi archivo openvpn.conf.

    dejo me correo por si alguien me puede ayudar, muchas gracias
    jon.delafuente@gmail.com

    Tabla de ruteo ?

    Estimado... que excelente tutorial !!!
    Nada mas tengo un pequeño problema, cuando arranco la VPN si bien puedo acceder a la red remota como si se tratase de una LAN, mi maquina cliente deja de navegar por Internet, lo cual estimo que se debe a que en mi red remota, donde esta el servidor VPN tengo un router que bloquea todas las salidas excepto las que yo permito, he intentado activar las salidas de la red 10.8.0.0 por ejemplo para ver que pasa pero sigue igual.
    de todas maneras me gustaría que la VPN sirva para acceder a recursos remotos pero que mi maquina cliente siga navegando Internet desde mi conexión y no desde la que tiene el servidor VPN, es posible eso ?
    Me parece que el tema podria venir por la tabla de ruteo, ya que cuando activo la VPN se agrega un Default Gateway (ademas del que ya tengo) y la maquina deja de nagegar totalmente, excepto por la LAN remota la cual funciona perfecto...
    Te agradezco si me puedes hechar una mano en lo que haya que modificar para que funcione.
    Muchas gracias y felicitaciones !

    problemas

    perdon pero cuando ejecuto el comando /build-key-server server al final de la configuracion me sale este error

    Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
    /etc/openvpn/easy-rsa/keys/index.txt: No such file or directory
    unable to open '/etc/openvpn/easy-rsa/keys/index.txt'
    28368:error:02001002:system library:fopen:No such file or directory:bss_file.c:352:fopen('/etc/openvpn/easy-rsa/keys/index.txt','r')
    28368:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:354:

    me podrias decir que es lo que esta mal

    No me arranca el servicio de openVPN

    Buenos dias,

    Antes de nada, felicitarte por facilitar el trabajo a mucha gente, en este caso a mi, me ha sido de verdadera utilidad, por fin, comprendo este tema un tanto tedioso. No obstante e seguido tus pasos y los he repetido 2 veces, para asegurarme, todo va , ok , pero cuando decido arrancar el servicio openvpn, me dice FAILED:

    root@VPN:/etc/openvpn/easy-rsa/1.0/keys# /etc/init.d/openvpn restart
    * Stopping virtual private network daemon. [ OK ]
    * Starting virtual private network daemon. * openvpn (FAILED)

    No lo entiendo diria que esta todo ok, lo unico que he tenido que modificar era el path de $D que en mi caso las keys estavan dentro de
    etc/openvpn/easy-rsa/1.0/keys

    Podrias ayudarme?
    Muchas gracias!!
    Eduard

    Revisa el log de openvpn

    Es probable que allí encuentres una indicación de cuál es el problema. También pueden probar quitando líneas, comentándolas en realidad, de tu archivo openvpn.conf e intentando reiniciar el servicio hasta encuentres quien es el culpable del problema.

    Suerte.

    Alexis Bellido

    Revisando logs de mi server vpn

    Hola Alexis,

    Gracias por tu temprana respuesta.
    Perdona que te vuelva a molestar, pero se trata de un pedido urgente y trato de salir como puedo de esta,jejej.
    Mira revise los logs de openvpn y me indica este error:
    --server directive network/netmask combination is invalid

    Podrias ayudarme,please?
    Diria que todo lo tengo bien.
    Te comento que el cambio que he echo simplemente es que en vez de 10.8.0.0 he puesto la ip local del servidor 192.168.x.x en el archivo de .conf del server y que en la tabla de ruta puse esto:

    sudo iptables -t nat -A POSTROUTING -s 192.168.x.x/24 -o eth0 -j MASQUERADE

    Puede ir por aqui el problema? el resto todo me ha ido ok.

    Gracias de nuevo Alexis.
    Un saludo
    Eduard

    COMO REVOCAR LOS CERTIFICADOS

    Saludos buen tuto me sirvio mucho
    pero tengo una duda me podrias decir como le hago para revocar un certificado segun otra guia tendria que usar este comando

    ./revoke-full Angel

    Using configuration from /etc/openvpn/easy-rsa-V2.0/openssl.cnf
    error on line 282 of config file '/etc/openvpn/easy-rsa-V2.0/openssl.cnf'
    16431:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:629:line 282
    Using configuration from /etc/openvpn/easy-rsa-V2.0/openssl.cnf
    error on line 282 of config file '/etc/openvpn/easy-rsa-V2.0/openssl.cnf'
    16432:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:629:line 282
    cat: crl.pem: No existe el fichero o el directorio
    cliente1.crt: /C=CL/ST=RM/L=Santiago/O=Metalklesk's enterprise/CN=cliente1/emailAddress=damorales@gmail.com

    error 3 at 0 depth lookup:unable to get certificate CRL

    que puedo hacer en ese caso segun me imagino el archivo
    crl.pem no existe o no he especificicado el directorio donde se encuentra como puedo resolver eso es eso lo que esta mal o es otra cosa de ser asi como creo el archivo crl.pem hasta hace poco logre descubrir que tenia que ejecutar este comando primero ./openssl.cnf para que me apareciera el archivo conf de openssl no se si es igual con este caso me podrias explicar como se hace para revocar los certificados

    saludos

    VPN Arrancada!

    Hola Alexis, consegui arrancar la vpn del servidor con la misma conf que dices tu en el post. pero en la parte cliente no me arranca, no se que puedo tener mal, cuando dices que pongamos ip remota del servidor, interpreto que debo poner la ip publico del servidor al que intento conectarme.
    En ningun momento he creado la interfaz tun en el cliente, deberia hacerlo?. como sabe que tiene q levantar esa interfaz si no le digo.

    Jo en el cliente simplemente e copiado los certificado a la carpeta /etc/openvpn/ y les e dado permisos i luego e copiado tu .conf de cliente y nadarrr!!
    jejej

    Podrias ayudarme?
    Thanks
    Eduard

    VPN con un solo cliente

    Muy buenas Alexis,

    Mira ya he conseguido que la VPN funcione, todo me va ok!, miro los logs, y aparezco y los pings funcionan y las conexiones contra ese servidor funcionan bien.
    Pero hay varias cosas que no entiendo:
    - Porque solo puede haver un cliente activo en la VPN?, siempre que se añade uno, echa al otro y coge su ip. Me gustaria saber si se puede tener varios clientes a la vez.
    - La segunda es que cada vez que me conecto a la VPN pierdo el internet de mi ordenador. Esto es normal?

    Gracias y saludos!!

    Hola que tal, sabes que estoy

    Hola que tal, sabes que estoy dando el comando

    sudo echo 1> /proc/sys/net/ipv4/ip_forward

    pero me sale permiso denegado, y lo intento cambiar desde el archivo pero igual no me lo deja guardar, que puede ser disculpa???

    gracias por la ayuda

    ¿El usuario está en la lista

    ¿El usuario está en la lista de sudoers para obtener permisos de root? Es la única razón que creo podría causar el problema.

    Muy bueno este articulo, me

    Muy bueno este articulo, me ha servido mucho, pero tengo una duda. Como hago exactamente para copiar los archivos:

    ca.crt
    client1.crt
    client1.key

    Yo los copio usando scp

    Yo los copio usando scp (secure copy) en la línea de comandos. Puedes usar cualquier otro método.

    Muchas gracias por el trabajo

    Muchas gracias por el trabajo que te has tomado Alexis. Yo estoy empezando con esto del Linux y mis preguntas son quizás un poco inocentes. He llegado hasta el momento de crear los archivos de .conf . Se asume que hay un servidor en Estados Unidos... ¿Pero de dónde se saca esa información? He probado buscando con Google, pero nada...

    ¿Algúna página que pueda leer al respecto? Un saludo,

    Isidro

    El servidor del que hablo es

    El servidor del que hablo es uno que tienes hospedado en algún centro de datos o proveedor de web hosting en los Estados Unidos, es tu servidor.

    Ok. Gracias. Entonces supongo

    Ok. Gracias. Entonces supongo que no puedo hacer nada...
    Tendré que seguir escuchando last.fm a través del XP virtualizado con Hotspot Shield... Pero nadie podrá decir que no lo he intentado. :-)

    Ya tengo configurado mi

    Ya tengo configurado mi servidor pero solo se conecta con un cliente y en realidad son varios los clientes que requiero que se conecten entre si a traves del servidor, ¿qué puedo hacer?

    Hola, tengo mi openvpn

    Hola, tengo mi openvpn montado, mil gracias, PERO tengo un problema, desde el cliente puedo ver todas las máquinas que tengo en el lado del server pero desde las máquinas del server no puedo ver las del cliente, algúna sugerencia?

    Como aporte pongo a

    Como aporte pongo a disposición el siguiente articulo http://www.juanpablo.netne.net/index.php/en/manuales-linux/red-privada-v... ahi realize una descripcion completa de istalacion de servidores openvpn

    hola me interesa utilizar

    hola me interesa utilizar este programa con el mismo proposito que isidoro, asi que mi pregunta es:¿que parte del tuto devo hacer para modificar mi proxy?
    ¿que debo hacer para que cuando me conecte a cualquier paguina esta piense que soy de estados unidos y no de mi pais de origen???
    AYUDA

    Hola! vivo en China y esto

    Hola! vivo en China y esto puede ser mi salvacion!

    tengo una duda de novato pero cuando dices

    Recuerda que seguimos en el directorio /etc/openvpn. Ahora editaré el archivo vars con nuestro editor favorito (reemplaza vi con el que tú prefieras):

    vi easy-rsa/vars

    realmente no sé que escribir en la terminal. realmente no conozco el editor vi... me podrías decir cual es la línea completa a escribir en el terminal?

    mil gracias!

    Publica comentarios relevantes, usa español correcto y no envíes publicidad. Creemos discusiones en las que valga la pena participar. Puedes usar Markdown.

    Tu comentario