Las versiones recientes del servidor OpenSSH permiten montar una VPN utilizando una conexinSSH. Esto nos permite, por ejemplo, tener acceso a todos los puertos del servidor incluso en aquellos casos en los que sólo nos dan acceso al puerto de SSH.

Para montar una VPN utilizando el servidorSSHen Debian haremos lo siguiente…

SERVER:

Aadimos en /etc/ssh/sshd_config

PermitTunnel point-to-point
PermitRootLogin yes

Para crear el dispositivo TUN es necesario ejecutar algunos comandos como root, por eso utilizamos la directiva PermiRootLogin a yes. Si no queremos dar acceso de login al usuario root, podemos utilizar otras soluciones ms elegantes como: forzed-commands-only o without-password que no comprometen tanto la seguridad como PermitRootLogin yes. Ver enlaces relaccionados al final del documento.

Finalmente, recuerda que es necesario reiniciar el servidorSSHpara que los cambios tengan efecto.

Editamos: /etc/network/interfaces

allow-hotplug tun0
iface tun0 inet static
      address 10.0.0.1
      netmask 255.255.255.0
      pointopoint 10.0.0.2

Es vital utilizar allow-hotplug tun0para que se creen automticamente los dispositivos tun con udev, de lo contrario deberemos utilizar herramientas como tunctlpara crear los dispositivos, lo cual puede darnos problemas de permisos al intentar abrir/crear los dispositivos.

CLIENT:

Editamos: /etc/network/interfaces

allow-hotplug tun0
iface tun0 inet static
      pre-up ssh -vv -i /root/.ssh/id_rsa -S /var/run/ssh-vpn-tunnel-control -M -f -w 0:0 root@ssh_server true
      pre-up sleep 5
      address 10.0.0.2
      pointopoint 10.0.0.1
      netmask 255.255.255.0
      #up route add -net 192.168.1.0 netmask 255.255.255.0 tun0 #creating optional route
      #down route del -net 192.168.1.0 netmask 255.255.255.0 tun0 #creating optional route
      post-down ssh -i/root/.ssh/id_rsa -S /var/run/ssh-vpn-tunnel-control -O exit root@ssh_server

Con esto conseguimos establecer una conexin punto a punto con el servidor ssh remoto, si bien, en ocasiones querremos ir un poco ms all. Por ejemplog. Si queremos llegar a otoros equipos ubicados en la red remota, o al reves, cuando varios equipos de nuestra red han de poder llegar al servidor remoto.

Se asume que hemos creado el par de claves privada/publica id_rsa/id_rsa.puby que hemos copiado la publica al servidor SSH remoto para poder autenticar sin necesidad de proporcionar password.

Arrancar y detener la VPN

Para iniciar la conexin punto a punto utilizaremos los comandos ifup tun0 e ifdown tun0 respectivamente.

Ahora ya ponemos alcanzar el servidor remoto en 10.0.0.1.

Tras establecer la conexin punto a punto, y en base a nuestras necesidades, podemos encontrarnos diferentes escenarios. Por ejemplo:

Acceso a otros equipos de la red remota

Activamos el forwarding en el servidorSSH y ejecutamos:

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

Acceso al servidor remoto desde varios equipos de nuestra red

Activamos el forwarding en el cliente de ssh y ejecutamos:

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

En cada uno de los equipos de red que deseamos que tengan acceso al servidor, deberemos configurar la ruta correspondiente:

Por ejemplo en windows:

route add 10.0.0.0 mask 255.255.255.0 IP_SSH_CLIENT

Nota: Para activar el forwarding en ambos casos: sysctl -w net.ipv4.ip_forward=1

Fuentes:

Related content