No tengo competencias particulares en networking, así que haré todo lo posible para explicar mis necesidades. En mi computadora portátil Linux estoy ejecutando StrongSwan (con NetworkManager) para conectarme a una VPN particular con IPsec. Esta VPN me permite alcanzar este tipo de IP 10.*.*.*
.
Ahora, mi problema es que cuando ejecuto la VPN, todo el tráfico pasa por la VPN, pero preferiría enrutar a la VPN solo los paquetes dirigidos a esas IP ( 10.*.*.*
).
¿Cómo puedo hacerlo? ¿Alguien puede proporcionarme una guía sencilla o compartir las configuraciones necesarias y cómo aplicarlas?
Respuesta1
El complemento NetworkManager de strongSwan actualmente no permite cambiar los selectores de tráfico propuestos (que deciden qué tráfico se tuneliza). Por lo tanto, siempre propone tunelizar todo y, a menos que el servidor limite los selectores de tráfico (ver más abajo), eso es lo que se negocia.
Posibles formas de solucionar esto:
- Si puede, cambie la configuración del servidor para que limite la propuesta del cliente a las subredes deseadas a través de su propio conjunto reducido de selectores de tráfico. Algunos clientes son más o menos capaces de manejar esto, el complemento NM de strongSwan debería estar bien (en la wiki de strongSwan puede encontrarmás información sobre túneles divididosy problemas potenciales con diferentes clientes).
- Si solo está interesado en acceder a su LAN local mientras está conectado a la VPN, puede cargar elbypass-lanenchufaren elcharon-nmdaemon (el backend del complemento strongSwan NM), que instala automáticamente las políticas de omisión de IPsec para todas las subredes conectadas localmente.
- De forma similar a la opción anterior, utilice el demonio IKE normal (Caronteosistema-caronte, configurado a través de swanctl.conf o ipsec.conf) para instalar políticas de omisión de IPsec para las subredes a las que no desea acceder a través de VPN (esto también funciona si no están conectadas localmente).
Evitar que elcharon-nmdemonio instale sus propias rutas en la tabla de enrutamiento 220 (a través decharon-nm.install_routesopción en strongswan.conf), o borre la tabla de enrutamiento 220 después de que se haya establecido la conexión. Y luego, ya sea manualmente o mediante un script NM (en
/etc/NetworkManager/dispatcher.d
, consulte ladocumentación aquí), instale rutas específicas solo para las subredes que desea crear un túnel, por ejemplo:ip route add 10.0.0.0/8 dev <outbound interface> src <virtual IP> table 220
Donde la dirección IP virtual debe determinarse mediante un registro o
ip addr
(o en un script mediante una variable de entorno). Si no desactiva la instalación automática de rutas, también puede obtener la IP virtual de la ruta existente, que eliminará posteriormente.- Alternativamente, use el demonio IKE normal en lugar del complemento NM. Allí tiene más opciones para canalizar solo el tráfico que desea (ya sea configurando un selector de tráfico remoto específico o mediante políticas de omisión). Sin embargo, no tiene una GUI para configurar/iniciar las conexiones VPN (pero puede iniciar las conexiones automáticamente o cuando se detecta tráfico para las subredes de destino).
Respuesta2
Muchas gracias a @ecdsa por la integridad de su respuesta.
Soy un novato en redes y luché mucho para implementar la solución, aunque era trivial.
La siguiente solución adopta la cuarta sugerencia y requiere los siguientes pasos:
- Encienda su VPN a través de NetworkManager
Ejecute el siguiente comando para descubrir la ruta creada desde NetworkManager
user@laptop:~$ ip route list table 220 default via 192.168.1.1 dev enp0s31f6 proto static src 172.26.199.15
Tome nota de la interfaz (enp0s31f6) e IP virtual (172.26.199.15)
Vacíe la ruta actual, porque desea utilizar una ruta personalizada, con el siguiente comando
sudo ip route flush table 220
Agregue su ruta personalizada con el siguiente comando
sudo ip route add 10.0.0.0/8 dev enp0s31f6 via 172.26.199.15 table 220
Ahora sólo los paquetes dirigidos a10.0.0.0/8se enrutará a través de la VPN.