Implementar VPN con Linux
noviembre 5, 2009 at 4:59 pm Deja un comentario
En este articulo prentendo explicar la forma de implementar una VPN a traves de Linux.
El esquema de desarrollo del presente articulo es el siguiente:

La situacion sería la siguiente:
Una empresa desea conectar las redes de dos de sus sucursales con la sede principal. De este modo se pueden acceder a todas las aplicaciones de la sede prinicipal ademas de otros servicios.
Sede Principal:
Nombre servidor: Servidor01
IP eth0(WAN): 190.10.10.10
IP eth1(LAN): 192.168.0.1
IP LAN: 192.168.0.0/24
Sucursal 01
Nombre servidor: Servidor02
IP eth0 (WAN): 190.10.10.11
IP eth1: (LAN)192.168.1.1
IP LAN: 192.168.1.0/24
Sucursal 02
Nombre servidor: Servidor03
IP eth0 (WAN): 190.10.10.12
IP eth1 (LAN): 192.168.2.1
IP LAN: 192.168.2.0/24
Para implementar dicha VPN vamos a hacer uso de la aplicación OpenVpn la cual esta bajo licencia GPL.
Pasos en el Servidor01:
Instalar openvpn:
apt-get install openvpn
Copiar los script para crear los certificados de seguridad
cp -a /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn
cd /etc/openvpn/easy-rsa
abrir el archivo vars
nano vars
Modificar las siguientes variables:
export KEY_COUNTRY=CO
export KEY_PROVINCE=ATLANTICO
export KEY_CITY=BARRANQUILLA
export KEY_ORG=”FC CIA LTDA”
export KEY_EMAIL=”sistemas@fcr.com.co”
Guardar y salir del documento CTRL+X
Inicializamos las variables de extorno para los certificados:
.vars
Limpiarmos el directorio cd /etc/openvpn/easy-rsa
sh clean-all
Generamos el certificado CA:
sh build-ca
Este comando nos pedira la cierta información de la empresa, ya por defecto estan las modificadas en el archivo vars, el campo que no debemos dejar en blanco es:
Common Name (eg, your name or your server’s hostname) []: servidor01
Aqui devemos escribir el nombre de la maquina de linux.
Generamos el certificado y clave de encriptación para el servidor:
sh build-key-server servidor01
Al igual que el paso anterior nos pedira los datos de la empresa y el campo del hostname, deben ser iguales que el anterior.
Generamos el parametros de Diffie-Hellman así:
sh build-dh
Ya con lo ejeuctado en los pasos anteriores tenemos los siguientes archivos en el directorio /etc/openvpn/easy-rsa/keys:
ca.crt
ca.key
servidor01.crt
servidor01.key
dh1024.pem
Debemos copiar estos archivos en la carpeta /etc/openvpn
Ahora podemos crear los certificados para los servidores de las dos sedes con los siguientes comandos:
sh build-key servidor02
sh build-key servidor03
No olvidar que el campo Common Name (eg, your name or your server’s hostname) []: deben ir los nombres de los servidores (servidoro2 y servidor03 respectivamente). Con esto ya tenemos los siguientes archivos en el directorio /etc/openvpn/easy-rsa/keys:
servidor02.crt
servidor02.key
servidor03.crt
servidor03.key
Estos archivos los vamos a utilizar cuando comencemos a configurar el openvpn el servidor de cada sucursal.
ahora creamos el archivo /etc/openvpn/servidor.conf
nano /etc/openvpn/servidor.conf
Agregamos lo siguiente al archivo:
port 1194
proto udp
dev tun
server 10.8.0.0 255.255.255.0
#—- Seccion de llaves —–
ca ca.crt
cert servidor01.crt
key servidor01.key
dh dh1024.pem
#—————————-
client-config-dir ccd
ifconfig-pool-persist ipp.txt
# Red Local
push “route 192.168.0.0 255.255.255.0″
# Red suscursal 01
route 192.168.1.0 255.255.255.0
# Red sucursal 02
route 192.168.2.0 255.255.255.0
client-to-client
# Sede principal
push “route 192.168.0.0 255.255.255.0″
# Sucursal 01
#push “route 192.168.1.0 255.255.255.0″
# Sucursal 02
push “route 192.168.2.0 255.255.255.0″
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 4
Ahora debemos crear el directorio ccd dentro de /etc/openvpn/
mkdir /etc/openvpn/ccd
creamos dos archivos uno por sucursal con el nombre de los servidores:
nano /etc/openvpn/ccd/servidor02
y agregamos la red LAN de la sucursal:
iroute 192.168.1.0 255.255.255.0
Creamos el segundo archivo:
nano /etc/openvpn/ccd/servidor03
y agregamos la red LAN de la sucursal:
iroute 192.168.2.0 255.255.255.0
Hasta este momento ya tenemos configurado el servidor OpenVpn en la sede pricipal, ahora debemos iniciar el servidor openvpn:
/etc/init.d/openvpn restart
Para verificar si el servidor arranco bien puedes consultar el log del sistema:
tail -f /var/log/syslog
ó puedes verificar si la interfaz de red virtual de la VPN subió:
ifconfig
Te debe aparecer algo así:
tun0 Link encap:UNSPEC HWaddr 00-00-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:19801109 errors:0 dropped:0 overruns:0 frame:0
TX packets:24662088 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1645353739 (1.5 GiB) TX bytes:2753119854 (2.5 GiB)
Otras consideraciones que debes hacer es la configuración de tu firewall:
1. Debes habilitar el ip_forwarding:
echo 1 > /proc/sys/net/ipv4/ip_forward
2. Aplicar la regla para tener acceso al dispositivo tun0
# Aplicando reglas para OpenVPN
iptables -A INPUT -p udp –dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
Ahora debemos configurar los clientes:
Instalar el servidor openvpn en cada servidor:
apt-get install openvpn
Tenemos que copiar los siguientes archivos a cada servidor en el directorio /etc/openvpn:
Servidor02:
ca.crt
servidor02.crt
servidor02.key
Servidor03:
ca.crt
servidor03.crt
servidor03.key
Estos archivos se encuentran en el directorio /etc/openvpn/easy-rsa/keys del servidor01.
En el servidor02 y servidor03 creamos el archivo /etc/openvpn/servidor02.conf y /etc/openvpn/servidor03.conf respectivamente.
Agregar las siguientes en /etc/openvpn/servidor02.conf
client
dev tun
proto udp
remote 190.10.10.10 1194 # direccion ip del servidor01
resolv-retry infinite
nobind
persist-key
persist-tun
#—— SECCION DE LLAVES ——–
ca ca.crt
cert servidor02.crt
key servidor02.key
#ns-cert-type server
#———————————
comp-lzo
verb 4
Agregar las siguientes en /etc/openvpn/servidor03.conf
client
dev tun
proto udp
remote 190.10.10.10 1194 # direccion ip del servidor01
resolv-retry infinite
nobind
persist-key
persist-tun
#—— SECCION DE LLAVES ——–
ca ca.crt
cert servidor03.crt
key servidor03.key
#ns-cert-type server
#———————————
comp-lzo
verb 4
Iniciamos openvpn en cada servidor (servido02 y servidor03) :
/etc/init.d/openvpn restart
Verificamos el log de systema (tail -f /var/log/syslog) y las interfaces de red (ifconfig) para ver si aparece la interfaz tun0.
En estos momentos debemos tener conexión con las diferentes redes de la empresa, para realizar pruebas de conexion podemos hacer ping a cada servidor con su dirección IP LAN desde el servidor 01:
Ping al servidor02:
ping 192.168.1.1
Ping al servidor03:
ping 192.168.2.1
Si no da ping debes revisar los log y la configuración, muchas veces el problema esta en los certificados, si es necesario crearlos de nuevo hazlo.
Si te dan ping debes verificar ahora haciendo ping a cualquier equipo de la red local de cada sede.
Espero que te sirva de gran ayuda este articulo. Gracias
Trackback este articulo | Suscríbete a los comentarios vía RSS Feed