En pasados post vimos como podíamos crear muy fácilmente nuestro propio servidor VPN mediante el protocolo pptp.
https://geekland.eu/crear-un-servidor-vpn-pptp/
Pudimos constatar y experimentar que la instalación y configuración del servidor era sumamente sencilla y era altamente compatible con la totalidad de sistemas operativos existentes, pero como punto negativo también vimos que a día de hoy pptp presenta serios problemas en lo que a la seguridad se refiere.
Por lo tanto a toda la gente que necesite un VPN para la transmisión de información sensible no le recomiendo el uso del protocolo pptp. Le recomiendo el uso del protocolo OpenVPN. Para ver como instalar y configurar este tipo de servidor VPN tan solo tienen que seguir los pasos que vamos a definir a continuación.
TIPO DE CONFIGURACIÓN VPN QUE VAMOS A USAR
Hay distintas formas de configurar un servidor mediante OpenVPN. Los distintos tipos de configuración existentes son Host to Host, Road to Warrior (Host to LAN) y Net to net. Nosotros nos focalizaremos en el Road to Warrior o Host to LAN, por ser el más popular de todos y el que seguramente se adaptar a prácticamente las necesidades de de cualquier usuario.
La configuración Road to Warrior (Host to LAN mediante túnel) permitirá que múltiples dispositivos u ordenadores se puedan conectar simultáneamente a nuestra red VPN y compartir recursos e informaciones con la red a que se conectan. Por lo tanto en este caso tenemos varios clientes que se pueden conectar de forma independiente al servidor VPN. Para quien precise de más información acerca de este tipo de configuración puede consultar el siguiente enlace.
La configuración Host to Host, a diferencia del modo de configuración anterior, únicamente nos permitirá la conexión entre 2 máquinas o dispositivos conectados a Internet o dentro de una red local. Por lo tanto en este caso solamente existe un cliente y un servidor. Además estás 2 máquinas o dispositivos no podrán compartir recursos e informaciones con otros equipos que estén conectados en la misma red LAN.
Para finalizar tenemos la configuración Net to Net, Red-red, o LAN to LAN. Esta configuración mayoritariamente es usada en el mundo empresarial. Esta configuración lo que hace es unir redes locales (LAN) ubicadas en distintas ubicaciones geográficas para de esta forma poder compartir información entre todos los clientes de todas las redes. De este modo cada una de las redes locales LAN tiene un punto de acceso o puerta de enlace que proporciona un canal de transmisión seguro entre 2 o más redes.
ASEGURAR QUE EL SERVIDOR OPENVPN TENGA IP FIJA EN LA RED LOCAL
Es muy importante asegurar que nuestro servidor disponga de una IP interna fija en la red local. Es importante porqué cuando recibamos una petición de los clientes VPN, el router tendrá que saber a que IP interna tiene que redireccionar la petición del cliente VPN.
Para conseguir disponer de un servidor con ip interna fija tan solo tienen que seguir los pasos que se detallan en el siguiente enlance:
https://geekland.eu/configurar-ip-fija_o_estatica_ipv4/
Nota: El método descrito en el enlace es válido en el caso que estéis usando un servidor sin entorno gráfico. En el caso que el servidor que uséis disponga de entorno gráfico tendréis que configurar este aspecto a través de las interfaces visuales de vuestro gestor de red que probablemente será network manager o wicd.
Una vez terminados la totalidad de pasos mi servidor tendrá una IP fija que en mi caso será la 192.168.1.188. Esta IP es la que deberemos usar para que el router redireccione las peticiones de los clientes al servidor OpenVPN.
REDIRECCIONAMIENTO DINÁMICO NO-IP
Cuando tengamos nuestro servidor VPN funcionando, lo más probable es que tengamos conectarnos desde el exterior de nuestra local red local mediante el servidor VPN.
Para conectarnos a nuestra red local tendremos que saber nuestra IP Pública pero desafortunadamente en la gran mayoría de casos la IP que tenemos es dinámica. Por lo tanto se puede dar perfectamente el caso que en el momento de conectarnos no sepamos la IP Pública de nuestro servidor.
Para solucionar este problema tenemos que asociar la IP Pública de nuestro servidor a un dominio. Para poder realizar este paso tan solo tienen que seguir las indicaciones del siguiente enlace:
https://geekland.eu/encontrar-servidor-con-dns-dinamico/
Una vez realizados estos pasos tendréis vuestra IP Pública asociada a un dominio. En mi caso mi IP Pública está asociada al dominio geekland.sytes.net
INSTALACIÓN DEL SERVIDOR
La instalación del servidor la vamos a realizar en un sistema operativo Debian Wheezy. La totalidad del procedimiento descrito tiene que funcionar en cualquier distribución que derive de Debian como pueden ser Ubuntu, Crunchbang, Linux Mint, Kubuntu, etc.
Para instalar el servidor OpenVPN lo primero que tenemos que hacer es abrir una terminal. Dentro de la terminal teclean el siguiente comando:
sudo apt-get install openvpn openssl Ahora ya tenemos instalado el servidor.
CREAR UNA AUTORIDAD DE CERTIFICACIÓN
OpenVPN es un protocolo de VPN basado SSL/TLS mediante certificados y claves RSA creadas mediante openssl. Por lo tanto el nivel de seguridad proporcionado por OpenVPN es muy elevado.
Al ser un protocolo que funciona bajo certificados y claves necesitaremos crear una autoridad de certificación para a posteriori generar los certificados.
Nota: La principal función de una autoridad de certificación es la de emitir y revocar certificados digitales para terceros. Para quien necesite más información puede consultar el siguiente enlace.
Crear el certificado raíz ca para firmar y revocar los certificados de los clientes
Para poder emitir y revocar la claves necesitamos crear nuestra propia autoridad certificadora y disponer de nuestro certificado raíz ca.ctr y de nuestra clave ca.key para poder crear y firmar las claves de los clientes y del servidor.
Para realizar este paso, y el resto de pasos, ejecutoriaremos los scripts que OpenVPN trae incorporados de serie. Para ello tenemos que crear una carpeta con nombre easy-rsa dentro de la ubicación /etc/openvpn. Para ello abrimos una terminal y tecleamos el siguiente comando:
cd /etc/openvpnmkdir easy-rsa
Seguidamente tenemos que copiar los scripts de configuración de OpenVPN, que se hallan en la ubicación /usr/share/doc/openvpn/examples/easy-rsa/2.0/, dentro de la carpeta easy-rsa que acabamos de crear. Para ello en la terminal tecleamos el siguiente comando:
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* easy-rsa Una captura de pantalla los pasos realizados hasta el momento se puede ver a continuación:
En el caso que que vuestra distro trabaje con la versión 3 de easy-rsa, en el momento de introducir el último comando, obtendréis un error parecido al siguiente error:
cp: no se puede efectuar `stat’ sobre «/usr/share/doc/openvpn/examples/easy-rsa/2.0/*»: No existe el archivo o el directorio
Los pasos a realizar para solucionar este error son los siguientes. En la terminal escriben el siguiente comando para instalar el paquete easy-rsa.
apt-get install easy-rsa Seguidamente borran la carpeta easy-rsa que habíamos creado inicialmente introduciendo el siguiente comando en la terminal:
rm -R /etc/openvpn/easy-rsa Finalmente para obtener los scripts para la creación de claves en la terminal introducimos el siguiente comando:
make-cadir /etc/openvpn/easy-rsa Nota: Algunas de las distros que funcionan con easy-rsa 3.0 son Ubuntu 14.04, Linux Mint 16, etc.
Para ejecutar los scripts que acabamos de copiar o de obtener, tenemos que ir a la ubicación donde los guardamos. Para ello ingresamos el siguiente comando en la terminal:
cd /etc/openvpn/easy-rsa Antes de ejecutar los scripts editaremos el fichero vars para modificar una serie de parámetros. Para modificar el fichero vars se tiene que introducir el siguiente comando en la terminal:
nano vars Tamaño de las claves
Una vez abierto el editor de texto tenemos que localizar y modificar la siguiente línea:
export_KEY_SIZE=1024
Una vez encontrada la sustituyen por la siguiente linea:
export_KEY_SIZE=2048
Nota: Con esta modificación estamos incrementando el tamaño de la claves privadas (.key) que vamos a generar y también del parámetro de Diffie Hellman. Con esta modificación incrementarios del tamaño de las claves de 1024 bits a 2048 bits. También seria posible usar 4096 bits. Este parámetro no tiene porqué penalizar en exceso el rendimiento del servidor. Únicamente penalizará el proceso autentificación Handshake de SSL/TLS.
Datos de la entidad emisora de los certificados
Seguidamente tenemos que introducir los datos de la entidad emisora de los certificados que seremos nosotros mismos Para ello tenemos que localizar las siguientes lineas:
export KEY_COUNTRY=”US”
export KEY_PROVINCE=”CA”
export KEY_CITY=”SanFrancisco”
export KEY_ORG=”Fort-Funston”
export KEY_EMAIL=”me(arroba)myhost.mydomain”
export KEY_EMAIL=mail(arroba)host.domain
export KEY_CN=Changeme
export KEY_CN=Changeme
export KEY_OU=Changeme
Una vez localizadas las lineas tan solo se tienen reemplezar el contenido por defecto por nuestros datos reales. En mi caso los datos a rellenar podrían ser:
export KEY_COUNTRY=”ES” “Poner las 2 iniciales de tu país”
export KEY_PROVINCE=”CA” “Poner las 2 iniciales de tu provincia”
export KEY_CITY=”s*******a” “Poner el nombre de tu ciudad”
export KEY_ORG=”geekland” “Poner el nombre de la organización”
export KEY_EMAIL=”xxxxxxx(arroba)gmail.com” “Usar vuestra dirección de email”
export KEY_EMAIL=xxxxxxx(arroba)gmail.com “Usar vuestra dirección de email”
export KEY_CN= wheezy “Usar el nombre del host del servidor”
export KEY_NAME=vpnkey “Designa el nombre de la entidad certificadora que se creará”
export KEY_OI=IT “Departamento de la empresa”
Nota: Dentro de este fichero también podemos configurar el tiempo de validez que tendrá nuestra entidad certificadora y el tiempo de validez que tendrán los certificados y claves que crearemos. El valor estándar de validez son 3650 días que no voy a tocar.
Una vez modificado el archivo vars guardamos los cambios y lo cerramos. Ahora tendremos que exportar sus variables. Para exportar sus variables tenemos que teclear el siguiente comando en la terminal:
source ./vars Seguidamente ejecutaremos el script clean-all. El script clean-all borrará la totalidad de claves que podrían existir en la ubicación /etc/openvpn/easy-rsa/keys. Para ejecutar el script tenemos que teclear el siguiente comando en la terminal:
./clean-all El siguiente paso es generar los parámetros de Diffie Hellman. Los parámetros de Diffie Hellman se utilizarán para poder intercambiar las claves ente cliente y servidor de forma segura. Para poder realizar este paso tenemos que teclear el siguiente comando en la terminal:
./build-dh Al terminar el proceso dentro de la ubicación /etc/openvpn/easy-rsa/keys se habrá creado el archivo dh2048.pem que contiene los parámetros Diffie Hellman.
Nota: Para quien requiera información adicional de los parámetros de Diffie Hellman puede consultar el siguiente enlace. Este parámetro se usará poder un intercambio de claves entre 2 participantes de forma segura.
En la siguiente captura de pantalla podrán ver una muestra de los pasos realizados hasta el momento:
Finalmente vamos a a crear el certificado y la clave privada de nuestra propia autoridad certificadora. Para ello tenemos que teclear el siguiente comando en la terminal:
./build-ca Durante el proceso de creación se les hará una serie de preguntas para incorporar información dentro del certificado que se creará. Como anteriormente hemos editado el fichero vars ahora solo nos tenemos que limitar a aceptar el valor por defecto de las preguntas que nos hacen.
Al terminar el proceso dentro de la ubicación /etc/openvpn/easy-rsa/keys se ha creado ca.crt y ca.key:
ca.crt: Es el certificado raíz público de la autoridad de certificación (CA)
ca.key: Este fichero contiene la clave privada de la autoridad de certificación (CA). Este archivo debe mantenerse protegido y no debe estar al alcance de terceros.
Una vez creado el certificado y la clave de vuestra autoridad certificador la pantalla de vuestro ordenador tiene que presentar el siguiente estado:
CREAR EL CERTIFICADOS Y LA CLAVE DEL SERVIDOR OPENVPN
A estas alturas ya lo tenemos todo listo para poder crear el certificado y clave de nuestro servidor. Para ello introducimos el siguiente comando en la terminal:
./build-key-server whezzyVPN Nota: whezzy VPN es el nombre del servidor. Vosotros tenéis que introducir el nombre que vosotros queráis.
Una vez introducido este comando se nos hará una serie de preguntas. Simplemente tienen que contestar el valor por defecto ya que anteriormente hemos modificado el archivo vars.
Al terminar el proceso dentro de la ubicación /etc/openvpn/easy-rsa/keys se habrán creado los siguientes archivos:
whezzyVPN.key: Este fichero contiene la clave privada del servidor. Este archivo no debe estar al alcance de nadie.
whezzyVPN.crt: Este fichero corresponde al certificado público del servidor.
whezzyVPN.csr: Este archivo es la petición de certificado que se envía a la autoridad de certificación. Mediante la información que contiene el archivo .csr, la autoridad de certificación podrá realizar el certificado del servidor una vez hayan realizado las comprobaciones de seguridad pertinentes.
Una vez creado el certificado y la clave del servidor la pantalla de vuestro ordenador tiene que presentar el siguiente estado:
CREAR EL CERTIFICADO Y LAS CLAVES DE LOS CLIENTES
El siguiente paso es crear los certificados y las claves de los clientes que se podrán conectar al servidor VPN. Para ello tenemos que teclear el siguiente comando en la terminal:
./build-key usuariovpn Nota: usuariovpn es el nombre de usuario que vamos a crear. En vuestro caso tendréis que reemplazar usuariovpn por el nombre que queráis.
Una vez introducido este comando se nos hará una serie de preguntas. Simplemente tienen que contestar el valor por defecto ya que anteriormente hemos editado el fichero vars.
Al terminar el proceso dentro de la ubicación /etc/openvpn/easy-rsa/keys se habrán creado los siguientes archivos
usuariovpn.key: Este fichero contiene la clave privada del cliente. Este archivo no debe estar al alcance de nadie.
usuariovpn.crt: Este fichero corresponde corresponde al certificado público del servidor.
usuariovpn.csr: Este archivo es la petición de certificado que es envía a la autoridad de certificación. Mediante la información contenida en el archivo .csr, la autoridad de certificación podrá realizar el certificado del cliente una vez hayan realizado las comprobaciones de seguridad pertinentes.
Nota: El procedimiento de generación de clientes se deberá repetir tantas veces como clientes queráis que tenga el servidor OpenVPN.
Una vez creado el certificado y la clave del cliente, la pantalla de vuestro ordenador tiene que presentar el siguiente estado:
FORTIFICAR LA SEGURIDAD DEL SERVIDOR OPENVPN CON TLS-AUTH
Nota: Esto paso en principio no es necesario pero lo realizaremos para incrementar la seguridad de nuestro servidor VPN.
Ahora generamos otra clave. Esta clave nos servirá para agregar soporte para usar la autentificación TLS y de este modo fortificar la seguridad del servidor VPN. Para generar la clave para poder fortificar el servidor se tiene que introducir el siguiente comando en la terminal:
cd /etc/openvpn/easy-rsa/keys Una vez hemos accedido a la ubicación /etc/opnevpn/easy-rsa/keys tecleamos el siguiente comando:
openvpn --genkey --secret ta.key Justo al ejecutar el comando, Como se puede ver en la captura de pantalla, se generará una clave con el nombre ta.key en la misma ubicación dónde hemos aplicado el comando.
La clave creada servirá para introducir una firma digital HMAC en todas las transacciones del protocolo handshake de SSL/TLS entre el cliente y el servidor. De esta forma podremos verificar la integridad de los paquetes intercambiados entre el cliente y el servidor VPN, y en el caso que un cliente intente conectarse al servidor VPN sin poseer la clave para firmar los paquetes la conexión se rechazará automáticamente. Además con el uso de autentificación TLS también conseguiremos prevenir los siguientes ataques:
- Ataques de denegación de servicio DoS.
- Ataques de denegación de servicio por inundación UDP al puerto del VPN.
- Escaneo de puertos en nuestro servidor para intentar averiguar vulnerabilidades.
UBICACIÓN DE LAS CLAVES GENERADAS
A estas alturas hemos generado multitud de claves y certificados. Si se han seguido los pasos detalladamente, la totalidad de claves se hallan en la ubicación /etc/openvpn/easy-rsa/keys.
Anteriormente ya he detallado el uso de cada una de la claves. Seguidamente pasaré a detallar la ubicación de cada una de las claves:
| Archivo | Descripción | Ubicación | Secreto |
| dh2048.pem | Parámetros Diffie Hellman | Servidor (/etc/openvpn) | Sí |
| ca.crt | Certificado raíz de la entidad certificadora | Servidor (/etc/openvpn) y cliente | No |
| ca.key | Clave de la entidad certificadora | Servidor (/etc/openvpn) | Sí |
| whezzyVPN.key | Clave del servidor VPN | Servidor (/etc/openvpn) | Sí |
| whezzyVPN.crt | Certificado del servidor VPN | Servidor (/etc/openvpn) y cliente | No |
| whezzyVPN.csr | Archivo de petición de certificado | Servidor (/etc/openvpn) | No |
| usuariovpn.key | Clave privada del cliente VPN | Cliente | Sí |
| usuariovpn.crt | Certificado del cliente VPN | Cliente | No |
| usuariovpn.csr | Archivo de petición de certificado | Servidor (/etc/openvpn) | No |
| ta.key | Clave para la Autentificación TLS | Servidor (/etc/openvpn) y cliente | Sí |
Nota: Tienen que trasladar cada una de las llaves mencionadas en las ubicaciones que se detallan en el cuadro. Recuerden transmitir y trasladar las claves y certificados del servidor al cliente por un canal seguro.
ASEGURAR QUE LAS PETICIONES DNS SE REALIZAN POR EL VPN
Otro punto a contemplar para asegurar que nuestro servidor VPN sea seguro es que nadie pueda capturar nuestras peticiones DNS para saber donde nos estamos conectando.
Nota: Quien no sepa que son las peticiones DNS puede consultar el siguiente enlace.
Para que nadie capture nuestras peticiones DNS lo que realizaremos es canalizar la totalidad de nuestras peticiones a través del túnel del servidor OpenVPN. Así las peticiones DNS se enviarán al servidor VPN de forma cifrada y será el servidor OpenVPN el encargado de resolverlas. Para poder realizar lo que acabo de describir lo primero que tienen que realizar es instalar dnsmasq. Para poder instalar dnsmasq teclean el siguiente comando en la terminal:
apt-get install dnsmasq Una vez instalado dnsmasq lo tenemos que configurar para que escuche las peticiones DNS dirigidas al servidor VPN. Para ello accedemos al archivo de configuración introduciendo el siguiente comando en la terminal:
nano /etc/dnsmasq.conf Una vez abierto el editor de texto introducen las siguientes líneas:
listen-address=127.0.0.1,10.8.0.1bind-interfaces
Nota: Introduciendo la primera línea lo que estamos haciendo es que Dnsmasq solamente tenga en cuenta las peticiones DNS que se dirijan a las interfaces [lo]: 127.0.0.1 y [tun0]: 10.8.0.1 que es la de nuestro servidor VPN.
Nota: Con la segunda línea estamos habilitando que dnsmasq tenga la capacidad de escuchar solo determinadas interfaces como por ejemplo las dos que hemos definido antes. La [lo] 127.0.0.1 y la [tun0] 10.8.0.1
Ahora tan solo tienen que guardar los cambios y salir del archivo de configuración. La configuración ha terminado y solamente hace falta reiniciar los servicios openvpn y dnsmasq. Para ello teclean los siguientes comandos en la terminal:
/etc/init.d/openvpn restart/etc/init.d/dnsmasq restart
Es posible que cuando reinicien los servicios o arranquen el sistema vean un error parecido al de la captura de la pantalla:
Starting DNS forwarder and DHCP server: dnsmasq
dnsmasq: failed to creat listening to socket for 10.8.0.1: No se puede asignar la dirección solicitada.
Esto error es debido a que Dnsmaq arranca antes de que se cree la interfaz [tun0]. Por lo tanto cuando intenta escuchar la interfaz [tun0] nos dará el error porqué [tun0] no existe. Para solucionar este problema y que dnsmasq puede realizar su función tan solo tiene que modificar el archivo /etc/rc.local. Para ello en la terminal escriben:
nano /etc/rc.local Se abrirá el editor de textos y ahora, debajo de las reglas de iptables tan solo tienen que escribir:
/etc/init.d/dnsmasq restart Una vez realizado este paso guardan el fichero y salen. Introduciendo esta linea lo que estamos haciendo es reiniciar el servicio dnsmasq una vez se han ejecutado la totalidad de scripts de inicio (init). De este modo cuando se reinicialice dnsmasq la interfaz [tun0] ya estará levantada.
Nota: Para que dnsmasq funcione tienen que tener configurado el servidor VPN tal y como se detalla en el apartado Configurar el servidor.
CONFIGURAR EL SERVIDOR OPENVPN
Existen ficheros de configuración standard que deberían funcionar out of the box y que podemos aprovechar para realizar nuestra configuración. Los ficheros de ejemplo que podemos usar para ver la totalidad de opciones que tenemos disponibles se hallan comprimidos en la siguiente ubicación ubicación:
/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
Para consultarlos teclear el siguiente comando para acceder a la ubicación de este archivo:
cd /usr/share/doc/openvpn/examples/sample-config-files Seguidamente copiamos el archivo comprimido que dispone de los archivos de muestra de configuración en la ubicación /etc/openvpn. Para ello tecleamos el siguiente comando:
cp -a /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ Seguidamente accedemos a la ubicación donde hemos copiado el archivo comprimido que contiene los archivos de configuración:
cd /etc/openvpn Para descomprimir el archivo que contiene los archivos de configuración tecleamos:
gunzip server.conf.gz Una vez descomprimido el archivo ya podemos consultar los ejemplos de configuración tanto del cliente como del servidor. Para ver y modificar la configuración estándar para adaptarla a nuestras necesidades tienen que teclear el siguiente comando en la terminal:
nano server.conf Se abrirá el editor de texto en el que podrán ver de forma detallada las opciones de configuración de ejemplo del servidor. Ahora tendréis que comprobar que la totalidad de parámetros que se muestran en la tabla de este apartado estén dentro del fichero de configuración de ejemplo que es el que vamos a usar. En el caso de que los parámetros estén comentados habrá que descomentarlos, en el caso que no existen se deberán añadir y/o modificar.
| Parámetro | Descripción |
|---|---|
| dev tun | Dispositivo virtual en el cual se creara el túnel. |
| proto udp | Protocolo de la conexión VPN. También podríamos usar el tcp. |
| port 1194 | Puerto de escucha del servicio. El puerto de escucha se puede modificar. |
| ca ca.crt | Certificado de la autoridad certificadora que creamos. |
| cert whezzyVPN.crt | Certificado del servidor que hemos creado. |
| key whezzyVPN.key | Clave privada del servidor que hemos creado. |
| dh dh2048.pem | Carga de los parámetro de Diffie Hellman. |
| Server 10.8.0.0 255.255.255.0 | Indicamos que a los clientes del VPN se les asignará IP del tipo 10.8.0.0/24 |
| ifconfig-pool-persist ipp.txt | Se crea un fichero ipp.txt en el que se registran las IP de los clientes que se conectan al servidor VPN. |
| push “route 192.168.1.0 255.255.255.0” | Con esta línea hacemos que los paquetes que tengan como destino la red 192.168.1.0 viajen por la interfaz del túnel (tun0). De esta forma el cliente VPN se podrá comunicar con cualquier máquina de la red 192.168.1.0. |
| keepalive 10 120 | El servidor VPN enviará un ping cada 10 segundos y como máximo esperará 120 segundos para que el cliente de una contestación. |
| tls-aut ta.key 0 | Activación de la autentificación TLS en el servidor. |
| comp-lzo | Activar compresión LZO para la transmisión de datos. |
| max-clients 10 | Número máximo de clientes que se pueden conectar de forma simultanea. El valor se puede modificar según las necesidades. |
| user nobody | Para limitar los privilegios del demonio de VPN hacemos que funcione con el usuario nobody. |
| group nogroup | Para limitar los privilegios del demonio de VPN hacemos que funcione con el grupo nogroup. |
| push “redirect-gateway def1” | Para que la totalidad de tráfico vaya a través de nuestro VPN |
| push “dhcp-option DNS 10.8.0.1” | Estamos definiendo que las peticiones DNS de los clientes se hagan a través del servidor VPN ubicado en 10.8.0.1 |
| cipher AES-256-CBC | Por defecto el algoritmo de cifrado de OpenVPN es Blowfish con un tamaño de clave de 128 bits. Quien crea que no es suficiente puede añadir esta línea para cambiar el algoritmo de cifrado a AES con un clave de cifrado de 256 bits. Para ver todos los algoritmos de cifrado disponibles teclear openvpn –show-ciphers en la terminal. |
| persist-key | En caso que el servidor OpenVPN se caiga las claves no tendrán que ser analizadas de nuevo. |
| persist-tun | El dispositivo tun0 no tendrá que ser reabierto ni cerrado en el caso que tengamos que reiniciar el servidor. |
| status openvpn-status-log | Log donde se guardará información respecto al túnel creado. |
| plugin /usr/lib/openvpn/openvpn-auth-pam.so /etc/pam.d/login | Activación del script encargado de realizar la autenticación del usuario y del cliente. (Ver el apartado “Autentificación del cliente mediante usuario y password”) |
| verb 3 | Grado de detalle del estado del túnel en los logs. |
Una vez tenemos listo el fichero de configuración tan solo tenemos que guardar los cambios y cerrarlo.
Nota: Si queremos que los clientes que estan conectados al servidor VPN puedan comunicarse entre ellos tenemos que añadir la frase client-to-client en el fichero de configuración del servidor.
Nota: Si leéis con detalle el fichero de configuración podréis aplicar configuraciones distintas a las que se detallan en el post.
Nota: La configuración propuesta en este apartado se tendrá que adaptar a las características de vuestra red y a vuestras necesidades.
CONFIGURAR EL CLIENTE OPENVPN
Una vez configurado el servidor ahora pasaremos a configurar el cliente. Para ello dentro de la ubicación /etc/openvpn tecleamos el siguiente comando:
nano client.conf Se abrirá el fichero de configuración en el que podrán ver un ejemplo de configuración para un cliente estándar. Aseguramos que el fichero de configuración estándar tenga los parámetros que se muestran en la tabla de este apartado. En caso de no tenerlos habrá que añadirlos manualmente, en el caso de que los parámetros estén comentados habrá que descomentarlos y en el caso que no existan se deberán añadir y/o modificar.
| Parámetro | Descripción |
|---|---|
| dev tun | Dispositivo virtual en el cual se creara el túnel. |
| proto udp | Protocolo de transmisión de paquetes del servidor VPN. Se puede usar TCP. |
| remote geekland.sytes.net 1194 | Dirección IP pública/Host DNS dinámico y puerto de escucha del servidor VPN. El puerto 1194 se puede cambiar. Si lo cambiamos deberemos adaptar el resto de configuraciones al nuevo puerto |
| resolv-retry infinite | El cliente intentará de forma indefinida resolver la dirección o nombre de host indicado por la directiva remote (geeekland.sytes.net). |
| nobind | A los clientes se les asignará puertos dinámicos (no privilegiados) cuando haya retorno de paquetes del servidor al cliente. |
| user nobody | Para limitar los privilegios de los clientes que se conectan al VPN les asignamos el usuario nobody. (no necesario para windows) |
| group nogroup | Para limitar los privilegios de los clientes que se conectan al VPN les asignamos el grupo nogroup. (no necesario para windows) |
| persist-key | En caso que el servidor OpenVPN sea reiniciado no se tendrán que volver a leer las claves. |
| persist-tun | El dispositivo tun0 no tendrá que ser reabierto ni cerrado en el caso que tengamos que reiniciar el cliente Vpn. |
| ca ca.crt | Certificado de la autoridad certificadora que creamos |
| cert usuariovpn.crt | Certificado del cliente |
| key usuariovpn.key | Clave privada del cliente |
| ns-cert-type server | Para prevenir ataques man in the middle. Con esta frase hacemos que los clientes solo puedan aceptar un certificado de servidor del tipo servidor “nsCertType=server”. En este campo podríamos aplicar otras alternativas similares como por ejemplo «remote-cert-tls server«. |
| tls-auth ta.key 1 | Activación de la autentificación TLS en el cliente. |
| cipher AES-256-CBC | Por defecto el algoritmo de cifrado de OpenVPN es Blowfish con un tamaño de clave de 128 bits. Quien crea que no es suficiente puede añadir esta línea para cambiar el algoritmo de cifrado a AES con un clave de cifrado de 256 bits. Para ver todos los algoritmos de cifrado disponibles teclear openvpn –show-ciphers en la terminal. |
| auth-user-pass | Para indicar que el cliente tiene que introducir un nombre de usuario y un password. |
| auth-nocache | Para evitar que los password queden almacenados en la memoria cache de los clientes. |
| comp-lzo | Activar compresión LZO para la transmisión de datos. |
| verb 3 | Grado de detalle del estado del túnel |
AUTENTIFICACIÓN DEL CLIENTE MEDIANTE LOGIN Y PASSWORD
A pesar de toda la seguridad que hemos implementado hasta el momento podría darse el caso que alguien robará nuestro ordenador. Si alguien robará nuestro ordenador, teléfono o tablet podría encontrarse con la totalidad de nuestras claves criptográficas y de esta forma podría acceder fácilmente a nuestra red.
Para solucionar este problema vamos a introducir un usuario y un password para los clientes de nuestro servidor vpn. Para ello tan solo tenemos que añadir uno o los usuarios que queramos.
Para añadir un usuario, como por ejemplo el usuariovpn2, tienen que teclear el siguiente comando en la terminal:
useradd usuariovpn2 -M -s /bin/false Una vez creado el usuario tenemos que definir un password del usuariovpn2. Para ello tecleamos el siguiente comando en la terminal:
passwd usuariovpn2 Una vez introducido el comando nos pedirá que introduzcamos la clave de usuario y después nos pedirá confirmación.
En el caso que a posteriori se precise eliminar el usuariovpn2 tan solo tienen que introducir el siguiente comando en la terminal:
deluser usuariovpn2 Seguidamente en la siguiente captura de pantalla pueden ver un resumen de los pasos realizados:
Nota: Para que la autentificación mediante usuario y password funcione tienen que tener configurado el servidor y el cliente tal y como se detalla en los apartados Configurar el servidor y configurar el cliente.
CONFIGURAR IPTABLES PARA EL ENRUTAMIENTO DE PETICIONES
Cuando el servidor OpenVPN reciba las peticiones de los clientes se deberán enrutar adecuadamente, y además tendremos que tener configurar el firewall de nuestro equipo para que permita el tráfico a través del túnel que se ha creado ente el cliente y el servidor.
Para ello lo primero que tenemos que hacer es habilitar el IP forwarding. Para habilitar el IP Forwading de forma permanente tecleamos el siguiente comando en la terminal:
nano /etc/sysctl.conf Se abrirá el editor de textos y seguidamente tendremos que localizar la siguiente linea:
#net.ipv4.ip_forward=1
Una vez localizada tan solo hay que descomentarla de forma que quede de la siguiente forma:
net.ipv4.ip_forward=1
Guardamos los cambios y cerramos el archivo.
Una vez habilitado el Ipforwarding tenemos que permitir el tráfico por nuestro túnel VPN, y además tenemos que hacer que los clientes VPN puedan acceder a redes externas públicas y otras subredes dentro de la red VPN. Para poder conseguir esto en la terminal escriben el siguiente comando:
nano /etc/rc.local Una vez se abra el editor de textos tienen que escribir las siguientes reglas en nuestro firewall
iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPTiptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Nota: En función de las características de vuestra red y configuración de vuestro firewall es posible que tenga que implementar reglas adicionales a las que se muestran en este ejemplo.
Con la primera de las reglas estamos permitiendo el tráfico por el dispositivo virtual en que que se crea el túnel.
Con la segunda de las reglas estamos permitiendo que los paquetes provenientes de 10.8.0.0/24 pueden enviarse o salir por la interfaz de salida eth0.
Con la tercera de las reglas estamos diciendo al servidor OpenVPN que cuando reciba una petición de cualquiera de los clientes, proceda el mismo a resolverla y enviarla en representación del cliente.
Una vez finalizando el proceso guardan el archivo y cierran el editor de textos. Antes de cerrar el archivo el fichero /etc/rc.local tendrá un aspecto parecido al siguiente:
CONFIGURAR EL ROUTER Y ABRIR EL PUERTO DEL SERVIDOR OPENVPN
Ya para finalizar solo nos falta configurar nuestro router, para que redirija las peticiones de los clientes al servidor Opevpn, y abrir el puerto del servidor OpenVPN. Para realizar esto tenemos que abrir nuestro navegador y teclear nuestra puerta de entrada. Una vez realizado esto, tal y como se puede ver en la captura de pantalla, se abrirá una ventana en que nos pedirá nuestro nombre de usuario y contraseña:
Una vez introducida la información accederemos a la configuración de nuestro router. Seguidamente, tal y como se puede ver en la captura de pantalla, tenemos que acceder a los menús Advanced / NAT / Virtual Servers:
Seguidamente presionamos el botón Add y nos aparecerá la siguiente pantalla:
Tal y como se puede ver en la captura de pantalla, en en el campo custom server hay que escribir un nombre cualquiera. En mi caso como se puede ver en la captura de pantalla he escrito OpenVPN. Seguidamente en el campo Server IP Address tenemos que escribir la IP del servidor OpenVPN. En mi caso tal y como se puede ver en la captura de pantalla es la 192.168.1.188. Finalmente tal y como se puede ver en la captura de imagen seleccionamos el protocolo UDP y escribimos el puerto de nuestro servidor OpenVPN (1194) en los puertos internos y externos.
Presionamos el botón Apply/Save y de esta forma todas las peticiones exteriores que lleguen a nuestro router por el puerto 1194 serán redirigidas a nuestro servidor OpenVPN.
COMO CONECTARNOS AL SERVIDOR OPENVPN
Seguidamente dejo una serie de enlaces en los que explico de forma detallada los pasos a seguir para conectarnos a nuestro servidor Openvpn en el caso de estar usando los siguientes sistemas operativos:
Siguiendo las instrucciones de los enlaces que acabo de dejar podremos comprobar fácilmente el funcionamiento de nuestro servidor Openvpn.
SEGURIDAD QUE NOS APORTARÁ EL SERVIDOR OPENVPN
Si se configura el servidor Openvpn, tal y como se detalla en el post, se obtendrá un nivel de seguridad muy elevado y resultará prácticamente invulnerable frente a ataques.
La seguridad que aportará el servidor OpenVPN que acabamos de configurar estará compuesta por 3 capas:
Capa 1 “Autentificación TLS”: Con la autentificación TLS estamos introduciendo una firma digital HMAC a los paquetes antes de empezar la autentificación reciproca entre cliente y servidor. Si no se pasa el test de la firma HMAC, no se llegará ni a iniciar el proceso de autenticación entre cliente y servidor.
Capa 2 “SSL/TLS”: Mediante las herramientas de seguridad proporcionadas SSL/TLS se realiza el proceso de autentificacion bidireccional entre el cliente y el servidor OpenVPN mediante claves criptográficas.
Capa 3 “Cifrado”: Dispone de varios tipos de cifrado disponibles en la transmisión de datos entre el cliente y el servidor. Además podemos aplicar medidas para los privilegios del demonio de OpenVPN sean los mínimos para poder realizar la función que tiene que realizar.
Todas estas características, más las que se detallan en el post, hacen que OpenVPN sea una opción muy válida para la transmisión segura de datos sensibles. Por esto motivo OpenVPN es el protocolo que utilizan muchas organizaciones en el mundo empresarial. Además OpenVPN es una solución multiplataforma y dentro de lo que cabe no es difícil de configurar si lo comparamos con por ejemplo Ipsec.
En lo que a seguridad se refiere también tenemos que destacar que aparte de las 3 capas de seguridad, también hemos implementado un método para que los clientes del VPN tengan que introducir un usuario y un Password. Además la totalidad del tráfico, incluyendo la resolución de las peticiones DNS, será a través del servidor OpenVPN que acabamos instalar y de configurar.
Cabe decir que actualmente no se conocen vulnerabilidades importantes en este tipo de servidor VPN. Es posible que se descubran vulnerabilidades pero si vamos aplicando las actualizaciones de seguridad no deberíamos tener problema alguno en lo que a seguridad se refiere.
Ver los comentarios (125)
En mi caso estoy empezando a vivir censura en mi país. Puedo hacer que el servidor vpn se conecte a Internet a tor y yo conectarme a él? Como lo haría?
Estimado,
Con algunos amigos (para que sea más económico) lo que pueden hacer es contratar un VPS en algún otro país y crear su VPN entre sus equipos y el VPS
Sin duda lo que propone es una buena opción. Saludos
Muy bueno el Post, la verdad es muy claro, y me ha sido muy fácil seguirlo. Solamente me falta aprender a conectarme desde otros sistemas operativos para poder comprobar el correcto funcionamiento del servidor VPN ¿Publicarás pronto los posts que explican como conectarse desde diversos sistemas operativos?
Hola Claudio, Muchas gracias por el feedback. Si no pasa nada en aproximadamente un mes deberían estar publicadas las instrucciones para conectarse en el servidor VPN en la totalidad de sistemas operativos más comunes. Android, iOS, Windows y Linux.
Si alguién me regala un Mac también publicaré las instrucciones para Mac.
Saludos y buen fin de semana.
Espero puedas tenerlas antes de un mes. Al menos las instrucciones de como conectarse desde Windows o Android. Si pudieras enviarme alguna indicación al correo de como realizar la conexión desde dichos sistemas operativos... Si lo haces te regalo un Mac.
Excelente Tutorial muy completo y bien redactado, Me ha servido bastante para una necesidad que tenia pendiente. Gracias.
Es un tutorial de lujo hermano. Me gustó tu manera de redactarlo y las pantallas son muy didácticas. Si te parece te puedo complementar con la configuración del cliente openVPN para Windows y Android para que la puedas acoplar, ya que yo trabajo 100% con OpenVPN.
Diego gracias por tu ayuda
Actualmente estoy trabajando en redactar unas instrucciones para poder configurar los clientes en los diferentes sistemas operativos. La semana que viene tendré listo iOS y después iré trabajando en el resto.
Saludos
Genial tu explicación. Me quedo muy claro y está muy bien redactado. Espero el de Windows para poder implementarlo en un lugar que me encargaron.
Gracias
Hola Alberto
Gracias por el feedback.
Si esperas que publique como conectarse al servidor mediante un cliente de Windows en breve dispondrás de esta información.
Si esperas que publique el mismo tutorial pero usando Windows en vez de Linux te informo que en principio no tengo planificado hacerlo.
Saludos
El como conectarse al servidor mediante Windows.
Muchas gracias por tu respuesta.
Este fin de semana saldrá para iOS.
Después iré con Windows.
Un saludo y buen fin de semana.
Hola buenas, como puedo conectarme al servidor openVPN en linux ? Lo tienes subido ya? Muchas gracias. Un saludo
Hola Buenas. De momento solo está disponible para Windows y para iOS. En breve lo subiré para Linux y finalmente para Android.
Saludos
Hola que tal en la parte donde coloco el siguiente comando cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa
Me arroja este error y no puedo continuar.
cp: no se puede efectuar `stat' sobre «/usr/share/doc/openvpn/examples/easy-rsa/2.0/*»: No existe el archivo o el directorio
Espero y me ayudes a resolver esto por favor
Hola Juan
No se si te podré ayudar mucho. Mejor explicado de lo que está en el artículo no lo se explicar.
¿Qué sistema operativo usas?
¿Has instalado openvpn y openssl?
¿Has mirado si las carpetas a las que acceden existen?
Si no entiendes lo que estás haciendo te costará llegar hasta el final del tutorial y que todo funcione bien. Tendrás que tener paciencia y poner horas de dedicación por tu parte ya que el copiar, pegar no funciona porqué muchas veces aparecen puntos en que los tienes que adaptar a tu caso.
Saludos
Felicidades por el blog y Gracias por este artículo tan bien explicado. Me estás salvando la vida.
Ha caído en mis manos un Debian Wheezy con OpenVPN virtualizado con WMware junto con tres windows 2008 server. Vamos un caramelo.
Todo funciona OK. Los usuarios de windows se conectan a la vpn con su contraseña pero ahora tengo que añadir otro usuario y de linux ni papa.
Dos dudas a ver si me puedes ayudar:
1- Entiendo que directamente voy al paso crear el certificado y las claves de los clientes. Creo un usuario nuevo con ./build-key usuariovpn pero la serie de preguntas que hace como averiguo el contenido del fichero vars si no lo cree yo?
2- Cuando termine de crear al usuario, como saco los archivos del Debian? no tiene entorno gráfico, y este comando cp /etc/openvpn/keys/* /media/usb no funciona..
se agradece cualquier ayuda.
Hola Juan Carlos. Respecto a tu pregunta no se como será el debian que te cayo en tus manos. Lo de caer en tus manos tiene una ventaja y un problema ya que ahora tienes un servidor openvpn, pero como no lo instalaste tu mismo, ahora tienes estas dudas. En el post detallo la ubicación del archivo vars. En el caso que no exista la ubicación del archivo vars por tener la versión de easy-rsa 3.0, también explico como generar los archivos para crear las claves y entre ellos está el vars. Las claves no las podrás crear si tu servidor no tiene los scripts de easy-rsa.
Para sacar las claves con una memoria USB y la explicación que hago para conectarse a los clientes de iOS o de Windows te debería ser suficiente. Está explicado paso por paso y si lo haces bien y como está explicado te tiene que funcionar. Si no te funciona mira que tengas VMware configurado para que te detecte los USB.
Un saludo
Gracias por los consejos Joan Carles.
Pero me crecen los enanos, se ve que ayer caduco el dyndns que teníamos y se ha tostado el openvpn, me pide contraseña, la acepta pero el cliente se queda con los dos iconos en amarillo con el letrero "conecting" y de ahí no pasa.
He editado con nano el client.conf y he cambiado el la línea donde estaba el host de dyndns por la IP fija que he contratado. pero no se soluciono el problema.
Me puedes echar un cable???
Hola Buenas
Quizás sea un problema de firewall. ¿Tienes bien configurado el firewall y tu router para redireccionar tus peticiones al servidor OpenVPN?
La verdad si no es esto no se que puede ser. Los cambios a realizar son mínimos y lo que has hecho me parece correcto.
Prueba distintos clientes para ver si el problema se reproduce con todos los clientes.
Mi duda es si después de modificar el client.conf tengo que volver generar los archivos para los usuarios. Es decir lo que es guarda en la carpeta config. Si ha cambiado la ip del rooter como sabe el openvpn de los usuarios en que dirección esta el servidor?
No tienes que crear claves nuevas para los clientes. Las que tienes sirven.
No se si tu servidor Openvpn tiene fines comerciales o no. Si tienes fines comerciales deberás informar a todos tus clientes del cambio de IP y pasarles el nuevo archivo de configuración con la nueva IP que espero que sea fija. Con esto cada cliente sabrá al servidor donde tiene que apuntar.
Saludos
Para actualizar el repositorio si el siguiente comando no funciona:
sudo apt-get install openvpn openssl
Con el siguiente comando lo arreglan:
sudo apt-get update && sudo apt-get install ethtool
Una consulta, ¿cuándo redactarás para configurarlo en android?
No lo se. Intento escribir cuando me apetece más que cuando planeo. La explicación para conectarse en Android pienso que es la más complicada de las 4 que me plantee realizar.
Pienso que en unos o 2 meses debería estar la explicación redacta.
Una consulta, he realizado los pasos según la configuración indica. Me conectan los usuarios, pero solo el primero que se conecta llega a tener comunicaciones con el server.
Pero los otros se conectan, les da ips, pero no llegan a tener comunicación con el server, ¿qué puedo haber hecho mal ?
No entiendo lo que que te pasa. Si se conectan quiere decir que tienen conexión con el servidor y tu me dices que se conectan y no tienen conexión con el servidor.
No entiendo lo que te pasa y no se que puedes estar haciendo bien o mal. Si un cliente te va bien y otros no quizás sea tema de que el cliente esté mal configurado.
Saludos
que el servidor OpenVpn le asigna direcciones ip a los clientes, pero solo el primero puede hacer ping al servidor y los demás no pueden.
La información que proporcionas es incompleta. Dudo que yo mismo ni nadie más te pueda ayudar con la información que proporcionas.
Escribo sólo para agradecer tu trabajo y animarte a completarlo (que parece que no te apetece mucho ;) ) con la conexión en Android que personalmente espero para probar.
Un saludo y ánimo.
Hola no se si haya un vídeo de referencia. Es la primera vez que uso Openvpn.
No me sale lo de hacer los certificados.
¿Si tengo una Ip estática como podría usar VPN en una red local(en mi propia casa)?
¿Y como comparto archivos comparto archivos con winscp?
gracias
De vídeos en youtube encontrarás. Pero que te pueda recomendar no se ninguno.
Lo de los certificados está explicado paso por paso. Solo tienes que seguir las instrucciones. Mejor no lo se detallar.
Si quieres testear el funcionamiento en tu red local tan solo tienes que introducir la ip interna del servidor en el fichero de configuración del cliente. En vez de la ip pública pones la Ip Interna.
No se lo que es winscp pero he buscado y veo que es un cliente ftp. Ftp no tiene nada que ver con openvpn. Si te quieres conectar al servidor openvpn lee en el post que lo explica. Te aconsejaría sustituir winscp por Filezilla.
Por tus preguntas creo que no solo eres nuevo en Openvpn. Creo que deberías ampliar tus conocimientos sobre redes. Sin unos conceptos mínimos dudo que puedas armar el servidor. Aunque siempre puedes copiar y pegar y debería funcionar...
Saludos
Hola Joan Carles.
En primer lugar, felicitarte por la gran calidad de tu Blog. Es un placer encontrar personas como tú en la red, dispuestas a ayudar sin dejar de lado
el rigor y el buen hacer.
Por otra parte me gustaría saber si me puedes aclarar una duda. Tengo que montar una red VPN en mi empresa ya que tenemos varias oficinas en distintos lugares geográficos.
He leído tus post sobre el tema, pero me surge una duda. En los post hablas de montar un servidor VPN y yo creía que lo único que hacía falta era un router con conexión VPN para montar la red. ¿Son necesarios los dos elementos, router y servidor, o uno excluye al otro?. Además, ¿Es necesario que los routers en ambos extremos de la red (oficinas) tengan conexión VPN?
Gracias por tu respuesta.
Hola Buenas,
Hay Routers que traen incorporado el servidor VPN. Tendrás que mirar los protocolos VPN que soporta el router, la conexiones simultaneas de clientes que soportan, etc. Los Routers también requerirán de configuración. Si el nombre de clientes es bajo con 2 o más Router deberías tener suficiente para lo que quieres hacer.
También es posible usar un router normal y corriente y tener un servidor virtual o real que actúe como servidor VPN.
Yo mucho más no te puedo decir. El informático y quien tiene que montar esto eres tu. Yo por suerte o por desgracia no soy informático ni me dedico a ello.
Saludos
Para configurar el cliente openvpn también tenemos que coger la configuración de ejemplo el el directorio /usr/share/doc/openvpn/examples/sample-config-files/client.conf
y editarla en este otro directorio /etc/openvpn/
Has dicho que copiemos el server.conf pero no el client.conf, me imagino que el archivo que editaremos cuando nos pides que modifiquemos el cliente es el archivo client.conf que tenemos que copiar también en el directorio /etc/openvpn/
Es por matizar :)
Gracias por tu trabajo me ayuda muchísimo, gracias!!!
Depende Antonio. Hay versiones de Openvpn en que el fichero de configuración del cliente se halla en /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz. Por lo tanto al mismo tiempo que copiamos el fichero de ejemplo del servidor también copiamos el del cliente. Este es el caso de Debian.
En el caso de Mint 17 o Ubuntu 14.04 si que tienes razón. Hay que trasladar el fichero de muestra del cliente porqué está separado del servidor. El Fichero de muestra del cliente se halla en la siguiente dirección:
/usr/share/doc/openvpn/examples/sample-config-files/client.conf
Saludos
Buena te cuento, logro seguir y hacer todos los pasos que detallas en la guía, al conectar desde mi android al servidor no logro tener acceso a internet.
¿Qué pude haber echo mal?, Además en la aplicación de android solo me sale que solo envío paquetes, pero no recibo desde el servidor. Saludos y buen día.
Pues si sigues los pasos de la guía y te paso esto es que algún paso no está bien realizado.
Si puedes enviar paquetes pero no los puedes recibir tu problema es probable que el firewall de tu servidor no esté redirigiendo las peticiones de forma adecuada.
Quizás también pueda ser algún parámetro de la configuración del servidor. Tendrás que volver a repasar paso por paso lo realizado entendiendo lo que haces en cada momento. Con la información proporcionada poco más puedo decir.
hola , tengo una gran pregunta. Yo tengo sistema windows.
¿Cuál es el programa que tengo que descargar para poder editar los server ?
No acabo de entender tu pregunta. ¿Qué es esto de editar el server?
Si quieres hacer lo mismo que el tutorial pero en Windows te aconsejo que mires en la web oficial de Openvpn. Para serte sincero en Windows no se como se hace y en estos momentos tampoco me interesa saber como se hace. Para el 100% de servidores que montes GNU Linux es infinitamente superior a Windows en todos los aspectos.
Hola, esta genial tu tutorial, me servio mucho con lo del TLS/auth, sabes como son los pasos después de las configuraciones de servidor y clientes, para windows server, pues lo he montado ahi y me gustaría hacer lo del dns y lo demás que comentas, claro si es posible hacerlo, sin mas me despido. Gracias
Estimado Amigo;
primero que todo, felicitarte por el excelente post, debo decirte que en gran medida me he valido de lo que has presentado aquí para configurar mi servidor vpn en windows, soy recién un principiante en esto y quizás lo que te pregunte sea tonto, pero ya he recorrido por varias horas la web sin encontrar respuesta a mi inquietud, la cual quiero hacerte presente:
Para la autentificación de clientes mediante login y password, tu presentas este comando: useradd usuariovpn2 -M -s /bin/false ; mi pregunta es, este es el mismo comando que debo usar en mi consola de comando en win para generar la misma regla que tu propones?
hay alguna variante a considerar exepto usuariovpn2?
por favor, me gustaría que me orientaras y me eches una mano.
Desde ya te agradezco por este excelente post.
Hola,
No sabia que la mayoría de cosas funcionarían en Windows. Nunca he usado windows para configurar un servidor.
El comando useradd diría que en Windows no funciona porqué este comando diría que solo funciona en sistemas Unix o derivados de Unix. Pero lo puedes probar por si acaso no? Si quieres un equivalente en windows simplemente no lo se. Si alguien lo sabe que lo ponga.
Referente a lo de las variantes no se muy bien a lo que te refieres. Pero te puedo decir que puedes crear tantos usuarios como quieras. Así que si tienes el usuariovpn2 y quieres crear otro usuario no tendrás problema alguno.
Saludos
Buenas,
tienes un error en la ruta:
Pones:
plugin /usr/lib/openvpn/openvn-auth-pam.so /etc/pam.d/login
Pero debería ser:
plugin /usr/lib/openvpn/openvpn-auth-pam.so /etc/pam.d/login
Y el ta.key se debe copiar a "/etc/openvpn"
Jordi, Gracias por tus aportaciones. Durante este fin de semana solucionaré los puntos que mencionas.
Gracias excelente tutorial. tengo un problema con
sudo apt-get install openvpn openssl
sudo: apt-get: command not found
lo estoy haciendo en centos 6.5 no quiero instalar de otra forma porque quiero seguir este tutorial cual seria la solución gracias
Hola. CentOS no utiliza el gestor de paquetes apt-get. Si no voy mal usa yum. Por lo tanto usa los comandos equivalentes con el gestor de paquetes yum. "sudo yum install openvpn openssl" . Para el resto de comandos puedes mirarlos en google. Lo dificil es la configuración del servidor y el servidor se configura igual en CentOS que en Debian, que en windows.
CentOS no es precisamente una distro fácil. Viendo la pregunta que has realizado dudo que CentOS sea la mejor opción para ti en estos momentos. Si utilizas Debian o Ubuntu encontrarás mucha más documentación y soporte de la comunidad.
Saludos
Buenas,
Cuando ejecuto "source vars", me sale el mensaje:
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
Y no me deja continuar. Que hago mal??
Gracias por todo!!
Hola Luis,
Por la pregunta que haces o no has leído el post o no entiendes lo que estás haciendo. Si es el segundo caso es difícil que llegues al final con el servidor funcionando.
No estás haciendo nada mal. Si te fijas verás que a mi también me sale este mensaje.
Saludos
Hola de nuevo mi buen amigo y gracias por tu respuesta en el apartado anterior. Tengo algunas dudas y quisiera por favor me pudieras orientar.
Para poder montar un servidor de las características de las que mencionas en tu post, el SO Debian solo lo debo instalar con las herramientas estándar (es decir, solo el entorno unix)sin entorno gráfico, sin laptop, server print y las demás opciones que aparecen cuando se instala por primera vez Debian?
Cuando configuro rc.local, el fichero me aparece vacio sin ninguna regla para iptables, y ahi es donde agrego las 3 lineas que mencionas, pero lo que me confunde es que en la imagen del post tu tienes 2 lineas adicionales para este fichero, dando un total de 5 lineas; quisiera me explicaras, apelando a tu amabilidad, que significan las dos primeras lineas, si esas dos primeras lineas la debo colocar o no y si donde aparece la ip 192.168.2.0/24 ahí debo ingresar alguna dirección diferente a la que se ve (he buscado información sobre esto pero me confunde mas ya que unos dicen una cosa y otros cosas muy diferentes)
Si estoy detrás de un router, debo elegir manualmente la IP interna de mi server en "configuración manual de la red" cuando se esta instalando Debian o lo puedo cambiar después?
Por cierto, para quien no sepa, y si puedes agregar esto para quien no sea muy entendido como yo para Iniciar el servidor de VPN;
teclear
cd /etc/openvpn/
openvpn server.conf
Por favor orientame, ya que he consultado sobre lo de iptables pero en vez de avanzar me pierdo mas con las distintas versiones que encentro en la net.
Desde ya, muchas gracias
Hola Juan
Para seguir las indicaciones del post lo puedes realizar con Debian y no hace falta instalar el entorno gráfico, ni un servidor de impresión ni nada. Con la instalación base del sistema es suficiente. Pero si quieres instalar entornos gráficos, etc lo puedes hacer tranquilamente. Si quieres usar Linux Mint, Ubuntu o cualquier otra distro diferente a Debian también lo puedes hacer.
Las dos primeras lineas que no sabes lo que son no hacen referencia al servidor OpenVPN. Hacen referencia a un servidor VPN con el protocolo pptp. El significado de estas lineas se explica en el siguiente link.
https://geekland.eu/crear-un-servidor-vpn-pptp/
Un consejo. Si con OpenVPN no te sale puedes probar con pptp (el link que te acabo de dar). El proceso de configuración para pptp es mucho más sencillo que con OpenVPN. Verás que el único problema para hacerlo con pptp es que la seguridad de tu servidor es menor pero para el uso que le quieres dar imagino que la seguridad no es algo crítico.
Para hacer que tu ip se fija lo puedes hacer tranquilamente después de instalar Debian.
Referente a iniciar el servidor diría que no hace falta poner los comandos que mencionas. Una vez instalados los paquetes se autoinicia automáticamente. Y si no lo hace y no te quieres complicar la vida la próxima vez que reinicies ya se ejecutará automáticamente.
Saludos y espero que te haya sido de ayuda.
Estimado Joan;
gracias por este tremendo tutorial, lo que quiero consultarte es lo siguiente:
Resulta que cuando inicio el servidor me dice que no esta cargado el modulo tun. El módulo aparece como parte del kernel, pero al hacer modprobe tun no me devuelve nada, al hacer modprobe tun.ko me dice FATAL:modulo tun.ko no encontrado error:hd0, msdos1 read errorAl verificar con modinfo tun me devuelve /lib/modules/3.2.0-4-686-pae/kernel/drivers/net/tun.ko, indicando que se encuentra dicho modulo en el kernel de debian hay varias partes donde dice si esta el archivo del modulo tun en /dev/net/tun y efectivamente esta , pero es un archivo que tiene 0 bytes; por otra parte hay quienes dicen que debo crearlo con mknod tun c 10 200, es esto correcto?
Quisiera que me orientaras, estoy trabajando con debian 7.6, versión de kernel 3.2.0-4-686-pae
He intentado cargarlo pero no me resulta, apelo a tus conocimientos y por favor me digas los pasos a seguir de:
Como lo cargo?
Si hay que compilarlo, Como lo compilo?
Si lo creo, que debe llevar en el contenido?
Una vez cargado, como verifico que esta activo y funcionando?
como lo incluyo en el arranque de sistema?
Por favor necesito tu ayuda...desde ya muchas gracias Joan
Hola
Solo con hacer lo que se detalla en el tutorial levantaras la interfaz tun.
No hace falta compilar nada. Cuando arranques el servidor openvpn podrás ver si tun se levanta con un ifconfig.
Saludos
Buenas Caballero, esta muy bien esta documentación.
Ya prácticamente lo tengo funcionando, pero quería intentar habilitar Access Server web UIs, para ingresar vía Web y realizar el resto de configuraciones del Openvpn Server.
No he podido habilitarlo, será que tengo que descargarlo aparte?
Tienes un link para esta descarga?
Gracias por tus comentarios.
Si que se puede hacer lo que quieres hacer. Para realizar esto encontrarás los paquetes necesarios en este enlace:
https://openvpn.net/index.php/access-server/overview.html
Tienes que descargar el paquete, instalarlo ejecutarlo y configurar. Después de esto podrás acceder a la configuración de tu servidor Openvpn vía navegador. Si ya tienes realizados todos los pasos del tutorial dudo que quieras empezar de nuevo todo el proceso. Todo lo que hagas vía web se puede hacer por terminal consumiendo menos recursos. Además si lo haces desde la raíz siempre comprendes mejor lo que estás haciendo. De hecho en el post que escribo se realizan todas las configuraciones que seguramente necesites.
Saludos
Gracias!! En efecto prefiero la línea de comandos, pero el mantenimiento de los usuarios se lo debo dar a personal con poco conocimiento técnico, de allí que deseo habilitar la opción WEB.
Ultima consulta, al instalar estos paquetes y entrar vía web, la configuración que ya realice se mantendrá intacta cierto?
Hola. Lo tendrás que probar tu mismo y sabrás la respuesta. Yo no lo se porqué nunca lo he probado.
Una vez lo hayas hecho me gustaría que lo comentarás en el blog para otras personas que tengan la misma duda que tu.
Saludos
Buenas, realice las pruebas y la configuración se mantiene intacta luego de instalar el ambiente WEB. Después de instalarlo la verdad no le vi ningún aporte importante así que lo volví a eliminar, en general no me gusto y no recomiendo usarlo.
Sobre el manual quisiera anotar que la ruta:
plugin /usr/lib/openvpn/openvpn-auth-pam.so /etc/pam.d/login
debe cambiarse por la siguiente:
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so /etc/pam.d/login
Ademas creo que es importante mencionar, aunque debería ser algo obvio, que se debe reiniciar el servidor luego de hacer cambios en los enrutamientos.
De nuevo gracias por todo!
Gracias a ti por reportar tu experiencia. En cuanto a mi servidor decirte que me funciona con este comando:
plugin /usr/lib/openvpn/openvpn-auth-pam.so /etc/pam.d/login
A quien no le funcione siempre puede probar tu propuesta.