En este
artículo voy a describir mi caso de uso de openvpn para cifrar el tráfico
cuando estoy fuera de casa o no estoy usando una red segura (típicamente wifi
en un hotel, universidad, aeropuerto...) evitando mirones. Otra de las ventajas
que tiene es poder acceder a la red interna de mi casa donde tengo un servidor
web que no es accesible al público y los servicios de compartición de archivos,
nuestro portátil fuera de casa será un ordenador más dentro de la LAN. También
puede ser útil para enmascarar nuestra IP, por ejemplo si conectamos a un
servidor openvpn de estados unidos podemos navegar y usar servicios con IP
estadounidense.
Si tienes
una IP dinámica en casa que es lo más habitual vas a tener que darte en algún
servicio de dns dinámica y configurarlo para que se actualice cuando tu IP
cambia. El proveedor de este servicio más popular es dyn.com. para mantener la ip actualizada se puede usar un
script llamado ddclient. Se necesita también un ordenador
conectado a internet y encendido las 24 horas del día (si queréis usar el
servicio las 24 horas del día).
Yo tengo el
servidor openvpn en el router, conectado a la IP pública de internet y no me
tengo que preocupar de abrir puertos hacia el ordenador que está corriendo
openvpn.
Empezamos
con la configuración en el servidor
1-instalar
los paquetes necesarios
apt-get
install openvpn openssl bridge-utils
2-generación
de claves
Copiamos el
scrip de generación de claves a nuestro directorio de configuración de openvpn
cp -a
/usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/
Editar
/etc/openvpn/easy-rsa/2.0/vars para que contengan los datos acordes a nosotros
export KEY_COUNTRY=”US”
export KEY_PROVINCE=”US”
export KEY_CITY=”mycity”
export KEY_ORG=”vpn”
export KEY_EMAIL=”myname@myemail.org”
export KEY_PROVINCE=”US”
export KEY_CITY=”mycity”
export KEY_ORG=”vpn”
export KEY_EMAIL=”myname@myemail.org”
Después
usamos los siguientes comandos para crear una entidad de certificación
. ./vars
./clean-all
./build-ca
Creamos las
claves de servidor
./build-key-server server
Y las claves
de usuario. Repetimos este paso tantas veces como usuarios queremos que
senecten a la vpn (también se puede crear alguna de más)
./build-key user1
./build-dh
Generamos la
clave estática (esto añade seguridad)
openvpn
--genkey --secret ta.key
En los pasos
anteriores se han creado una serie de archivos con claves, vamos a colocar cada
uno en su sitio.
Creamos un
directorio para almacenar las claves en el servidor
mkdir /etc/openvpn/keys
Copiamos las
claves que nos interesan para el servidor.
cp ca.crt
server.crt server.key dh1024.pem
ta.key /etc/openvpn/keys
3-Fichero de configuración
En
/etc/openvpn creamos un fichero llamado server.conf. podemos crear un fichero
por cada servidor que queramos arrancar, por ejemplo podemos crear un fichero
server2.conf en que cambiemos el puerto y el protocolo para que use el puerto
443 y el protocolo TCP debido a que ciertas redes pueden bloquear el puerto
1194 UDP que es el que típicamente usa openvpn. Si una red bloquea el puerto
443 en TCP estaría impidiendo el trafico https así que es improbable que nos lo
encontremos bloqueado.
#/etc/openvpn/server.conf
#home.dyndns.org
es la dirección que he configurado y que se traduce en mi ip, si teneis ip
fija, hay que ponerla en vez del nombre del servidor
local home.dyndns.org
port 1194
#port 443
proto udp
#proto tcp
#la otra opción
es usar un dispositivo de tipo tun (tunnel), que es un dispositivo de más alto nivel
(en cuanto al modelo
OSI de red) y necesita menos recursos pero el dispositivo tap es necesario
para el modo bridge
dev tap0
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
tls-auth /etc/openvpn/keys/ta.key 0
up "/etc/openvpn/up.sh"
ifconfig-pool-persist
ipp.txt
#usamos el
188 para el último segmento de subred para que sea rara y no coincida con la
subred de alguno de los sitios en los que nos vamos a conectar, también
asignamos un pool de ips (al estilo de dhcp) para los posibles clientes
server-bridge 192.168.188.1 255.255.255.0 192.168.188.70 192.168.188.79
keepalive 10 120
push "redirect-gateway"
max-clients 5
persist-key
persist-tun
status openvpn-status.log
#log-append openvpn.log
verb 6
En el
archivo de configuración anterior usamos un script (up.sh) que se ejecutará
cuando se inicie el servidor openvpn que lo que hace es primero añadir la
interfaz tap al bridge (similar a enchufar nuestra tarjeta de red virtual a
nuestro switch virtual) y luego activamos la interfaz para que empiece a
funcionar. el bridge ya está previamente creado. No os olvidemos de dar permiso
de ejecución a este script.
#!/bin/sh
brctl addif
br0 tap0
ifconfig tap0 up
Ahora el
servidor openvpn debería arrancar sin problemas. Podemos chequear el estado con
"service openvpn status" y si no ha arrancado al inicio probar a arrancarlo
con "service openvpn start" y mirar los logs (syslog y
/etc/openvpn/openvpn-status.log por ejemplo)
4- Cliente
Para la
parte de cliente yo uso el plugin de vpn para network-manager y poder conectar
con la vpn a golpe de ratón. estos son los parámetros de configuración
pasarela:
home.dyndns.org
Autenticación:
certificados (TLS)
certificado
de usuario: user1.crt
certificado
de CA: ca.crt
clave
privada:user1.key
sin
contraseña
Ahora
pulsamos en la configuración avanzada y especificamos el puerto y marcamos la opción
de usar un dispositivo tap, el resto desmarcadas. En la pestaña de
autenticación TLS también tenemos que proporcionar la clave estática ta.key y
especificar un 1 como dirección de clave ya que estamos usando autenticación
TLS adicional.
Para probar
nuestra VPN debemos estar fuera de nuestra LAN (desde dentro no funcionará
porque las respuestas del servidor no se reciben desde la IP que se espera) y
seleccionar la conexión vpn que acabábamos de crear con el plugin openvpn de
Network manager. Para comprobar que funciona podemos ir a alguna web que nos
diga nuestra IP publica y veremos que estamos utilizando la del servidor
openvpn en vez de la IP publica del lugar en el que nos estamos conectando.
Fuente: Rodrigo Aguilera
No hay comentarios:
Publicar un comentario