Normalmente, los administradores de seguridad perimetral de una empresa configurarán sus concentradores VPN para forzar una ruta predeterminada a los usuarios, de tal manera que todo el tráfico se enrute a través de la conexión vpn. Esto se traduce en que los usuarios deberán salir también a Internet a través de la infraestructura y filtrado corporativos.

Sin embargo, aunque el administrador de VPN de turno puede enviar rutas al cliente, éstas pueden ser ignoradas y establecer un enrutamiento de modo que solo la red A.B.C.D/E requerida se enrute a través de la VPN. El resto del tráfico seguirá utilizando las rutas y la conexión a Internet saliente que se tenían antes de conectar a la VPN.
Esto se denomina enrutamiento VPN de túnel dividido (split-tunneling) y en esta entrada veremos cómo hacerlo mediante:
- openconnect: un cliente VPN de código abierto concebido para ser una alternativa al cliente propietario Cisco Anyconnect y compatible con su servidor
- vpn-slice: un script en bash que reemplaza al que te viene por defecto con openconnect y que facilita añadir y eliminar rutas para realizar el split tunnel
Instalación OpenConnect
$ sudo apt-get install openconnect lib32ncurses5 lib32tinfo5 lib32z1 libc6-i386 libpkcs11-helper1 openvpn vpnc-scripts
El binario openconnect no podrá crear el túnel tun0 sin que se le otorgue alguna capacidad o capability root para administrar redes; consulta las capabilities de Linux (man 7 capabilities) para obtener más detalle.
sudo setcap cap_net_admin+ep /usr/bin/openconnect
Para comprobar que la capacidad se ha añadido correctamente:
getcap -rv /usr/sbin/openconnect
/usr/sbin/openconnect = cap_net_admin+ep
Instalación vpn-slice
Como os comentaba vpn-slice es un reemplazo para OpenConnect o VPNC que facilita la creación de un split túnel:
- Solo enruta el tráfico de hosts o subredes específicos a través de la VPN
- Busca automáticamente nombres de hosts utilizando los servidores DNS de la VPN, y agrega entradas para ellos en /etc/hosts (que limpia después de la desconexión de VPN), sin embargo, no altera /etc/resolv.conf.
Necesitaremos Python 3.3+, dig, iproute2 e iptables:
apt-get install -y python3-pip
pip3 install https://github.com/dlenski/vpn-slice/archive/master.zip
Estableciendo una conexión VPN
Al establecer una conexión VPN contra la red corporativa debemos enrutar la subred requerida a través del túnel. El comando tipo sería:
- La primera vez que te conectas, openconnect mostrará el shasum del servercert, en las conexiones siguientes se puede usar ese shasum como el valor para --servercert
- Hay que reemplazar <10.10.0.0/14> con la subred que desea enrutar sobre el vpn corporativo.
Estas son las rutas antes de establecer la vpn:
Estas son las rutas después de conectarse a la vpn. vpn-slice solo creará rutas para la subred VPN y los servidores DNS de la VPN. Como veis, la ruta predeterminada que no ha cambiado después de conectarse la VPN.
Fuentes:
- Split tunneling with openconnect
- vpnc-script replacement for easy and secure split-tunnel VPN setup

Sin embargo, aunque el administrador de VPN de turno puede enviar rutas al cliente, éstas pueden ser ignoradas y establecer un enrutamiento de modo que solo la red A.B.C.D/E requerida se enrute a través de la VPN. El resto del tráfico seguirá utilizando las rutas y la conexión a Internet saliente que se tenían antes de conectar a la VPN.
Esto se denomina enrutamiento VPN de túnel dividido (split-tunneling) y en esta entrada veremos cómo hacerlo mediante:
- openconnect: un cliente VPN de código abierto concebido para ser una alternativa al cliente propietario Cisco Anyconnect y compatible con su servidor
- vpn-slice: un script en bash que reemplaza al que te viene por defecto con openconnect y que facilita añadir y eliminar rutas para realizar el split tunnel
Instalación OpenConnect
$ sudo apt-get install openconnect lib32ncurses5 lib32tinfo5 lib32z1 libc6-i386 libpkcs11-helper1 openvpn vpnc-scripts
El binario openconnect no podrá crear el túnel tun0 sin que se le otorgue alguna capacidad o capability root para administrar redes; consulta las capabilities de Linux (man 7 capabilities) para obtener más detalle.
sudo setcap cap_net_admin+ep /usr/bin/openconnect
Para comprobar que la capacidad se ha añadido correctamente:
getcap -rv /usr/sbin/openconnect
/usr/sbin/openconnect = cap_net_admin+ep
Instalación vpn-slice
Como os comentaba vpn-slice es un reemplazo para OpenConnect o VPNC que facilita la creación de un split túnel:
- Solo enruta el tráfico de hosts o subredes específicos a través de la VPN
- Busca automáticamente nombres de hosts utilizando los servidores DNS de la VPN, y agrega entradas para ellos en /etc/hosts (que limpia después de la desconexión de VPN), sin embargo, no altera /etc/resolv.conf.
Necesitaremos Python 3.3+, dig, iproute2 e iptables:
apt-get install -y python3-pip
pip3 install https://github.com/dlenski/vpn-slice/archive/master.zip
Estableciendo una conexión VPN
Al establecer una conexión VPN contra la red corporativa debemos enrutar la subred requerida a través del túnel. El comando tipo sería:
sudo openconnect <corporate-vpn-endpoint> \
-m 1290 \
-u <your-vpn-user> \
--servercert sha256:<0446a7EXAMPLE8901278394> \
-s 'vpn-slice <10.10.0.0/14>'
- La primera vez que te conectas, openconnect mostrará el shasum del servercert, en las conexiones siguientes se puede usar ese shasum como el valor para --servercert
- Hay que reemplazar <10.10.0.0/14> con la subred que desea enrutar sobre el vpn corporativo.
Estas son las rutas antes de establecer la vpn:
default via 10.1.1.1 dev wlp4s0 proto static metric 600
10.1.1.0/24 dev wlp4s0 proto kernel scope link src 10.1.1.50 metric 600
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
Estas son las rutas después de conectarse a la vpn. vpn-slice solo creará rutas para la subred VPN y los servidores DNS de la VPN. Como veis, la ruta predeterminada que no ha cambiado después de conectarse la VPN.
default via 10.1.1.1 dev wlp4s0 proto static metric 600
10.1.1.0/24 dev wlp4s0 proto kernel scope link src 10.1.1.50 metric 600
10.10.0.0/14 dev tun0 scope link
10.10.0.0/14 dev tun0 scope link metric 6
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
180.10.34.165 dev tun0 scope link
180.10.34.165 dev tun0 scope link metric 6
Fuentes:
- Split tunneling with openconnect
- vpnc-script replacement for easy and secure split-tunnel VPN setup
Buenas,
ResponderEliminar¿Esto funciona cuando es necesario tener un cliente dedicado tipo Fortinet o Globalprotect de palo alto? (lo digo por vpn-slice, que lo desconozco, el OpenConnect ya se que no, que es el que tiene que levantar directamente el túnel)
vpn-slice es un reemplazo de vpnc-script y sólo funciona con openconnect y vpnc, que a su vez son compatibles con Cisco y, en teoria porque no lo he probado, con Juniper/Netscreen. Me temo que esta herramienta/script no funciona para Fortinet o Palo alto
Eliminar¿Ésto es lo que hay bajo el capó de la VPN de hackthebox?
ResponderEliminar