Después de haber probado múltiples soluciones para la protección del tráfico de mis dispositivos empleando VPN (IPSEC + L2TP con OpenSwan) o a través de túneles SSH en una Raspberry Pi, me he decidido a usar una nueva solución muy interesante: SoftEther.
SoftEther (Software Ethernet) es una solución para la gestión de túneles VPN Open Source (Apache License 2.0), multiplataforma (se puede ejecutar en Windows, GNU/Linux, Mac, FreeBSD y Solaris) y que emplea múltiples protocolos (SSL-VPN, L2TP, IPsec, EtherIP, OpenVPN y Microsoft Secure Socket Tunneling Protocol) en una única solución que incluye tanto la parte de servidor como de cliente (roadwarrior). Incorpora funcionalidades de NAT-Transversal y es muy flexible en entornos protegidos por firewalls.
Este artículo describe el proceso de instalación y configuración de SoftEther en una Raspberry Pi (Debian) para permitir acceso remoto vía L2TP + IPSEC a una red doméstica. Esta es una configuración muy básica, ya que SoftEther soporta VPN site-to-site, ad-hoc, conexiones seguras con proveedores de servicios de cloud y otras muchas funcionalidades que pueden ser consultadas aquí: https://www.softether.org/4-docs/2-howto
NOTA: Debido a que la solución se encuentra muy bien documentada y es muy intuitiva, aquí simplemente se enumerarán los pasos seguidos junto con las guías del desarrollador y mis comentarios respecto a configuraciones puntuales y puntos que hay que tener en cuenta para que la solución funcione correctamente.
- Descargar SoftEther del sitio oficial: https://www.softether.org/5-download
- Para Raspberry Pi, descargar los siguientes componentes:
- Descargar el paquete y seguir las instrucciones para instalar la solución como se describe aqui: https://www.softether.org/4-docs/1-manual/7._Installing_SoftEther_VPN_Server/7.3_Install_on_Linux_and_Initial_Configurations
- En la sección “7.3.8 Registering a Startup Script”, hay que hacer algunos cambios. Debido a que Debian emplea Systemd en vez de SysVinit, hay que crear el siguiente script para gestionar el daemon, renombrarlo como vpn.service y copiarlo en /etc/systemd/system:
[Unit] Description=SoftEther VPN Server daemon After=network-online.target [Service] Type=forking ExecStart=/usr/local/vpnserver/vpnserver start ExecStop=/usr/local/vpnserver/vpnserver stop [Install] WantedBy=multi-user.target
- Activar ip forwarding: Editar el fichero /etc/sysctl.conf y adicionar la línea net.ipv4.ip_forward = 1. Habilitar estos cambios ejecutando:
#sysctl -p /etc/sysctl.conf
- Hecho esto, habilitar el script e iniciar el daemon:
#systemctl enable vpn.service #systemctl start vpn.service
- Instalar SoftEther VPN Server Manager, una consola gráfica (GUI) que facilitará bastante la vida para las tareas de gestión de los túneles, la creación de usuarios, la visualización de registros de eventos, entre otros. Para ello, ir a https://www.softether-download.com/en.aspx y descargar e instalar el siguiente componente en un equipo Windows dentro de la red doméstica (este equipo debe estar en la misma red en la que está la Raspberry Pi):
- Cambiar la contraseña del administrador y crear un Virtual Hub inicial, como se indica aquí: https://www.softether.org/4-docs/1-manual/7._Installing_SoftEther_VPN_Server/7.4_Initial_Configurations
- Escoger el tipo de VPN a configurar (en este caso Remote Access VPN Server), crear un Local Bridge y habilitar los usuarios que accederán a la VPN, como se indica aquí: https://www.softether.org/4-docs/2-howto/1.VPN_for_On-premise/2.Remote_Access_VPN_to_LAN. En mi caso, los usuarios se autentican con usuario y contraseña, pero se puede escoger cualquiera de los múltiples métodos que soporta la solución:
- Configurar la VPN IPSEC /L2TP conforme se indica aquí: https://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server/1.Setup_L2TP%2F%2F%2F%2FIPsec_VPN_Server_on_SoftEther_VPN_Server
- Realizar configuraciones finales para los tipos de VPN soportadas mediante este menú de la GUI:
- Configurar la Pre-shared Key (PSK) que autenticará el túnel VPN IPSEC y deshabilitar el soporte para túneles sin encriptación.
- Remover los servicios que no se necesiten: Debido a que la VPN que se empleará solamente IPSEC / L2TP, se recomienda deshabilitar el soporte para OpenVPN / MS-SSTP y conexiones con Azure.
- Si se quiere, se puede emplear el servicio nativo de DNS dinámico, que permitirá acceder a la VPN a través de un nombre de host bajo el dominio softether.net en vez de hacerlo vía IP:
- Llegados a este punto, se deben configurar los puertos en el router inalámbrico de casa para que el servidor de SoftEther (Raspberry Pi) pueda ser accedido desde internet. Para un túnel IPSEC / L2TP se requieren los siguientes puertos:
- 500/UDP
- 4500/UDP
- 1701/TCP y UDP
- En este momento ya se tendría una VPN completamente funcional y lista para aceptar conexiones, por lo que se debe proceder a configurar los clientes VPN. Para este caso, yo uso los clientes nativos IPSEC / L2TP de Windows y Android, cuyos manuales de instalación están aquí:
- Es MUY importante recordar que el nombre de usuario de la VPN debe seguir el formato usuario@Virtual_hub y que se debe configurar Forwarding Routes como 0.0.0.0/0. De lo contrario la conexión no funcionará.
Notas adicionales:
- En vez de crear un Local Bridge se puede hacer uso de la funcionalidad de Secure NAT. Aunque esto puede implicar algunos riesgos de seguridad, facilita el despliegue y la configuración del servidor:
- Los registros de eventos están ubicados en /usr/local/vpnserver bajo server_log y security_log, aunque también se pueden acceder desde la GUI.
- SoftEther incluye una consola de administración web basada en HTML 5 + AJAX. Es muy sencilla, ya que solamente se pueden ejecutar acciones muy limitadas y se accede vía HTTPS (puerto 443) del servidor VPN.
¡Espero que sea de utilidad!
Leave a Reply