OpenVPN en Centos Linux VPS – Internet Privado

OpenVPN es una aplicación VPN libre al publico que permite crear y unirse a una red privada de forma segura a través de una red Internet pública. La idea es utilizar un servidor remoto para filtrar la conexión a Internet. Vamos a instalar y configurar OpenVPN en un servidor Centos.

Requisitos

  1. Servidor VPS Linux
  2. Acceso Root al servidor Linux
  3. Dominio o subdominio que resuelva a la IP del servidor. 

Antes de empezar debes instalar el repositorio EPEL. Open VPN no esta disponible por defecto en los repositorios de Centos. Epel es un repo adicional manejado por Fedora que contiene programas populares. 

yum install epel-release

Paso 1 – Instala OpenVPN

Primero debemos instalar OpenVPN. También instalaremos Easy RSA para generar el par de llaves SSL. 

yum install openvpn easy-rsa -y

Paso 2 – Configura OpenVPN

Vamos a copiar el archivo de configuración por defecto para utilizarlo como base nuestra. 

cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn

Abrimos el archivo con el editor vi 

vi / etc/openvpn/server.conf

No hay mucho que cambiar en en este archivo. La mayoria de lineas les vamos a quitar el comentario. Los demas cambios estan en rojo. 

Cuando vayamos a generarar nuestras llaves mas adelante, la encripcion por defecto sera de 2048bytes, lo que necesitamos cambiar el archivo dha dh2048.pem

dh dh2048.pem

Necesitamos quitarle el comentario a push «redirect-gateway def1 bypass-dhcp» – esta linea al cliente que rediriga el trafico por nuestro OpenVPN. 

push "redirect-gateway def1 bypass-dhcp"

Siguiente tenemos que proporcionar servidores DNS al cliente ya que no va a poder utilizar los servidores por defecto proporcionados por la compania de Internet. Vamos a usar los servidores DNS públicos de Google – 8.8.8.8 y 8.8.4.4. 

Has esto quitando el comentario a push «dhcp-option DNS» y actualizando la IP. 

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

Queremos que OpenVPN opere sin privilegios una vez iniciado, para ello tenemos que decirle que utilize el grupo nobody. Vas a tener que quitarle el comentario a las lineas:

user nobody
group nobody

Guarda y sal del archivo de configuración de OpenVPN. 

Paso 3 – Generando Llaves y Certificados

Ahora que tenemos el servidor configurado, vamos a tener que generar las llaves y certificados. Easy RSA instala unos scripts y genera esas y llaves y certificados. 

Vamos a crear un directorio para guardar las llaves

mkdir -p /etc/openvpn/easy-rsa/keys

Tambien necesitamos copiar los scripts que generan las llaves y certificados en el directorio

cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa

Para facilitarnos la vida, vamos a editar los valores por defecto que los scripts utlizan para no tener que hacerlo nosotros cada vez. Esta informacion se encuentra en los archivos vars – abramos estos para editarlos. 

vi /etc/openvpn/easy-rsa/vars

vamos a cambiar los valores que empiezan con KEY_. 

KEY_NAME: Aqui debes poner server – podrias utilizar otro valor pero luego vas a tener que actualizar los archivos de configuracion que hacen referencia – server.key y server.crt
KEY_CN: Aqui debes poner el dominio o subdomio que punte a tu servidor. 

Para los demas valores puedes introducir informacion relevante basado en tu uso

. . .

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="ES"
export KEY_PROVINCE="LPA"
export KEY_CITY="Las Palmas"
export KEY_ORG="Canariasagusto"
export KEY_EMAIL="canario@ejemplo.com"
export KEY_OU="Comunidad"

# X509 Subject Field
export KEY_NAME="server"

. . .

export KEY_CN=openvpn.ejemplo.com

. . .

También vamos a asegurar que OpenVPN se cargue incluso cuando su versión no es detectable. Vamos a hacer esto copiando el archivo de configuración y eliminando la versión. 

cp / etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

Para empezar a generar nuestras llaves y certificados vamos a dirigirnos al directorio de easy-rsa y introducir nuestras nuevas variables.

cd /etc/openvpn/easy-rsa
source ./vars

Luego vamos a limpiar cualquier llaves y certificados que estén en este directorio.

/.clean-all

Cuando vayas a construir el CA, se preguntaran toda la información que hemos puesto en el archivo vars anteriormente. Ya veras que toda la información esta por defecto. Solo tienes que apretar Intro para cada una. 

