Hoy contaré mi experiencia instalando VPN basados en SSL. Aquí explicaré algunos casos comunes que espero ayuden a quién requiera interconectar dos o más oficinas. No hablaré de cómo funciona SSL ni los aspectos detrás de cámara, sólo explicaré lo básico y funcional. Si alguien toma esto como guía lo mas probable es que logre su objetivo, sin embargo podrían presentarse algunos casos que requieren de otros aspectos que escaparán a este artículo. Si es tu caso, pide y reza a san google…
Requerimiento en la oficina principal
1. PC corriendo Debian, Slackware, Centos, White Box, Ubuntu, lo que sea. He probado y en todas ellas lograrás lo mismo. El PC tendrá 2 o 3 tarjetas de red dependiendo si deseas una zona Lan o una zona Lan + zona DMZ (la 1era tarjeta mira hacia Internet, la 2da tarjeta mira a la Lan y la 3ra mira a la DMZ). Mediante el comando mii-tool deberás identificar que tarjeta mira o conecta hacia donde. El artículo trata el caso de un servidor con 2 tarjetas de red, se desea interconectar dos oficinas.
2. Openvpn –> www.openvpn.org
3. Lzo —> http://www.oberhumer.com/opensource/lzo/
4. Se requiere OpenSSH.
Proceso de instalación y configuración en la oficina principal
1. La instalación de GNU/Linux no será tratado en este artículo. Usa aquella distribución con la que te sientas mejor. Si tienes duda sobre la instalación de GNU/Linux entonces es hora de leer algo y luego podrás continuar aquí. Yo recomiendo instalar servidores sin entorno gráfico, personalmente estoy acostumbrado a usar consola y no uso herramientas gráficas para configurar ni personalizar, solo edito archivos. Esto no tiene que ser una regla, es mi elección.
2. Dependiendo de la distribución que estes usando es probable que puedas descargar los paquetes openvpn y lzo mediante apt u otro gestor. Sin embargo aquí explicaré la forma “tradicional”
3. Todos los pasos indicados de aquí en adelante deberán hacerse bajo el usuario root o equivalente a root.
4. Instalando LZO.
root@armaged0n:/tool# wget -c http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
root@armaged0n:/tool# tar -zxvf lzo-2.03.tar.gz
root@armaged0n:/tool# cd lzo-2.03.tar.gz
root@armaged0n:/tool/lzo-2.03# ./configure && make && make check && make test && make install
Aquí habrá que esperar un momento mientras se compila e instala. En caso se muestre algún mensaje de error deberá observar el mensaje, es seguro que no se instaló una libreria o paquete de soporte como por ejemplo make u otro. Resuelva esto y corra nuevamente el comando ./configure && ……
El proceso indicado anteriormente se resume en lo siguiente: descargo el paquete a una carpeta, desempaqueto, ingreso a la carpeta y finalmente compilo e instalo.
5. Instalando Openvpn
root@armaged0n:/tool# wget -c http://openvpn.net/release/openvpn-2.0.9.tar.gz (aquí descargo)
root@armaged0n:/tool# tar -zxvf openvpn-2.0.9.tar.gz (aquí desempaqueto)
root@armaged0n:/tool# cd openvpn-2.0.9 (aquí entro a la nueva carpeta creada al desempaquetar)
root@armaged0n:/tool/openvpn-2.0.9# ./configure && make && make install
Asegurese de instalar primero LZO ya que openvpn lo necesitará al momento de compilar.
6. Si llegó a este punto, alégrese, sólo le falta un 80%
. Ahora vaya a /etc y verifique que existe la carpeta openvpn, si no existe, entonces deberá crearlo con mkdir /etc/openvpn
7. Crearemos la llave que será la mismas para ambos servidores / oficinas.
root@armaged0n:/etc/openvpn# openvpn –genkey –secret key1
8. Ahora creamos el archivo que permitirá interconectar ambas oficinas:
root@armaged0n:/etc/openvpn# touch oficina.conf
El contenido del archivo oficina.conf será algo similar a esto:
local ip_publico_asignado_en_el_server_local
remote ip_publico_asignado_en_el_server_remoto
dev tun0
port 5000
comp-lzo
user nobody
ping 15
ifconfig 192.168.10.61 192.168.10.60
secret /etc/openvpn/key1
up /etc/openvpn/routeoficina
Breve explicación sobre este archivo:
local aquí deberá indicar el IP público que posee una de las interfaces instaladas en el servidor (asumamos que eth0 posee este IP). Este seria el caso cuando su enlace posee varios IP públicos. Si su enlace sólo tiene un IP público entonces tienes dos alternativas, la primera es dejar que el router proporcionado por el proveedor del enlace tome el IP público asignado y sólo configuras el router para que toda solicitud de conexión hacia el router pase al servidor que estas instalando. La segunda alternativa es convertir el router en modo bridge y que sea el servidor quién tome el IP público. También puede suceder que el enlace posea un IP público dinámico, entonces aquí deberás considerar crear una cuenta por ejemplo en dyndns.org y asociar ese dominio con un programa como ipcheck aunque hay otros y mediante cron asociar y declarar el ip del enlace, si este es tu caso deberas colocar el host.dyndns.org en reemplazo del ip_publico_asignado.
remote exactamente igual al caso anterior solo que declaras como se indica el otro extremo al que se conectara el servidor VPN.
dev tun0 corresponde a la interfaz que se creará para crear el túnel VPN
port 5000 el puerto por donde se conectarán ambos servidores
comp-lzo la compresión a usar.
user nobody el usuario a cargo del demonio.
ping 15 cada 15 segundos se emitirá una ping para determinar si el tunel esta levantado y/o mantenerlo activo.
ifconfig 192.168.10.61 192.168.10.60 el IP de origen y el IP de destino que se asociarán a las interfaces tun0 en cada lado
secret /etc/openvpn/key1 localización de la llave a compartir entre ambos servidores.
up /etc/openvpn/routeoficina un script que permitirá declarar rutas y permitir que las redes con segmentos internos diferentes puedan verse.
9. Ahora se deberá crear el archivo /etc/openvpn/routeoficina que contendrá lo siguiente:
#!/bin/bash
/sbin/route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.10.60
Observa el contenido anterior, estoy declarando que el segmento de red de la oficina sucursal es 192.168.2.0 y que la puerta de enlace a dicho segmento es 192.168.10.60 (el ip asignado a la tarjeta tun0 del otro extremo). Para el ejemplo aqui descrito, el segmento de la oficina principal es 192.168.1.0. Cambie estos valores para su caso. Haga ejecutable este archivo mediante chmod +x /etc/openvpn/routeoficina
10. Como paso final sólo queda levantar el servicio, esto se hace así:
openvpn –daemon 5 –verb /etc/openvpn/oficina.conf
Listo!
Obviamente aún no se tiene el servidor en el otro extremo para conectar pero compruebe que el servicio VPN se encuentra corriendo mediante el comando netstat -l -n -v deberá observar el port 5000 sino es así algo malo ocurrió asi que revise los log mediante tail -f /var/log/messages para ver que ocurre, de seguro no le será dificil identificar el problema y corregirlo.
Ahora en la oficina sucursal
Se asume que ya instaló GNU/Linux en el servidor de esta oficina. El proceso de instalación del VPN es similar salvo los siguientes cambios a realizar:
1. Copie mediante ssh o un dispositivo usb el archivo /etc/openvpn/key1 localizado en la oficina principal (ahora remoto), copielo en el servidor local en la misma localización (directorio).
2. Edite el archivo /etc/openvpn/configuracion.conf
local ip_publico_asignado_en_el_server_local
remote ip_publico_asignado_en_el_server_remoto (ahora oficina principal)
dev tun0
port 5000
comp-lzo
user nobody
ping 15
ifconfig 192.168.10.60 192.168.10.61 (vea el cambio con el archivo anterior)
secret /etc/openvpn/key1
up /etc/openvpn/routeoficina
3. Edite el archivo /etc/openvpn/routeoficina que deberá presentar esto:
#!/bin/bash
/sbin/route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.10.61
Observe los cambios y compare con el archivo anteriormente indicado para la oficina principal.
4. Inicie el VPN
openvpn –daemon 5 –verb /etc/openvpn/oficina.conf
Eso es todo.
Hasta este momento ambos servidores se encuentran corriendo, sin embargo es posible que no logre enlazar las oficinas. Aqui tiene un modelo de Firewall que viene con el openvpn descargado:
Para oficina principal:
#!/bin/bash
# eth0 is connected to the internet.
# eth1 is connected to a private subnet.
PRIVATE=192.168.1.0/24
LOOP=127.0.0.1
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -F
iptables -t nat -F
iptables -t mangle -F
# Allow local loopback
iptables -A INPUT -s $LOOP -j ACCEPT
iptables -A INPUT -d $LOOP -j ACCEPT
# Allow incoming pings (can be disabled)
iptables -A INPUT -p icmp –icmp-type echo-request -j ACCEPT
# Allow services such as www and ssh (can be disabled)
iptables -A INPUT -p tcp –dport ssh -j ACCEPT
#Openvpn
iptables -A INPUT -p udp –dport 5000 -j ACCEPT
# Allow packets from TUN/TAP
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
# Allow packets from private subnets
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT
# Keep state of connections from local machine and private subnets
iptables -A OUTPUT -m state –state NEW -o eth0 -j ACCEPT
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state –state NEW -o eth0 -j ACCEPT
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
# Masquerade local subnet
iptables -t nat -A POSTROUTING -s $PRIVATE -o eth0 -j MASQUERADE
Para la oficina sucursal, modifique los parametros que sean requeridos.
Eso es todo…