The Information Systems and Computer Applications examination covers material that is usually taught in an introductory college-level business information systems course.

Comunicación entre clientes OpenVPN con tun (routing)

Comunicación entre clientes OpenVPN con tun (routing)

 
TwitterFacebookLinkedInBufferMail
Evernote
+Tag

En el caso que tengamos múltiples clientes conectados a un servidor con OpenVPN con TUN, deberemos configurar la rutas.

 

Los modos de funcionamiento de OpenVPN puede ser mediante TUN o TAP:

  • TAP: Modo de funcionamiento de capa 2, por lo tanto, los equipos se ven como si estubieran conectados al mismo segmento de red. Por lo tanto, ven el tráfico broadcast que se genere en el segmento como si estuvieran directamente conectados.
  • TUN: Modo de funcionamiento de capa 3, por lo tanto, deberemos configurar routing.

Usando TAP podemos comunicar clientes entre sí directamente.

En el caso de TUN, si intentamos hacer un ping entre dos equipos conectados al mismo servidor OpenVPN podemos recibir un ICMP de “Packet filtered“:

# ping 172.16.101.16
PING 172.16.101.16 (172.16.101.16) 56(84) bytes of data.
From 80.80.80.117 icmp_seq=1 Packet filtered
From 80.80.80.117 icmp_seq=2 Packet filtered

Esto se debe a las rutas que hace que el paquete a otro equipo conectado al servidor se vaya por la default gateway. En el siguiente ejemplo podemos ver que todo paquete que no vaya al servidor (172.16.101.1) ni sea de ninguna de las otras redes irá por el default gateway, que en este caso será hacia Internet:

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
<strong>172.16.101.1    0.0.0.0         255.255.255.255 UH        0 0          0 tun0</strong>
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
192.168.254.0   0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
0.0.0.0         192.168.254.1   0.0.0.0         UG        0 0          0 eth0

Por lo tanto, en todos los clientes (con la directiva client-config-dir) que queramos que se comuniquen entre sí deberemos añadir una ruta para la red que queramos configurar. En dicha configuración de cliente, forzamos una IP fija a cada cliente, que su gateway sea 172.16.101.1 y publicamos una ruta para que el segmento 172.16.101.0/24 vaya por dicho gateway:

# cat cliente.systemadmin.es
ifconfig-push 172.16.101.12 172.16.101.1
push "route  172.16.101.0 255.255.255.0 172.16.101.1"

Las rutas de los clientes quedarán como las siguientes:

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
<strong>172.16.101.1    0.0.0.0         255.255.255.255 UH        0 0          0 tun0
172.16.101.0    172.16.101.1    255.255.255.0   UG        0 0          0 tun0</strong>
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
192.168.254.0   0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
0.0.0.0         192.168.254.1   0.0.0.0         UG        0 0          0 eth0

Por lo tanto, ahora deberemos hacer que los paquetes que se entregan por la interfaz tun del servidor se entreguen al cliente destino. Por defecto tendremos el forwarding desactivado, por lo tanto deberemos activarlo mediante el fichero /etc/sysctl.conf modificando la directiva net.ipv4.ip_forward a 1. Aplicamos los cambios mediante sysctl -p

# sysctl -p
(...)
net.ipv4.ip_forward = 1

A continuación definiremos dos reglas de iptables:

  • Una regla que permita el forwarding en las interfaces tun:
    iptables -A FORWARD -i tun+ -j ACCEPT
    
  • Otra regla que lo deniegue en las interfaces eth:
    iptables -A FORWARD -i eth+ -j DROP
    

    En lugar de cambiar la política por defecto de FORWARD, añado el DROP para tener el contador de paquetes para dicha regla.

Si lanzamos un ping entre dos clientes conectados veremos como aumentan los contadores y ya se ven entre sí:

# iptables -L -nv
(...)
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    6   504 ACCEPT     all  --  tun+   *       0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  eth+   *       0.0.0.0/0            0.0.0.0/0

Tags:

Relacionados

Comunicación entre clientes OpenVPN con tun (routing) was first posted on September 10, 2013 at 12:22 pm.

Comments are closed.