./build-ca

Lo siguiente es generar todas las llaves y certificados para el servidor. De nuevo, puedes darle a Intro. Al final le das a Y para guardar los cambios. 

./build-key-server server

Tambien tenemos que generar la llave de intercambio. Este comando puede tarde un par de minutos para que se complete.  

./build-dh

Y listo – Ya esta todo generado – ahora tienes que copiar todo al directorio de OpenVPN. 

cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn

Todos los clientes que se vayan a conectar necesitaran llaves y certificados. Vas a tener que crear llaves y certificados por seperado para cada uno. Asegúrate que los clientes tengan nombres descriptivos. En este caso vamos a utilizar maxk como el cliente. 

cd /etc/openvpn/easy-rsa
./build-key maxk

Y listo – esto es todo lo que hay que hacer para llaves y certificados. 

Paso 4 – Enrutamiento

Para dejar todo simplificado, vamos a utilizar iptables – y nos olvidamos del cortafuegos. 

Primero asegúrate de el servicio de IpTables esta instalado. 

yum install iptables -y

Siguiente vamos a anadir una nueva regla para reenviar nuestro routing a la subred de OpenVPN y guardaremos esta regla. 

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o venet0 -j SNAT --to-source IPPUBLICA
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source IPPUBLICA
service iptables save

Luego debemos habilitar IP Forwarding en sysctl. 

vi /etc/sysctl.conf

Y anade la siguiente linea de configuración

net.ipv4.ip_forward = 1

Luego reinica el servicio de red

systemctl restart network.service

Paso 5 – Iniciando OpenVPN

Estamos listos para usar OpenVPN. Vamos a anadir el servicio a systemctl

systemctl -f enable openvpn@server.service

Inicia OpenVPN

systemctl start openvpn@server.service

Todo esta listo por el lado del servidor. 

Paso 6 – Configuración del Cliente

Independiente de tu sistema operativo, tu sistema le hará falta una copia del certificado CA del servidor junto a la llave y certificado del cliente. 

Localiza los archivos en el servidor. Del cliente que creaste antes – yo cree unas llaves para el cliente maxk

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/maxk.crt
/etc/openvpn/easy-rsa/keys/maxk.key

Copia estos  archivos a tu sistema operativo. Puedes usar SFTP para descargar los archivos a tu PC/MAC o puedes copiar el contenido en un archivo de texto y guardarlo. 

Vamos a crear un archivo llamado client.ovpn con notepad. Este es un archivo de configuración para el cliente OpenVPN – indicando como conectar al servidor. Vas a tener que hacer unos cambios. 

  • Deja que la primera linea refleje client – solo tienes que configurar la ruta. – en mi caso – maxk
  • También tendrás que actualizar la dirección IP en el apartado de your_server_ip – el puerto lo puedes dejar igual. 
  • Asegura que la ruta a tus archivos en el servidor sean correctos. 

En mi caso el cliente se llamaba maxk

client
dev tun
proto udp
remote your_server_ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
ca /path/to/ca.crt
cert /path/to/maxk.crt
key /path/to/maxk.key

Este archivo ahora puede ser utilizado por cualquier cliente OpenVPN para conectarse al servidor. 

En windows la dirección del archivo ha de delimitarse con dos barras por ejemplo – C:\\Users\\usuarioprincipal\\vpn\\maxk.key

Enhorabuena, ya tienes una red virtual privada completamente operativa ejecutándose en tu servidor OpenVPN. 

Puedes realizar todos los pasos pero te hará falta un servidor vps linux que proporcione una conexión estable y sea robusto. Yo utilizo los servidores de EuroVPS, tienen sus servidores en Amsterdam y me proporcionan una latencia genial para toda Europa y los precios no están nada mal. 

* indicates required
Idioma / Language

Intuit Mailchimp

Kunal Sajnani
Kunal Sajnanihttps://canariasagusto.com/sobre
¡Hola! Soy Kunal, el autor de este blog. Soy un nerd informático, fotógrafo, diseñador web y cocinero de paso. No dejes que llegue aquel día en el que te arrepientas de no haber explorado o probado cosas nuevas. Con ese lema, voy blogueando a medida que descubro. ¡Sígueme en la aventura!

Latest articles

* indicates required
Idioma / Language

Intuit Mailchimp

Related articles

1 COMENTARIO

DEJA UNA RESPUESTA

Por favor introduzca su comentario.
Introduzca su nombre aqui

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.