OpenVPN

per Victor Carceler darrera modificació 2020-03-25T15:35:15+01:00

Normalmente la interconexión de nodos se realiza mediante una VPN a través de Internet. Para esta función se utiliza el software OpenVPN.

Configuración típica:

Normalmente para establecer una VPN entre dos nodos de la XEiLL es necesario dirigir un puerto UDP en cada uno de los routers de los centros educativos al servidor del nodo. Así, para cada enlace se utiliza un puerto UDP diferente.

Antes de comenzar, es necesario:

  • Conocer las direcciones IP (o los nombres DNS en Internet) de los routers de los centros
  • Conocer las direcciones IP de cada uno de los dos servidores en la LAN del centro educativo
  • Conocer la red, direcciones de las máquinas y broadcast que se utilizará en la VPN
  • Configurar los dos routers para que dirijan el tráfico UDP del puerto elegido al servidor correspondiente
  • Tener conectadas las dos máquinas en la LAN de los respectivos centros con las IPs correspondientes


Parte de estos datos pueden obtenerse en el documento: Asignación de direcciones en la XEiLL


Cuando se configura el túnel, en cada una de las máquinas que conecta aparece una nueva interfaz de red (tapX), que se corresponde al adaptador virtual que conecta con la otra máquina. OpenVPN se encarga de todo el transporte de datos para simular que los dos adaptadores virtuales (cada uno en el servidor de un centro educativo) están conectados por un cable.

En el túnel, entre otros parámetros OpenVPN permite ajustar:

  • Ancho de banda máximo consumido
  • Compresión transparente (se comprimen los datos que se envian y se descomprimen en el otro extremo)
  • Cifrado


En un servidor, para cada túnel con otro nodo se escriben tres ficheros de configuración en el interior de /etc/openvpn. Por ejemplo, en el CEIP Rafael Casanova que mantiene un túnel con el IES Puig Castellar tenemos:

[root@raca openvpn]# ll
total 16
-rw-r--r-- 1 root root 916 abr 10 18:43 iespuigcastellar.conf
-rw-r--r-- 1 root root 347 abr 10 18:45 iespuigcastellar.key
-rwxr--r-- 1 root root 145 abr 10 18:49 iespuigcastellar.sh*
[root@raca openvpn]#

Los ficheros tienen por nombre el centro educativo con el que enlazan y su función es:

iespuigcastellar.conf
Fichero de configuración del túnel. Especifica los diferentes parámetros de funcionamiento.
iespuigcastellar.sh
Script que se ejecuta al levantar el túnel para configurar la interfaz de red virtual. Debe tener permiso de ejecución.
iespuigcastellar.key
Fichero que guarda la clave para realizar el cifrado en la comunicación. Sólo es necesario cuando se utiliza cifrado en la VPN.

Fichero de configuración: iespuigcastellar.conf

# Especificamos el dispositivo a utilizar (debe estar libre)
dev tap0

# Indicamos el puerto UDP para la VPN (debe estar libre)
port 30000

# Utilizamos compresión LZO
#comp-lzo

# Habilitamos el ping en caso de que la conexion este sin trafico durante 60 segundos
# algunos cortafuegos cierran conexiones que llevan tiempo sin enviar/recibir paquetes
ping 60

# Nivel de detalle en los ficheros de registro
verb 3

# Máximo ancho de banda en Bytes/segundo para el túnel
#shaper 10000

# Dirección IP del otro extremo del túnel en Internet (el router del otro centro educativo)
remote 82.151.203.129

# Configuración de la MTU y tamaño de fragmento que aseguran que el túnel seguirá funcionando
tun-mtu 1500
fragment 1300
mssfix

# Script que configura la interfaz de red del túnel
up /etc/openvpn/iespuigcastellar.sh

##############
####Cifado####
##############
secret iespuigcastellar.key
auth SHA1
cipher BF-CBC


Fichero de configuración: iespuigcastellar.sh

Script que levanta la interfaz de red virtual al activar el túnel. Debe ser un fichero ejecutable.

#!/bin/bash
# Asignamos una dirección IP a la interfaz de red y la levantamos
ip addr add 172.16.107.1/30 brd + dev tap0
ip link set dev tap0 up

Fichero de configuración: iespuigcastellar.key

Guarda la clave para el cifrado de la conexión

Activando y desactivando el túnel

El script /etc/init.d/openvpn nos permite controlar el servicio OpenVPN. Cada vez que se activa se intentan levantar todos los túneles configurados. Al detenerlo se cierran los túneles.

Normalmente el sistema estará configurado para lanzar el servicio durante el arranque de la máquina.

Probando el túnel

Si el túnel está levantado, tendremos una nueva interfaz de red que nos permitirá comunicarnos con el otro extremo. Continuando con el ejemplo anterior, en el CEIP Rafael Casanova hay un túnel que comunica con el IES Puig Castellar. De modo que el comando ifconfig nos muestra información sobre la interfaz tap0:

tap0      Link encap:Ethernet  HWaddr 00:FF:34:D0:16:58
inet addr:172.16.107.1 Bcast:172.16.107.3 Mask:255.255.255.252
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:353159 errors:0 dropped:0 overruns:0 frame:0
TX packets:388718 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:36295567 (34.6 Mb) TX bytes:31950474 (30.4 Mb)

Esta no es una interfaz física, es una interfaz virtual controlada por OpenVPN, pero la podemos utilizar como si fuese una interfaz normal. En este túnel, el CEIP Rafael Casanova tiene la interfaz tap0 con IP 172.16.107.1 y en el otro extremo está el IES Puig Castellar con otra interfaz virtual que tiene por IP 172.16.107.2, de manera que podemos comunicarnos como si ambas máquinas estuviesen en la misma red (en realidad hay varios routers entre ellas).

[root@raca openvpn]# ping -c 3 172.16.107.2
PING 172.16.107.2 (172.16.107.2) 56(84) bytes of data.
64 bytes from 172.16.107.2: icmp_seq=1 ttl=64 time=1045 ms
64 bytes from 172.16.107.2: icmp_seq=2 ttl=64 time=993 ms
64 bytes from 172.16.107.2: icmp_seq=3 ttl=64 time=1088 ms

--- 172.16.107.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2010ms
rtt min/avg/max/mdev = 993.061/1042.417/1088.917/39.194 ms, pipe 2
[root@raca openvpn]#
[root@raca openvpn]# traceroute 172.16.107.2
traceroute to 172.16.107.2 (172.16.107.2), 30 hops max, 38 byte packets
1 * 172.16.107.2 (172.16.107.2) 954.765 ms *
[root@raca openvpn]#

Si desde el servidor del CEIP Rafael Casanova intentamos acceder al router del IES Puig Castellar observamos que hay más de un salto:

[root@raca openvpn]# host iespuigcastellar.xtec.net
iespuigcastellar.xtec.net has address 82.151.203.129
[root@raca openvpn]# traceroute 82.151.203.129
traceroute to 82.151.203.129 (82.151.203.129), 30 hops max, 38 byte packets
1 ceiprafaelcasanova.xtec.net (82.151.210.205) 1.783 ms 1.833 ms 1.537 ms
2 10.19.32.1 (10.19.32.1) 54.669 ms 57.568 ms 56.963 ms
3 213.176.160.138 (213.176.160.138) 55.288 ms 59.021 ms 55.160 ms
4 213.176.160.132 (213.176.160.132) 67.149 ms 63.029 ms 52.868 ms
5 10.63.251.22 (10.63.251.22) 948.332 ms 10.63.251.14 (10.63.251.14) 954.577 ms 959.306 ms
[root@raca openvpn]#