Base de Conocimiento
Servidor Virtual Private Network (VPN)
Table of Contents [-]
- 1 Ventajas de las VPN .
- 2 Tipos de VPN
- 3 Servidores VPN
- 4 Postinstalacion OpenVPN.
- 4.1 Agregando Repositorio.
- 4.2 Instalación OpenVPN.
- 4.3 Interfaces OpenVPN.
- 5 Servicio OpenVPN
- 5.1 Host To Host
- 5.1.1 Server Host To Host.
- 5.1.2 Client Host To Host.
- 5.1.3 Comprobando Conexión.
- 5.1.4 Diagrama Host To Host.
- 5.2 Road Warrior
- 5.2.1 Server Road Warrior
- 5.2.2 Client Road Warrior
- 5.2.3 Comprobando Conexión.
- 5.2.4 Asignar IP Estáticas Road Warrior.
- 5.2.5 Diagrama Road Warrior.
- 5.3 Net To Net
- 5.3.1 Server Net to Net
- 5.3.2 Client Net To Net.
- 5.3.3 Comprobando Conexión
- 5.3.4 Diagrama Net To Net
- 6 Firewall OpenVPN
- 6.1 Verificando la configuración del Firewall
Una VPN “Virtual Private Network”, es una tecnología en la que permite hacer conexiones de una red local sobre una ip publica estando desde internet. También son conocida como redes privadas en las cuales mediante un proceso de encapsulamiento y encriptación de los datos se refiere a la utilización de la infraestructura publica de telecomunicaciones.
Ventajas de las VPN .#
Cuando deseamos crear una VPN dentro de nuestra empresa siempre debemos saber que ventajas que nos puede proporcionar esta tecnología. Principales Ventajas:- Seguridad: Por medio de una VPN podemos crear túneles en los cuales pasan la información encriptada entre los clientes por lo cual existe una integridad segura de los datos.
- Autenticación y autorización: Solo se permiten conectarse a los equipos o dispositivos móviles autorizados, por medio de certificados de autenticación, llaves encriptadas y usuarios/contraseñas.
- Velocidad: Cuando enviamos o solicitamos información por medio de una red VPN es comprimida y descomprimida entre los 2 clientes de la VPN, esto hace que la VPN funcione mas veloz en la transferencia de información.
- Administración del ancho de banda: Es posible solicitar a nuestros ISP un ancho de banda especifico para nuestra red VPN.
- Costos: Un VPN nos ahorra en costo de los equipo y otros servicios que se estén ofreciendo dentro de la red locales.
Tipos de VPN#
Para poder implementar una red VPN tendremos que saber que tipos de VPN existen para poder instalarla y configurarle en nuestra red local. Existen 3 tipos de redes VPN:- Host to Host: Este el método mas sencillo de implementar, nos permite la comunicación entre dos máquinas de las cuales solo tienen conexión entre ellos, esto quiere decir que solo exista la comunicación por medio de la VPN entre estos 2 equipos y pueden estar dentro de una red local o en internet.
- Road Warrior: Esta una de las formas mas utilizadas y solicitadas, es permitir un conjunto de máquina ya sean de la red local o de internet se conecten dentro de la red VPN, existiendo un servidor en el controle las conexiones, todas estas conexiones se realizan mediante certificados de autenticación.
- Net to Net: Mediante esta forma conectamos 2 a varias redes LAN en lugares física apartados, la conexión entre las redes viajara encriptada, con esto podremos acceder a cualquier recursos de la red que se encuentre en el otro extremo de la VPN.
Servidores VPN#
Tenemos varios servicios de los cuales nos permite crear estos túneles en GNU/Linux, los mas conocidos son:- OpenVPN: Es una solución completa de conexión de redes VPN, contiene validación de usuario, enviado de informaron encriptada. Mas información revisar el sitio oficial del proyecto.
- PPTP: Este el protocolo que realiza conexiones punto a punto, su principal habilidad la conexión múltiple de protocolos dentro del servicio.
- Openswan: Es una implementación de IPSec, son varios protocolos cuya función es garantizar la comunicación sobre el protocolo de internet, permite la autenticación y cifrado. Mas información revisar el siguiente link.
Postinstalacion OpenVPN.#
Toda la instalación y configuración se realizara sobre la distribución Centos versión 5.0, por el cual OpenVPN no viene agregada en los repositorio oficiales de dicha distribución. Por lo cual tendremos que agregar otra repositorio extra para este servicio.Agregando Repositorio.#
Para esto tendremos que agregaremos el repositorio de DAG Wieers, este repositorio se encarga de proporcionar paquetes que no son soportados en los repositorios oficiales de CentOS. Para mas información revisar el sitio oficial del repositorio http://dag.wieers.com/rpm/ La forma mas rápida de agregar este repositorio es instalar el paquete que agrega el repositorio a nuestra lista. Esta ruta encontraran el paquete a instalar dependiendo de la versión de su CentOS http://dag.wieers.com/rpm/FAQ.php#B[root@rodmen ~]# rpm -Uhv [http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/] rpmforge-release-0.3.6-1.el5.rf.i386.rpmYa instalado el paquete, actualizaremos la lista de paquetes y también se recomienda actualizar el Sistema Operativo.
[root@ascariote ~]# yum update
Instalación OpenVPN.#
Después de la actualización de paquetes ahora ya podremos instalar el servicio de OpenVPN sin ningún problema.[root@ascariote ~]# yum install openvpnOpenVPN trabaja en el puerto 1194 del cual por default utiliza protocolo udp pero también se puede utilizar tcp.
Interfaces OpenVPN.#
OpenVPN utiliza 2 tipos de interfaz de red virtuales como:- TUN: Esta interfaz simula que es un dispositivo Ethernet que trabaja sobre la capa 3 del modelo OSI, esta interfaz es ocupada cuando hacemos un Ruteo dentro de la red de la VPN.
- TAP: Esta interfaz simula que es un dispositivo Ethernet que trabaja sobre la capa 2 del modelo OSI, esta interfaz es ocupada cuando queremos utilizar redes en modo puente.
Servicio OpenVPN#
Dentro de este manual se enseñara a configurar los métodos de configuración de OpenVPN como:- Host To Host.
- Road Warrior
- Net To Net.
Host To Host#
Sus principales características son:- Solo existe un Cliente y un servidor en esta configuración.
- Conexión encriptada entre ambos sistemas.
Server Host To Host.#
Para esta configuración solo se necesita ya tener instalado el servicio de OpenVPN en nuestra distribución. Todas las configuración del servicio OpenVPN se realizan dentro de la siguiente ruta:/etc/openvpn/Dentro de esta ruta deberemos crear una llave de autenticación la cual es compartida entre el servidor y el cliente. Para poder crear la llave tendremos que ejecutar el siguiente comando:
[root@ascariote openvpn]#openvpn --genkey --secret secret.keyCon esto nos genera un archivo en cual tiene la llave de encriptación. Ahora crearemos un archivo en el cual contendrá la configuración del servicio OpenVPN en modo Server.
[root@ascariote openvpn]# vim server.confDebe contener los siguientes parámetros:
dev tun0 proto udp comp-lzo port 1194 ifconfig 10.8.0.1 10.8.0.2 status openvpn-status.log log /var/log/openvpn.log secret secret.key ping 10 verb 4 mute 10Explicaremos cada una de la opciones del servidor OpenVPN:
| Parámetro | Descripción |
|---|---|
| dev tun0 | Dispositivo virtual en el cual se creara el tunel. |
| proto udp | Protocolo de la conexión VPN |
| comp-lzo | Comprimir dentro de la red virtual con lzo |
| port 1194 | Puerto de escucha del servicio. |
| ifconfig 10.8.0.1 10.8.0.2 | Asignamos IP de la red Virtual, siempre el servidor utiliza la primera IP del segmento de red e indicamos la IP del cliente. |
| Status openvpn-status.log | Ver el estado del servicio de OpenVPN |
| log /var/log/openvpn.log | Vemos el estado actual del servicio, como también la bitácora de errores y conexiones. |
| secret secret.key | Mandamos a solicitar la llave de autenticación del servidor. |
| ping 10 | Ping cada 10 segundos |
| verb 4 | Método del Verbose Moderado |
| mute 10 | Calla mas 10 mensaje iguales |
Con esto ya podremos podremos iniciar nuestro servicio de OpenVPN.
[root@ascariote openvpn]# /etc/init.d/openvpn startComo podemos comprobar que ya existe nuestro servicio de OpenVPN, solamente ejecutando el comando ifconfig y la interfaz de VPN.
[root@ascariote openvpn]# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Client Host To Host.#
Para poder agregar clientes Host To Host dentro de nuestro servicio de Openvpn, ya depende del sistema operativo a conectar como alguna distribución de GNU/Linux o Windows. Solamente tendremos que crear el archivo de configuración del cliente de OpenVPN que contendría los siguiente parámetros:remote ascariote.dynalias.net port 1194 dev tun tun-mtu 1500 ifconfig 10.8.0.2 10.8.0.1 secret secret.key ping 10 comp-lzo verb 4 mute 10Con esto ya agregamos creado la configuración del cliente OpenVPN. Pero explicaremos para que nos sirve cada parámetro que tiene este archivo de configuración del cliente.
| Parámetro | Descripción |
|---|---|
| remote ascariote.dynalias.net | En este parámetro indica el nombre del servidor OpenVPN, pero también se puede poner la IP publica. |
| port 1194 | Puerto de escucha del servidor. |
| dev tun | Dispositivo virtual en el cual con el cual se conectara al servidor. |
| tun-mtu 1500 | |
| ifconfig 10.8.0.2 10.8.0.1 | IP del cliente y después del servidor OpenVPN. |
| secret secret.key | Mandamos a solicitar la llave de autenticación del servidor. |
| ping 10 | Ping cada 10 segundos. |
| comp-lzo | Comprimir dentro de la red virtual con lzo. |
| verb 4 | Método del Verbose Moderado. |
| mute 10 | Calla mas 10 mensaje iguales. |
Clientes GNU/Linux
En este tipo de configuración solamente se instala openvpn en las distribuciones GNU/Linux, indicaremos como instalar esta aplicación en las conocidas como debian, ubuntu, CentOS, Fedora. Distribuciones como debian/ubuntu y sus derivados solamente tendremos que instalar el servicio de la siguiente manera.
lucifer:~# apt-get install openvpnDistribuciones como RHEL/CentOs/Fedora y sus derivados solamente tendremos que instalar el servicio de la siguiente manera, pero antes de todo en CentOS/RHEL entremos que agregar el repositorio de DAG Wieers para poder tener el servicio.
[root@moa ~]# yum install openvpnPara otra distribuciones existe un tar.gz el cual contiene el código fuente para ser compilado e instalado en su distribución, lo pueden descargar desde la siguiente liga. http://openvpn.net/index.php/open-source/downloads.html Con esto ya tendremos instalado nuestro cliente en nuestra distribución. Tendremos que hacer los siguientes paso para poder configurar el cliente, toda la configuración del cliente se llevan acabo en el directorio /etc/openvpn y el fichero de configuración del cliente y la llave deben estar en esta ruta. Enviaremos estos archivos serian enviados por scp, como el archivo de configuración y llave de conexión de la siguiente manera:
[root@ascariote openvpn]# scp client.conf secret.key root@189.175.23.45:/etc/openvpnEn el cliente solamente tendremos que iniciar el servicio de OpenVPN.
[root@moa ~]#/etc/init.d/openvpn startVerificamos que tengamos levantara la interfaz virtual de la red VPN.
[root@moa ~]# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.2 P-t-P:10.8.0.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:168 (168.0 b) TX bytes:168 (168.0 b) Clientes Windows
Para estos sistema operativos solamente tendremos que descargar el cliente en formato exe, su instalación es muy sencilla y rápida. Lo podremos descargar desde el siguiente link. http://openvpn.net/index.php/open-source/downloads.html Ya que tenemos instalado el cliente, solamente tenemos que ejecutar el siguiente comando para que cambie el formato del archivo a msdos.
[root@ascariote openvpn]# unix2dos guindows.conf guindows.confCambiamos la extensión del fichero ya que el cliente OpenVPN en windows reconoce sus archivos con la extensión ovpn.
[root@ascariote openvpn]# mv guindows.conf guindows.ovpnSera cuestión de enviar el archivo de configuración del cliente y su llave de autenticación para poder hacer la conexión, ya seria enviarlo vía correo, Samba, FTP o un apache. Ya teniendo los archivos de configuración y llave solamente tendremos que moverlos a la siguiente ruta C:\Archivos de programas\OpenVPN\config. Para poder iniciar el cliente OpenVPN solamente tenemos que ejecutar el icono que se encuentra en la barra de tarea en la parte derecha se encontrara un icono muy parecido al de red en windows pero en color rojo, solo le damos click derecho en sobre el y tendremos las opciones que podremos utilizar. Una forma de comprobar que ya tenemos asignada nuestra IP es ejecutando el comando ipconfig en el interprete de comandos.
Comprobando Conexión.#
La forma mas sencilla de saber que ya funciona nuestra red VPN es mandar paquetes ICMP del servidor al cliente.lucifer@lucifer:~$ ping -c 5 10.9.0.1 PING 10.9.0.1 (10.9.0.1) 56(84) bytes of data. 64 bytes from 10.9.0.1: icmp_seq=1 ttl=64 time=0.025 ms 64 bytes from 10.9.0.1: icmp_seq=2 ttl=64 time=0.038 ms 64 bytes from 10.9.0.1: icmp_seq=3 ttl=64 time=0.038 ms 64 bytes from 10.9.0.1: icmp_seq=4 ttl=64 time=0.037 ms 64 bytes from 10.9.0.1: icmp_seq=5 ttl=64 time=0.045 ms --- 10.9.0.1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 3998ms rtt min/avg/max/mdev = 0.025/0.036/0.045/0.009 ms lucifer@lucifer:~$Como también hacemos la comprobación en el cliente. Si tuviéramos algún otro servicio dentro del servidor/cliente VPN, un Servidor FTP, Servidor Web, etc, ya podremos utilizar sus recursos desde la VPN.
Diagrama Host To Host.#
Esta es la forma en que se podría ilustrar una configuración Host To Host de OpenVPN, teniendo las siguientes características. El equipo cliente y servidor pueden estar en lugar distantes. Los equipos están conectados directamente a Intenet. En el servidor tiene configurado el OpenVPN creando una interfaz virtual llamada tun0 que por medio de esta se creara el túnel VPN. El cliente se configura VPN, en donde también se levanta la interfaz tun0 con la cual se conectar al túnel VPN y tendrá comunicación con el servidor VPN. Pero su salida de paquetes siempre va hacer enviada por la conexión de internet.Road Warrior#
La conexión Road Warrior permite la comunicación entre los usuarios externo y usuarios locales en la red local de nuestra oficina, en esta conexión puede ver mas 1 cliente conectado en la red virtual. En este tipo de configuración los usuarios están bajo certificados y llaves de autenticación para su conexión a la red VPN. Las razones de utilizar una VPN en modo Road Warrior son:- Permite compartir información y los recursos de la red local.
- Configuración personalizada.
- Manejo de varias redes virtuales y usuarios
- Bloquea ataques de intrusos y espías.
Server Road Warrior#
Para poder configurar nuestra OpenVPN en modo Road Warrior tendremos que seguir los siguientes pasos. 1) Tendremos que buscar en donde se encuentran los scripts que nos permite crear los certificados y las llaves.[root@test ~]# cd /usr/share/openvpn/ easy-rsa/Dentro de este directorio encontraremos 2 versiones de OpenVPN.
[root@test easy-rsa]# ls 1.0 2.0 [root@test easy-rsa]#Debemos elegir la version mas actual y copiarla a /etc/openvpn
[root@test easy-rsa]# cp -a 2.0/ /etc/openvpn/easy-rsaEntramos en directorio principal de la configuración de OpenVPN.
[root@test openvpn]# cd /etc/openvpn/easy-rsa/Listamos que dentro de este directorio existen varios scripts.
[root@test easy-rsa]# ls build-ca build-key build-key-server clean-all Makefile pkitool sign-req build-dh build-key-pass build-req inherit-inter openssl-0.9.6.cnf README vars build-inter build-key-pkcs12 build-req-pass list-crl openssl.cnfLo que tendremos que hacer es editar el archivo de vars el cual contiene la informacion relacionada hacia la empresa en donde estamos laborando.
[root@test easy-rsa]# vim varsTendremos que ir al final del archivo y modificar los siguiente parametros quedando de la siguiente manera.
export KEY_COUNTRY="MX" export KEY_PROVINCE="DF" export KEY_CITY="MEXICO" export KEY_ORG="ASCARIOTE SA DE CV" export KEY_EMAIL="administrador@ascariote.com.mx"Como podemos ver solo agregamos datos esenciales para la creación de la Certificados CA, guardamos el archivos y ahora debemos refrescar las variables que tiene el archivo var.
[root@test easy-rsa]# source vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keysNos devuelve un posible error por lo cual tendremos que limpiar todas la opciones de OpenVPN.
[root@test easy-rsa]# sh clean-allAhora debemos crear el certificado de Autenticación para el servicio de OpenVPN.
[root@test easy-rsa]# sh build-ca Generating a 1024 bit RSA private key .................++++++ ..........++++++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [MX]: State or Province Name (full name) [DF]: Locality Name (eg, city) [MEXICO]: Organization Name (eg, company) [ASCARIOTE SA DE CV]: Organizational Unit Name (eg, section) []:ASCARIOTE Common Name (eg, your name or your server's hostname) [ASCARIOTE SA DE CV CA]:SERVER Name []:SERVER Email Address [administrador@ascariote.com.mx]: [root@test easy-rsa]#Debemos crear la clave diffie-hellman, en este paso nos preguntara si queremos firmar digitalmente con nuestro certificado creado anteriormente.
[root@test easy-rsa]# sh build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ....+.....................+........+.+......................+...............+............. ..................................+.............+.....+...................................... ....+.......................+.................................+........................+.... .......................+..............+....................................................... ......................................................................+......+................ ........................................++*++*++* [root@test easy-rsa]#Crearemos el certificado y la llave para el servidor OpenVPN, solicitara datos generales de la empresa.
[root@test easy-rsa]# sh build-key-server server Generating a 1024 bit RSA private key .....++++++ ...++++++ writing new private key to 'server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [MX]: State or Province Name (full name) [DF]: Locality Name (eg, city) [MEXICO]: Organization Name (eg, company) [FACTOR SA DE CV]: Organizational Unit Name (eg, section) []:FACTOR Common Name (eg, your name or your server's hostname) [server]:SERVER Name []:SERVER Email Address [administrador@factor.com.mx]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'MX' stateOrProvinceName :PRINTABLE:'DF' localityName :PRINTABLE:'MEXICO' organizationName :PRINTABLE:'FACTOR SA DE CV' organizationalUnitName:PRINTABLE:'FACTOR' commonName :PRINTABLE:'SERVER' name :PRINTABLE:'SERVER' emailAddress :IA5STRING:'administrador@factor.com.mx' Certificate is to be certified until Aug 23 18:10:41 2019 GMT (3650 days) Sign the certificate? [y/n]:Y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated [root@test easy-rsa]#Todos estas llaves y certificados generados se encuentran en el directorio key por lo cual entraremos a ese directorio.
[root@test easy-rsa]# cd keys/Verificamos que fichero encontramos.
[root@test keys]# ls 01.pem ca.key index.txt index.txt.old serial.old server.csr ca.crt dh1024.pem index.txt.attr serial server.crt server.key [root@test keys]#Los archivos mas importantes son:
| Archivo | Descripción |
|---|---|
| ca.crt/ca.key | Contiene el certificado de autenticación y llave. Sin estos no podrás crear certificados para tus clientes VPN. |
| dh1024.pem | Clave diffie-hellman, también es necesaria los clientes. |
| server.crt/ server.key | Contiene el Certificado de autenticación para el servidor y su llave. |
Ya teniendo estos archivos solamente tendremos que hacer una copia de estos archivos y mandarlos a /etc/openvpn/.
[root@test keys]# cp ca.* dh1024.pem server.crt server.key /etc/openvpnAhora debemos crear el archivo de configuración de nuestro servidor OpenVPN, lo crearemos en el directorio /etc/openvpn.
[root@test easy-rsa]# cd /etc/openvpnCrearemos el archivo del servidor OpenVPN.
[root@test openvpn]# vim server.confDebe contener los siguientes parámetros:
proto udp dev tun0 ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh1024.pem duplicate-cn server 192.168.4.0 255.255.255.0 client-config-dir /etc/openvpn/ccd comp-lzo user root group root persist-key persist-tun status /var/log/openvpn-status.log log /var/log/openvpn.log verb 3 mute 20 ping 10 ping-restart 120Explicaremos cada una de la opciones del servidor OpenVPN:
| Parámetro | Descripción |
|---|---|
| proto udp | El servicio de OpenVPN utilizara protocolo UDP. |
| dev tun0 | Interfaz virtual por la cual se crea el túnel. |
| ca /etc/openvpn/ca.crt | Especifica la ruta en donde se localiza el certificado de autenticación. |
| cert /etc/openvpn/server.crt | Especifica la ruta en donde se localiza el certificado de servidor. |
| key /etc/openvpn/server.key | Especifica la ruta en donde se localiza la llave de autenticación. |
| dh /etc/openvpn/dh1024.pem | Especifica la ruta en cual contiene el formato de Diffie Hellman. |
| server 192.168.4.0 255.255.255.0 | Segmento de red VPN, la primera IP del segmento queda reservada para el servidor OpenVPN. |
| client-config-dir /etc/openvpn/ccd | Este parametro manda a llamar a archivo dentro de esta ruta para asignar IP Estáticas de la Red VPN. |
| comp-lzo | Comprimir dentro de la red virtual con lzo. |
| user root/group root | |
| persist-key | Esta opción soluciona el problema por llaves que persisten a través de los reajustes SIGUSR1. |
| persist-tun | Permite que no se cierre y se vuelvan abrir los dispositivos TAP/TUN. |
| status /var/log/openvpn-status.log | Estado actual del servicio OpenVPN. |
| log /var/log/openvpn.log | La bitácoras de los Logs del servicio OpenVPN. |
| verb 3 | Método del verbose Moderado. |
| mute 20 | Calla mas 10 mensaje iguales. |
| ping 10 | Ping cada 10 segundos al servidor OpenVPN. |
| ping-restart 120 | Reinicia ping cada 120 segundos. |
Con esto ya podremos podremos iniciar nuestro servicio de OpenVPN.
[root@test ~]# /etc/init.d/openvpn startComo podemos comprobar que ya existe nuestro servicio de OpenVPN, solamente ejecutando el comando ifconfig y la interfaz de VPN.
[root@test ~]# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.4.1 P-t-P:192.168.4.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Client Road Warrior#
Para poder agregar clientes dentro de nuestra red VPN, tendremos que crear su certificado y llave por cada uno de los usuario que se conecte. Se recomienda poner en los certificados el nombre de la persona para tener mayor control de los usuarios conectados. Estos certificados se crean la siguiente ruta /etc/openvpn/easy-rsa/, por lo cual tendremos que acceder a esa ruta, ya estando ahi solamente tendremos que ejecutar el siguiente comando para que nos cree el certificado y la llave para el usuario a conectarse.[root@test easy-rsa]# sh build-key ascariote Generating a 1024 bit RSA private key ......................++++++ ................++++++ writing new private key to 'ascariote.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [MX]: State or Province Name (full name) [DF]: Locality Name (eg, city) [MEXICO]: Organization Name (eg, company) [FACTOR SA DE CV]: Organizational Unit Name (eg, section) []:LPT Common Name (eg, your name or your server's hostname) [ascariote]: Name []:ascariote Email Address [administrador@factor.com.mx]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'MX' stateOrProvinceName :PRINTABLE:'DF' localityName :PRINTABLE:'MEXICO' organizationName :PRINTABLE:'FACTOR SA DE CV' organizationalUnitName:PRINTABLE:'LPT' commonName :PRINTABLE:'ascariote' name :PRINTABLE:'ascariote' emailAddress :IA5STRING:'administrador@factor.com.mx' Certificate is to be certified until Aug 23 21:36:12 2019 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated [root@test easy-rsa]#Con esto ya habremos que creado los archivos necesarios para los clientes y todos estos archivos se encuentra almacenados en /etc/openvpn/easy-rsa/keys/, entramos en esa ruta y verificamos que están nuestros archivos con el nombre del usuario a conectarse, en nuestro caso el usuario se llama ascariote. Para que un cliente pueda conectarse se necesitan los siguientes archivos:
- ca.crt
- ascariote.*
[root@test keys]# mkdir /etc/openvpn/clientes/Ahora solamente creamos la carpeta por cada usuario.
[root@test keys]# mkdir /etc/openvpn/clientes/ascarioteCopiamos los archivos de configuración del usuario y el certificado del autenticación.
[root@test keys]# cp ca.crt ascariote.* /etc/openvpn/clientes/ascariote/NOTA: Con esto ya tendremos los archivos de configuración de los clientes y el certificado de autenticación respaldo ya que cuando hacemos limpieza de variables en OpenVPN son borrados todos los archivos de configuración de los clientes y servidor en el directorio /etc/openvpn/easy-rsa/keys/.
Clientes GNU/Linux
En este tipo de configuración solamente se instala OpenVPN en las distribuciones GNU/Linux, indicaremos como instalar esta aplicación en las conocidas como debian, ubuntu, CentOS, Fedora. Distribuciones como debian/ubuntu y sus derivados solamente tendremos que instalar el servicio de la siguiente manera.
ascariote:~# apt-get install openvpnDistribuciones como RHEL/CentOs/Fedora y sus derivados solamente tendremos que instalar el servicio de la siguiente manera, pero antes de todo en CentOS/RHEL entremos que agregar el repositorio de DAG Wieers para poder tener el servicio.
[root@moa ~]# yum install openvpnPara otra distribuciones existe un tar.gz el cual contiene el código fuente para ser compilado e instalado en su distribución, lo pueden descargar desde la siguiente liga. http://openvpn.net/index.php/open-source/downloads.html Con esto ya tendremos instalado nuestro cliente en nuestra distribución ahora lo que tenemos que hacer con el servidor es ir a /etc/openvpn/clientes, en el cual se encontraran las carpetas de los usuarios permitidos en la VPN entramos alguna de las carpetas y veremos que solo falta el archivo el archivo de configuracion para el cliente VPN. Debemos crear el archivo de configuración para los clientes de la VPN.
[root@test ~]# vim /etc/openvpn/clientes/ascariote.confEn el cual contiene los siguientes parámetros.
client remote test.ascanet.com.mx port 1194 proto udp dev tun ca /etc/openvpn/ca.crt cert /etc/openvpn/ascariote.crt key /etc/openvpn/ascariote.key comp-lzo log /var/log/openvpn.log verb 3 mute 20 ping 10 ping-restart 120 persist-key persist-tunExplicaremos cada una de la opciones del cliente OpenVPN:
| Parámetro | Descripción |
|---|---|
| Client | Indica que va hacer cliente de la red VPN. |
| remote test.ascanet.com.mx | El nombre o IP del servidor OpenVPN, el cual controla los accesos a la misma. |
| Port 1194 | Puerto de escucha del servicio OpenVPN en el servidor. |
| proto udp | Protocolo utilizado en red VPN |
| dev tun | Interfaz virtual con el cual se conecta a la red VPN. |
| ca /etc/openvpn/ca.crt | Especifica la ruta en donde se localiza el certificado de autenticación, este certificado es del servidor OpenVPN. |
| cert /etc/openvpn/ascariote.crt | Especifica la ruta en donde se localiza el certificado del cliente |
| key /etc/openvpn/ascariote.key | Especifica la ruta en donde se localiza la llave de autenticación del cliente. |
| comp-lzo | Comprimir dentro de la red virtual con lzo. |
| log /var/log/openvpn.log | La bitácoras de los Logs del servicio OpenVPN. |
| verb 3 | Método del verbose Moderado. |
| Mute 20 | Calla mas 20 mensaje iguales. |
| ping 10 | Ping cada 10 segundos al servidor OpenVPN. |
| ping-restart 120 | Reinicia ping cada 120 segundos. |
| Persist-key | Esta opción soluciona el problema por llaves que persisten a través de los reajustes SIGUSR1. |
| persist-tun | Permite que no se cierre y se vuelvan abrir los dispositivos TAP/TUN. |
Con esto solamente tendremos que crear el archivo comprimido y mandarlo por via ssh, ftp, http el archivo.
[root@test clientes]# tar cvfz ascariote.tar.gz ascariote/En el cliente ya teniendo el archivo comprimido solamente tendremos que descomprimirlo.
ascariote:Desktop# tar xvfz ascariote.tar.gzEntramos a la carpeta y movemos todos los archivos a /etc/openvpn/
ascariote:ascariote# cp * /etc/openvpn/Iniciamos el servicio para conectarnos a la VPN.
ascariote:ascariote# /etc/init.d/openvpn restartVerificamos que tengamos levantada la interfaz virtual que se usa para conexión VPN.
ascariote:ascariote# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.4.6 P-t-P:192.168.4.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:52 (52.0 B) TX bytes:84 (84.0 B) Con esto ya sabremos que tenemos conexión a la VPN.
Clientes Windows
Para estos sistema operativos solamente tendremos que descargar el cliente en formato exe, su instalación es muy sencilla y rápida. Lo podremos descargar desde el siguiente link. http://openvpn.net/index.php/open-source/downloads.html Ahora en el servidor tendremos que crear el archivo de configuración del cliente para windows. En nuestro caso el usuario se llama GuindowsLPT, entramos a la ruta en donde se encuentran los clientes.
[root@test GuindowsLPT]# vim GuindowsLPT.ovpnEn el cual deberá contener los siguientes parámetros.
client remote test.ascanet.com.mx port 1194 proto udp dev tun ca “ca.crt" cert “GuindowsLPT.crt” key “GuindowsLPT.key” persist-key persist-tun comp-lzo verb 3 mute 20 ping 10 ping-restart 120Convertimos el fichero a formato dos de Windows.
[root@test GuindowsLPT]# unix2dos GuindowsLPT.ovpn GuindowsLPT.ovpnSolo falta comprimir la carpeta para que se enviada al cliente windows.
[root@test clientes]# zip GuindowsLPT.zip GuindowsLPT/*Sera cuestión de enviar el archivo de configuración del cliente y su llave de autenticación para poder hacer la conexión, ya seria enviarlo vía correo, Samba, FTP o un apache. Ya teniendo los archivos de configuración y llave solamente tendremos que moverlos a la siguiente ruta C:\Archivos de programas\OpenVPN\config. Para poder iniciar el cliente OpenVPN solamente tenemos que ejecutar el icono que se encuentra en la barra de tarea en la parte derecha se encontrara un icono muy parecido al de red en windows pero en color rojo, solo le damos click derecho en sobre el y tendremos las opciones que podremos utilizar. Una forma de comprobar que ya tenemos asignada nuestra IP es ejecutando el comando ipconfig en el interprete de comandos.
Comprobando Conexión.#
La forma mas sencilla de saber que ya funciona nuestra red VPN es mandar paquetes ICMP a algunos de los clientes que estén dentro de la red virtual.ascariote:~# ping -c 5 192.168.4.10 PING 192.168.4.10 (192.168.4.10) 56(84) bytes of data. 64 bytes from 192.168.4.10: icmp_seq=1 ttl=127 time=39.9 ms 64 bytes from 192.168.4.10: icmp_seq=2 ttl=127 time=37.4 ms 64 bytes from 192.168.4.10: icmp_seq=3 ttl=127 time=38.6 ms 64 bytes from 192.168.4.10: icmp_seq=4 ttl=127 time=89.1 ms 64 bytes from 192.168.4.10: icmp_seq=5 ttl=127 time=110 ms --- 192.168.4.10 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4017ms rtt min/avg/max/mdev = 37.435/63.124/110.489/30.710 ms ascariote:~#Como también podemos hacer la comprobación hacia el servidor o otro cliente que se encuentre en la red VPN desde Windows. Si tuviéramos algún otro servicio dentro del servidor/cliente VPN, un Servidor FTP, Servidor Web, etc, ya podremos utilizar sus recursos desde la VPN.
Asignar IP Estáticas Road Warrior.#
En este tipo de configuración nosotros podremos asignar una IP estática al cliente de la red VPN para que no se este cambiando cada vez que se intente conectar. Para esto tendremos que crear el siguiente directorio ccd dentro de /etc/openvpn en el servidor OpenVPN.[root@test clientes]# mkdir /etc/openvpn/ccdEntramos a ese directorio y crearemos archivos de configuración por cada cliente que deseemos que tenga una IP Estática. Cuando creamos el archivo de configuración por cada cliente, debemos crear con el nombre del usuario tal como se conecta a la VPN en mi caso tengo el usuario ascariote, entonces creare el archivo ascariote dentro /etc/openvpn/ccd.
[root@test ccd]# vim ascarioteEn nuestro caso esta es una configuración para clientes GNU/Linux/BSD y otros.
ifconfig-push 192.168.4.30 192.168.4.1En caso de los clientes fueran windows, tendríamos que configurarlo de la siguiente manera.
ifconfig-push 192.168.4.49 192.168.4.50En windows siempre se ocupa dos IP para que puedamos asignar una IP estática siempre empezando con la IP impar. Con esto solamente tendremos que reiniciar el servicio de OpenVPN.
[root@test ccd]# /etc/init.d/openvpn restartSolo queda iniciar el cliente para que ya se le sea asignada su IP estática.
Diagrama Road Warrior.#
Esta es la forma en que se podría ilustrar una configuración RoadWarrior de OpenVPN, teniendo las siguientes características. Figura 2.5: Los equipos clientes y servidor pueden estar en lugar distantes. Los equipos están conectados directamente a Intenet. En el servidor tiene configurado el OpenVPN creando una interfaz virtual llamada tun0 que por medio de esta se creara el túnel VPN. Los clientes se conectan al servidor por medio del túnel VPN pero autenticados por certificados y llaves de autenticación. Los clientes también puede ser dispositivos móviles que se conectaran a la red VPN. Solo se pueden conectar clientes que estén permitidos. Pueden compartir recursos entre cliente a cliente como tambien al servidor. Pero su salida de paquetes siempre va hacer enviada por la conexión de internet.Net To Net#
Es una configuración muy ocupada en las empresas que tienen varias sucursales en lugares físicamente apartados geográficamente. Este métodos nos sirve para unir varias redes y puedan compartir información entre todos los clientes de todas las redes conectadas de una forma transparente. Solamente se requiere un servidor y clientes que permitan la conexión de a la red virtual.Server Net to Net#
En este configuraremos dentro del tunel VPN la union de 3 redes de la siguiente manera:| UBICACION | DOMINIO | RED FISICA | RED VIRTUAL |
|---|---|---|---|
| MEXICO | test.ascanet.com.mx | 192.168.1.0/24 | 10.0.1.1/10.0.2.1 |
| OAXACA | ascariote.dynalias.net | 192.168.2.0/24 | 10.0.2.2 |
| VERACRUZ | belzebu.dynalias.net | 192.168.3.0/24 | 10.0.3.2 |
Para poder unir a estas 3 redes en el servidor tendremos que crear 2 llaves en las cuales conecte a la sucursales de Mexico y Veracruz, las cuales reacremos de la siguiente manera:
[root@test openvpn]# openvpn --genkey --secret mex-oax.txt [root@test openvpn]# openvpn --genkey --secret mex-ver.txtYa teniendo las llaves solamente tendremos que crear dos archivos de configuración del servidor para que pueda controlar las 2 redes. Primero comenzaremos con la conexión de México y Oaxaca.
remote ascariote.dynalias.net float port 1194 dev tun0 persist-tun ifconfig 10.0.1.1 10.0.1.2 comp-lzo ping 15 ping-restart 120 verb 3 secret /etc/openvpn/mex-oax.txt persist-key route 192.168.2.0 255.255.255.0 chroot /var/empty log /var/log/openvpn.logSi queremos que OpenVPN tenga varias conexión al servidor solamente tendremos que cambiar el puerto de escucha del otro segmento de red. Configuraremos la conexión de México a Veracruz.
remote belzebu.dynalias.net float port 1195 dev tun1 persist-tun ifconfig 10.0.2.1 10.0.2.2 comp-lzo ping 15 ping-restart 120 verb 3 secret /etc/openvpn/mex-ver.txt persist-key route 192.168.3.0 255.255.255.0 chroot /var/empty log /var/log/openvpn.logExplicaremos cada una de la opciones del cliente OpenVPN:
| Parámetro | Descripción |
|---|---|
| remote ascariote.dynalias.net | IPS o Dominios a los cuales se tendrá conexión al servicio OpenVPN. |
| float | Por si acaso que los clientes son de IP dinámicas. |
| port 1194/1195 | Puertos de escucha de los 2 servicios de OpenVPN. |
| proto udp | Protocolo utilizado en red VPN |
| dev tun1/tun2 | Interfaz virtual con el cual se conecta a la red VPN, pero indicando que red escucha. |
| persist-tun | Permite que no se cierre y se vuelvan abrir los dispositivos TAP/TUN. |
| ifconfig 10.0.1.1 10.0.1.2 ifconfig 10.0.2.1 10.0.2.2 | IP especificadas que usaran como el servidor y clientes en los segmentos de red diferentes. |
| comp-lzo | Comprimir dentro de la red virtual con lzo. |
| ping 15 | Ping cada 15 segundos al servidor OpenVPN. |
| ping-restart 120 | Reinicia ping cada 120 segundos |
| verb 3 | Método del verbose Moderado. |
| secret /etc/openvpn/mex-oax.txt secret /etc/openvpn/mex-ver.txt | Manda a llamar la llave para conexión de red VPN. |
| persist-key | Esta opción soluciona el problema por llaves que persisten a través de los reajustes SIGUSR1. |
| route 192.168.2.0 255.255.255.0 route 192.168.3.0 255.255.255.0 | Establecemos que haya ruteo dentro de la red física a conectarnos |
| chroot /var/empty | Por seguridad se activa un enjaulamiento |
| log /var/log/openvpn-mex-oax.log log /var/log/openvpn-mex-oax.log | Bitácora del servicio OpenVPN en cada segmento de red. |
Iniciamos la configuración de nuestro OpenVPN
[root@test openvpn]# /etc/init.d/openvpn startVerificamos que tengamos la interfaz tun0/tun1 levantadas y configuradas.
[root@test openvpn]# ifconfig tun0 && ifconfig tun1
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.0.1.1 P-t-P:10.0.1.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.0.2.1 P-t-P:10.0.2.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[root@test openvpn]# Client Net To Net.#
Ahora configuramos los clientes para para que se puedan conectar a la red VPN, se recomienda poner como cliente servidores Linux o otro derivados. Comenzaremos con la configuración del Cliente Oaxaca a México.remote test.ascanet.com.mx float port 1194 dev tun0 persist-tun ifconfig 10.0.1.2 10.0.1.1 comp-lzo ping 15 ping-restart 120 verb 3 secret /etc/openvpn/plutarco.txt persist-key route 192.168.1.0 255.255.255.0 log /var/log/openvpn.logAhora comenzaremos con la configuración del cliente Veracruz a México:
remote test.ascanet.com.mx float port 1195 dev tun0 persist-tun ifconfig 10.0.2.2 10.0.2.1 comp-lzo ping 15 ping-restart 120 verb 3 secret /etc/openvpn/plutarco.txt persist-key route 192.168.1.0 255.255.255.0 log /var/log/openvpn.logComo podemos ver son los mismos parámetros que el servidor.
Comprobando Conexión#
La forma de comprobar esta conexión es hacer pings entre los segmentos red físicos. Comprobación de Oaxaca a México a una máquina cliente.ascariote:~# ping -c 5 192.168.1.10 PING 192.168.4.10 (192.168.1.10) 56(84) bytes of data. 64 bytes from 192.168.1.10: icmp_seq=1 ttl=127 time=39.9 ms 64 bytes from 192.168.1.10: icmp_seq=2 ttl=127 time=37.4 ms 64 bytes from 192.168.1.10: icmp_seq=3 ttl=127 time=38.6 ms 64 bytes from 192.168.1.10: icmp_seq=4 ttl=127 time=89.1 ms 64 bytes from 192.168.1.10: icmp_seq=5 ttl=127 time=110 ms --- 192.168.1.10 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4017ms rtt min/avg/max/mdev = 37.435/63.124/110.489/30.710 ms ascariote:~#Comprobación de México a Veracruz a una máquina cliente.
ascariote:~# ping -c 5 192.168.3.211 PING 192.168.4.10 (192.168.1.10) 56(84) bytes of data. 64 bytes from 192.168.3.211: icmp_seq=1 ttl=127 time=39.9 ms 64 bytes from 192.168.3.211: icmp_seq=2 ttl=127 time=37.4 ms 64 bytes from 192.168.3.211: icmp_seq=3 ttl=127 time=38.6 ms 64 bytes from 192.168.3.211: icmp_seq=4 ttl=127 time=89.1 ms 64 bytes from 192.168.3.211: icmp_seq=5 ttl=127 time=110 ms --- 192.168.3.211 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4017ms rtt min/avg/max/mdev = 37.435/63.124/110.489/30.710 ms ascariote:~#Podemos hacer mas pruebas de ping entre las máquinas de las tres redes conectadas dentro de VPN, pero también ya podremos compartir recursos dentro de estas redes, como ejemplo: yo puedo estar en Veracruz y deseo imprimir en una impresora de México para que se entregue algún reporte en esta cuidad.
Diagrama Net To Net#
Esta es la forma en que se podría ilustrar una configuración Net To Net de OpenVPN, teniendo las siguientes características.- Los equipos clientes y servidor pueden estar en lugar distantes.
- Los equipos están conectados directamente a Intenet.
- Pueden compartir recursos internos de cada red por medio del Túnel VPN.
- Las redes que se unen al Túnel VPN sienten que están dentro de una sola red.
Firewall OpenVPN#
Cuando usamos una VPN se recomienda configurar nuestro firewall para que termina las conexiones hacia el túnel. Aquí ya depende del administrador del sistema que tipo de firewall pueda usar, pero actualmente se siguen utilizando reglas de iptables. Comenzaremos a crear las reglas para nuestro firewall por medio de iptables. Aceptamos el trafico que entrada y salida por el protocolo UDP por el servicio OpenVPN.[root@test ~]# iptables -A INPUT -i ppp0 -p udp --dport 1194 -j ACCEPT [root@test ~]# iptables -A OUTPUT -0 ppp0 -p udp --sport 1194 -j ACCEPTEn este caso la interfaz de escucha del servicio es ppp0 pero también puede ser eth0. Permitimos la conexión desde cualquier equipo por la interfaz tun.
[root@test ~]# iptables -A INPUT -i tun+ -j ACCEPT [root@test ~]# iptables -A OUTPUT -o tun+ -j ACCEPTPermitimos que los equipos de las otras redes accedaan a nuestra red..
[root@test ~]# iptables -A FORWARD -i tun+ -j ACCEPT [root@test ~]# iptables -A FORWARD -o tun+ -j ACCEPTGeneramos el archivo de reglas del firewall.
[root@test ~]# iptables-save > iptablesMovemos el archivo generado a /etc/sysconfig
[root@test ~]# mv iptables /etc/sysconfigReiniciamos el servicio de firewall.
[root@test sysconfig]# /etc/init.d/iptables restart Expurgar reglas del cortafuegos: [ OK ] Configuración de cadenas a la política ACCEPT: filter [ OK ] Descargando módulos iptables: [ OK ] Aplicando reglas del cortafuegos iptables: [ OK ] Cargando módulos iptables adicionales:ip_conntrack_netbios_[ OK ] [root@test sysconfig]#Con esto ya habremos creado el firewall para nuestro servicio de VPN.
Verificando la configuración del Firewall#
La forma mas sencilla y rápida para poder checar que realmente se aplicaron las reglas Iptables para nuestro firewall, tendremos que ejecutar el siguiente comando.[root@test ~]# iptables -nL | grep 1194 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 [root@test ~]#
| | Tweet | Este obra está bajo una licencia Creative Commons Atribución-NoComercial-CompartirIgual 2.5 México. | ![]() |
