configuración vpn - openvpn
TRANSCRIPT
OpenVPN Configuración VPN
Road Warrior (Host to LAN)
Fig. 1. VPN Road Warrior
1. Preparando el Servidor VPN
(1) Se debe tener instalado los siguientes paquetes: pam, openssl, lzo, openvpn. # rpm -q pam
# rpm -q openssl
# rpm -q lzo
Paquetes necesarios para la compilación del OpenVPN # rpm -q lzo-devel
# rpm –q openssl-devel
# rpm –q make
# rpm –q gcc
(2) De faltar algún paquete hay que instalarlo:
Agregamos el repositorio rpmforge rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-
1.el5.rf.i386.rpm
Instalamos el paquete:
# yum install lzo
(3) Descargamos el paquete fuente de Openvpn: http://openvpn.net/index.php/open-source/downloads.html (3.1) Copiamos el paquete openvpn-2.0.9.tar.gz al directorio /usr/local y luego se descomprime y desempaqueta:
# tar -zxvf openvpn-2.0.9.tar.gz
(3.2) Ingresamos a la carpeta openvpn-2.0.9
# cd /usr/local/openvpn-2.0.9/
(3.3) Empezamos el proceso de instalación de OpenVPN
# ./configure
# make
# make install
# make check
(4) Comprobamos el funcionamiento de Openvpn # openvpn --genkey --secret key
# openvpn --test-crypto --secret key
Fig. 2. Verificando el correcto funcionamiento de Openvpn
Los pasos 1, 2, 3 y 4 se deben repetir exactamente igual en el equipo del cliente Linux
(5) Revisemos las direcciones IP pública y privada:
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0F:3D:CB:7B:74
inet addr:172.17.67.75 Bcast:172.17.67.255 Mask:255.255.255.0
inet6 addr: fe80::20f:3dff:fecb:7b74/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2764 errors:0 dropped:0 overruns:0 frame:0
TX packets:682 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1362998 (1.2 Mb) TX bytes:100959 (98.5 Kb)
Interrupt:185 Base address:0xb800
eth1 Link encap:Ethernet HWaddr 00:15:E9:B0:22:7C
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::215:e9ff:feb0:227c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:330 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:33440 (32.6 Kb) TX bytes:1822 (1.7 Kb)
Interrupt:169 Base address:0xb400
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:322 errors:0 dropped:0 overruns:0 frame:0
TX packets:322 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:23316 (22.7 Kb) TX bytes:23316 (22.7 Kb)
1.1. Configuración del Servidor VPN
(1) Creamos el directorio /etc/openvpn/
(2) Copiar el directorio /usr/local/openvpn-2.2.0/easy-rsa/ hacia /etc/openvpn/
(3) Trasladarse al directorio /etc/openvpn/easy-rsa/2.0/
(4) Definimos permisos de ejecución en los scripts.
(5) Inicializamos las variables para poder trabajar con los scripts para la generación de las variables.
(6) Inicializamos el directorio de las claves.
Fig. 3. Configurar CA
(7) Procedemos a generar el certificado CA. Se nos pedirá una serie de información sobre
nuestra red/empresa que debemos llenar lo más fielmente posible. # sh build-ca
La variable que debemos explícitamente llenar es: Common Name.
Fig. 4. Generación del certificado CA
(8) Generación del certificado y de la clave de encriptación para el servidor.
En éste paso, también se nos pedirá nuevamente información sobre el certificado propio del servidor. Ingresar en Common Name un nombre diferente al anteriormente escogido. En este ejercicio: server
# sh build-key-server server
Fig. 5. Generación del certificado de servidor.
(9) El paso anterior nos genero dos archivos en el directorio /etc/openvpn/easy-rsa/2.0/keys/ que se copiarán dentro del mismo servidor hacia /etc/openvpn.
Fig. 6.
(10) Generando certificados y claves privadas para los clientes.
Cada cliente debe tener su propio certificado y clave de seguridad, para cada cliente que tengamos deberemos repetir el siguiente paso. Los archivos obtenidos debemos copiarlos hacia el directorio /etc/openvpn/ de los equipos cliente. En el caso de que nuestros clientes estén en Windows, debemos copiarlos hacia el directorio c:\program files\openvpn\
Para generar el certificado y claves privadas para el cliente, ejecutamos en nuestro servidor, dentro del directorio /etc/openvpn/easy-rsa/2.0/ # cd /etc/openvpn/easy-rsa/2.0/
# sh build-key cliente1
En el ejemplo anterior generamos la clave y el certificado para un cliente llamado cliente1. Debemos hacer notar que al ejecutar el programa sh build-key, le pasamos como parámetro el nombre del cliente (cliente1 en el ejemplo anterior) el cual debe ser diferente para cada cliente. En el commoName ponemos el nombre del cliente (cliente1 en éste ejemplo) tal y como le pasamos de parámetro.
(11) Se pueden generar tantas claves como sean necesarias, para cada cliente: # sh build-key cliente2
# sh build-key cliente3
Esto nos generará dos claves y certificados más, para cliente2 y cliente3, por favor, en Common Name debemos poner cliente2 ó cliente3 para cada caso.
Fig. 7. Generación del certificado del cliente
(12) El parámetro de Diffie-Hellman debemos generarlo: # sh build-dh
Fig. 8.
(13) Archivos a copiar al servidor VPN: Hacia el directorio /etc/openvpn del servidor copiamos los siguientes archivos: ca.crt, ca.key y dh1024.pem estos archivos están presentes en el siguiente directorio /etc/openvpn/easy-rsa/2.0/keys/
# cd /etc/openvpn/easy-rsa/2.0/keys/
# cp ca.crt ca.key dh1024.pem /etc/openvpn
# ls /etc/openvpn/
Fig. 9.
(14) Archivo de configuración del servidor. Creamos el archivo /etc/openvpn/server.conf, debe quedar como se muestra:
#Puerto por defecto
port 1194
#Protocolo por defecto
proto udp
# Tipo de dispositivo virtual a utilizar (roadwarrior usa tun)
dev tun
# Le dice que no reinicie la interfaz de red
persist-tun
# Le dice que no lea la llave ante un reinicio
persist-key
# Certificado Raíz
ca ca.crt
# Certificado de Servidor
cert server.crt
# Llave privada del servidor
key server.key
# Llave Algoritmo DH
dh dh1024.pem
# Nombre de Red y máscara para la red VPN (El servidor por defecto es el .1)
server 192.168.3.0 255.255.255.0
#Archivo donde guardará un cache con las direcciones IP de clientes
ifconfig-pool-persist ipp.txt
#Ruta para que los clientes alcancen la red local del server (2.0/24)
push "route 192.168.2.0 255.255.255.0"
#Mensajes para evitar cierre de conexión (Uno cada 10 segundos
#y cierre de conexión luego de 120 segundos de inactividad)
keepalive 10 120
# Modo de compresión
comp-lzo
user nobody
group nobody
#Cantidad de información para guardar en el log (de 0 a 11)
verb 4
#Archivo log
status /var/log/openvpn-status.log
Como podemos ver, hay nuevos parámetros, los más importantes son:
push de la ruta hacia la red local interna del servidor. Es la ruta estática permitirá que el road warrior vea a las máquinas de la red interna.
server: Indica el rango de direcciones que se asignará a los clientes que se conecten, deben ser direcciones no similares a las de la red local.
2. Preparando el cliente VPN
(1) Archivos a copiar al equipo del cliente Hacia el directorio /etc/openvpn de cada cliente copiamos los siguientes archivos: ca.crt, clienteX.crt y clienteX.key Tenga en cuenta que X es un número que se corresponde con el cliente (para el cliente 2 sería: cliente2.crt y cliente2.key por ejemplo). Estos 3 archivos deben copiarse de forma segura hacia el cliente, quizá mediante scp o algún medio magnético seguro. No deben enviarse por mail puesto que contienen la clave (.key) de encriptación del cliente. Estos archivos están presentes en: /etc/openvpn/easy-rsa/2.0/keys del servidor. Este paso lo realizamos netamente desde el equipo del cliente:
# scp 172.17.67.75:/etc/openvpn/easy-rsa/2.0/keys/ca.crt /etc/openvpn
The authenticity of host '190.12.79.79 (190.12.79.79)' can't be established.
RSA key fingerprint is 8f:38:bb:2a:7b:74:02:71:6c:40:0f:b0:3d:a2:d1:b0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '190.12.79.79' (RSA) to the list of known hosts.
Password:
ca.crt 100% 1265 1.2KB/s 00:00
# scp 172.17.67.75:/etc/openvpn/easy-rsa/2.0/keys/cliente1.crt /etc/openvpn
Password:
client1.crt 100% 3583 3.5KB/s 00:00
# scp 172.17.67.75:/etc/openvpn/easy-rsa/2.0/keys/cliente1.key /etc/openvpn
Password:
client1.key 100% 887 0.9KB/s 00:00
(2) Configuración en el equipo del cliente: En este caso, la configuración es en el directorio /etc/openvpn/ del equipo cliente. Crearemos el archivo /etc/openvpn/cliente.conf, así quedaría el archivo de configuración:
# Somos cliente
client
# Protocolo por defecto
dev tun
# Tipo de dispositivo virtual a utilizar (roadwarrior usa tun)
proto udp
# Dirección y puerto del servidor vpn
remote 172.17.67.75 1194
# Si hay problemas de resolución, intenta infinitamente
resolv-retry infinite
# No hace binding de un puerto local en particular (no sabemos cual está libre)
nobind
#Las dos siguientes opciones no van en windows
user nobody
group nobody
# Le dice que no lea la llave ante un reinicio
persist-key
# Le dice que no reinicie la interfaz de red
persist-tun
# Certificado Raíz (el que copiamos)
ca ca.crt
# Certificado cliente (el que copiamos)
cert cliente1.crt
# Llave cliente (el que copiamos)
key cliente1.key
# Modo de compresión
comp-lzo
#Cantidad de información para guardar en el log (de 0 a 11)
verb 4
#Archivo log
status /var/log/vpn.log
Las configuraciones más interesantes son:
client: indica que algunas configuraciones las tomará del servidor.
nobind: que no actúe como servidor, que solamente vaya como cliente.
Recordar que cert y key deben ser únicas para cada cliente
3. Activando la red VPN
(1) Iniciamos el servicio openvpn en el lado del servidor # cd /etc/openvpn/
# openvpn server.conf &
Fig. 10.
(2) Revisemos la nueva dirección IP de la tarjeta tun0 del servidor VPN # ifconfig tun0
Fig. 11.
(3) Comprobar la tabla de rutas:
Fig. 12.
(4) Ahora iniciamos el servicio openvpn en el equipo del cliente VPN # cd /etc/openvpn/
# openvpn cliente.conf &
Fig. 13.
(5) Revisemos la nueva dirección IP de la tarjeta tun0 del cliente VPN # ifconfig tun0
Fig. 14.
(6) Comprobar la tabla de rutas:
Fig. 15.
(7) Del lado del equipo cliente realizo un ping a las direcciones IP del servidor VPN
# ping -c3 192.168.1.250
# ping -c3 192.168.3.1
Fig. 16.
4. Accediendo a la red VPN
(1) En el servidor VPN activamos el reenvió de paquetes y el registro de paquetes: # echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -A FORWARD -j LOG
(2) Iniciamos el Servidor Web en el equipo 192.168.2.2 # /etc/init.d/httpd start
(3) En la barra de direcciones del navegador web en el equipo cliente ingreso la IP del Servidor Web de la red interna.
Fig. 17
(4) En el servidor VPN podemos monitorear
Fig. 18.