VPN con socat


Socat es una utilidad de la línea de comandos capaz de establecer una conexión de red bidireccional y transferir datos a través de ella. Tiene una gran variedad de opciones y puede ser utilizado para muchos propósitos.

Recientemente me plantearon crear una VPN entre 2 máquinas pasando por un router y una máquina intermedia usando socat, lo cierto es que desconocía esta herramienta, en alguna ocasión había usado netcat (socat es también conocida como netcat++), pero no me considero un experto usándola, gran fallo por mi parte porque resulta muy útil.

En sistemas Debian o Ubuntu podemos instalarla con:

apt-get install socat

Bueno vamos al tema, a continuación se describe el esquema de red:

La máquina intermedia a la que hemos llamado proxy, no es que sea un proxy en sí, la hemos llamado de esta forma porque va a hacer de pasarela, aquí se usará socat para reenviar los paquetes hacia el servidor.

Lo primero que hemos de hacer es elegir el puerto en el que se establecerá la comunicación entre el cliente y el proxy para redirigir el pueto en el firewall del router hacia el proxy, el puerto elegido ha sido el 6578.

Una vez abierto el puerto decidimos otro puerto para establecer la comunicación entre el proxy y el servidor, en este caso va a ser el 6579.

A continuación lanzamos el siguiente comando en el servidor (como usuario root, ya que es necesario para crear el nuevo interfaz de red):

root@servidor:~# socat TCP-LISTEN:6579 TUN:192.168.50.2/24,up

Con este comando estamos escuchando en el puerto 6579, y creamos un nuevo interfaz de red tun0 con la ip 192.168.50.2/24

En el proxy ejecutamos:

usuario@proxy:~# socat TCP-LISTEN:6578 TCP:192.168.150.147:6579

De esta forma socat, escucha en el puerto 6578 y reenvía al puerto 6579 del servidor todo lo que llega, en esta ocasión no es necesario tener privilegios de root.

Por último en el cliente, también como root ejecutamos:

root@cliente:~# socat TCP:85.61.22.158:6578 TUN:192.168.50.3/24,up

Esto creará un interfaz de red tun0 con la ip indicada que lanzará los paquetes hacia la ip pública proporcionada en el puerto que le hemos indicado. Se establecería una VPN entre cliente y servidor con las siguientes direcciones:

  • IP Cliente: 192.168.50.3/24
  • IP Servidor: 192.168.50.2/24
Ya podemos hacer ping desde el cliente hacia la dirección del servidor.
El único inconveniente es que de esta forma tenemos una comunicación directa entre los dos extremos, pero esta no va cifrada, no es problema porque ahora podemos hacer ssh directamente al servidor para evitar esto, sin tener que abrir el puerto 22, ya que la comunicación pasa a través del túnel que hemos creado.

Dejar un Comentario

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