VPN (II)

En la entrada anterior, se explicó muy por encima el concepto de VPN y los posibles usos que podríamos darle. Existen multitud de soluciones para implementar una VPN pero en nuestro caso vamos a usar openVPN basado en software libre.

En primer lugar, necesitamos el servidor VPN que será el encargado de aceptar las conexiones de los clientes. He usado un ordenador con una distribución de Linux como servidor, aunque hay muchos dispositivos que trabajan en la capa 3 del nivel OSI que tienen integrado un cliente y/o servidor.

Para instalar el servidor en ubuntu:
sudo apt-get install openvpn

Una vez instalado, necesitamos generar las claves publica y privada, tanto del servidor como de los clientes para que puedan conectarse. En mi caso, he decidido crear una clave para cada cliente y así de esta manera, nuestra seguridad no se vería comprometida. Para ello, vamos a hacer uso del paquete easy-rsa que se instala por defecto con openvpn.

Yo he copiado easy-rsa a un subdirectorio dentro de openvpn y así lo tengo todo “a la mano”.
mkdir /etc/openvpn/easy-rsa
cp /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa

Una vez copiado, debemos generar las claves, lo primero de todo es editar el fichero vars con nuestro editor preferido
vi /etc/openvpn/easy-rsa/vars

yo he cambiado las siguientes líneas:
export KEY_SIZE=4096
export KEY_COUNTRY=”ES”
export KEY_PROVINCE=”MU”
export KEY_CITY=”Cartagena”
export KEY_ORG=”Frangalian.com”
export KEY_EMAIL=”servidores@frangalian.com”
export KEY_EMAIL=servidores@frangalian.com
export KEY_CN=frangalian
export KEY_NAME=frangalian
export KEY_OU=Dpto.Informatica

podéis poner lo que queráis, pero no lo dejéis en blanco. En el tamaño de la clave (KEY_SIZE) podéis usar 1024, 2048, 4096 o incluso 8192. Este es el tamaño en bits. Yo he visto valores de 1024 y 2048.

Ahora exportamos los valores para que se carguen como variables…
source /etc/openvpn/easy-rsa/vars

limpiamos todos los certificados que pudieran haberse creado anteriormente (ojo, no hacedlo cada vez que genereis un cliente)…
/etc/openvpn/easy-rsa/clean-all

generamos el certificado…
/etc/openvpn/easy-rsa/build-ca

generamos el certificado del servidor… (por ejemplo fran)
/etc/openvpn/easy-rsa/build-key-server fran

generamos el certificado Diffie Hellman
/etc/openvpn/easy-rsa/build-dh

generamos el codigo HMAC
openvpn –genkey –secret /etc/openvpn/easy-rsa/keys/ta.key

y por ultimo, generamos tantos certificados como clientes. En mi caso, voy a crear un certificado para un cliente llamado adolfo…
/etc/openvpn/easy-rsa/build-key adolfo

Y ahora, solo nos falta repartir certificados de la siguiente manera:
El fichero ca.crt debe estar en el cliente y el servidor
el fichero ca.key debe estar en el cliente
los ficheros fran.crt y fran.key (el nombre que le habíamos dado al servidor) debe estar en el servidor
los ficheros dh4096.pem y ta.key deben estar en el servidor
los ficheros adolfo.crt, adolfo.key (el nombre que le habíamos dado al cliente) y ta.key deben estar en el cliente.

Todos estos ficheros, se encuentran dentro del directorio /etc/openvpn/easy-rsa/keys/

Una vez que tenemos creados todos los certificados debemos configurar el servidor mediante la edición del fichero /etc/openvpn/server.conf con los siguientes valores: (añado un comentario a cada línea para explicar su significado)

#puerto de conexion
port 1194

#tipo de conexion, udp o tcp
proto udp

#tipo de dispositivo (tap o tun)
dev tap

#La ruta de los certificados creados anteriormente. Yo los he puesto dentro del directorio keys
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/fran.crt
key /etc/openvpn/keys/fran.key
dh /etc/openvpn/keys/dh4096.pem
tls-auth /etc/openvpn/keys/ta.key 0

#Direcciones que va a asignar el servidor
server 10.8.0.0 255.255.255.0

#con esta línea, genero un fichero donde se escriben las ip que toma cada cliente
ifconfig-pool-persist ipp.txt

#Le digo que pueda haber comunicación entre clientes y no solamente cliente-servidor
client-to-client

keepalive 1800 4000

cipher DES-EDE3-CBC #Tripe-DES
comp-lzo

max-clients 100

user nobody
group nogroup

persist-key
persist-tun

Con esta configuración debería funcionar el servidor perfectamente (solo tendríamos que iniciar el servicio e indicarle que lo iniciara automáticamente en cada arranque) pero yo me he visto en la necesidad de asignar configuraciones diferentes a ciertos clientes, para ello, he añadido la siguiente línea al fichero de arriba:

client-config-dir /etc/openvpn/ccd

en la cual, le indico que cada cliente va a tener una configuración especial, por ejemplo una ip determinada. En este caso, crearíamos el directorio ccd y dentro de el un fichero para cada cliente, por ejemplo: /etc/openvpn/ccd/adolfo con el siguiente contenido:

ifconfig-push 10.8.0.4 255.255.255.0 que indicaría que adolfo tiene esa ip y máscara.

En la siguiente entrada, explicaré como configurar el cliente.

2 thoughts on “VPN (II)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *