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
- Servidor VPS Linux
- Acceso Root al servidor Linux
- 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.
Muchas gracias! me funciona de PM!