¿Cómo puedo mantener el acceso LAN local mientras estoy conectado a Cisco VPN?
Cuando se conecta mediante Cisco VPN, el servidor tiene la capacidad de indicar al cliente que evite el acceso a la LAN local.
Suponiendo que esta opción del lado del servidor no se puede desactivar, ¿cómo puede permitir el acceso LAN local mientras está conectado con un cliente VPN de Cisco?
Solía pensar que se trataba simplemente de agregar rutas que capturaban el tráfico LAN con una métrica más alta, por ejemplo:
Network
Destination Netmask Gateway Interface Metric
10.0.0.0 255.255.0.0 10.0.0.3 10.0.0.3 20 <--Local LAN
10.0.0.0 255.255.0.0 192.168.199.1 192.168.199.12 1 <--VPN Link
Y tratar de eliminar la 10.0.x.x -> 192.168.199.12
ruta no tiene ningún efecto:
>route delete 10.0.0.0
>route delete 10.0.0.0 mask 255.255.0.0
>route delete 10.0.0.0 mask 255.255.0.0 192.168.199.1
>route delete 10.0.0.0 mask 255.255.0.0 192.168.199.1 if 192.168.199.12
>route delete 10.0.0.0 mask 255.255.0.0 192.168.199.1 if 0x3
Y aunque todavía podría ser simplemente un problema de enrutamiento, los intentos de agregar o eliminar rutas fallan.
¿A qué nivel está haciendo el controlador de cliente VPN de Cisco qué en la pila de redes que anula la capacidad de un administrador local para administrar su máquina?
El cliente VPN de Cisco no puede emplear magia. Todavía es un software que se ejecuta en mi computadora. ¿Qué mecanismo está usando para interferir con la red de mi máquina? ¿Qué sucede cuando llega un paquete IP / ICMP a la red? ¿En qué parte de la pila de redes se está comiendo el paquete?
Ver también
- Sin conexión a internet con Cisco VPN
- Cisco VPN Client interrumpe la conectividad a mi servidor LDAP
- Cisco VPN detiene la navegación de Windows 7
- ¿Cómo puedo prohibir la creación de una ruta en Windows XP al conectarme a Cisco VPN?
- Redirigir el tráfico local de LAN e Internet cuando está en VPN
- Cliente VPN "Permitir acceso LAN local"
- Permitir acceso LAN local para clientes VPN en el ejemplo de configuración del concentrador VPN 3000
- El acceso LAN desapareció cuando me conecto a VPN
- Documentación de Windows XP: ruta
Editar: cosas que aún no he probado:
>route delete 10.0.*
Actualización: dado que Cisco ha abandonado su antiguo cliente, a favor de AnyConnect (VPN basada en SSL SSL), esta pregunta, sin resolver, puede dejarse como una reliquia de la historia.
En el futuro, podemos intentar resolver el mismo problema con su nuevo cliente .
fuente
Respuestas:
El problema con Anyconnect es que primero modifica la tabla de enrutamiento, luego la cuida y la arregla si la modifica manualmente. Encontré una solución para esto. Funciona con la versión 3.1.00495, 3.1.05152, 3.1.05170, y probablemente cualquier otra cosa en la familia 3.1. Puede funcionar con otras versiones, al menos una idea similar debería funcionar asumiendo que el código no se reescribe. Afortunadamente para nosotros, Cisco colocó la llamada de la niñera "el bebé está despierto" en una biblioteca compartida. Entonces, la idea es que evitemos la acción de vpnagentd a través de LD_PRELOAD.
Primero creamos un archivo
hack.c
:Nota: Este código solo funciona con Linux. Para aplicar esta solución a una máquina macOS, consulte la versión adaptada de macOS .
Luego compílalo así:
Instalar
libhack.so
en la ruta de la biblioteca de Cisco:Derriba al agente:
Asegúrate de que realmente esté abajo
Si no,
kill -9
solo para estar seguro.Luego arregle /etc/init.d/vpnagentd agregando
LD_PRELOAD=/opt/cisco/anyconnect/lib/libhack.so
dónde se invoca el vpnagentd para que se vea así:Ahora inicie el agente:
Arregle iptables, porque AnyConnect se mete con ellos:
Es posible que desee hacer algo más avanzado aquí para permitir el acceso solo a ciertos hosts LAN.
Ahora arregle las rutas como desee, por ejemplo:
Comprueba si realmente están allí:
Una versión anterior y más simple de este truco daba una función que solo "devuelve 0"; - ese póster señaló que "el único efecto secundario que he observado hasta ahora es que vpnagentd está utilizando el 100% de la CPU según lo informado por la parte superior, pero en general la CPU solo tiene un 3% de usuario y un 20% de sistema, y el sistema responde perfectamente Lo alineé, parece estar haciendo dos selecciones en un bucle cuando el inactivo regresa de ambos rápidamente, pero nunca lee ni escribe: supongo que se suponía que la llamada que corté con LD_PRELOAD debía leerse. Podría haber una forma más limpia para hacerlo, pero hasta ahora es lo suficientemente bueno para mí. Si alguien tiene una mejor solución, por favor comparta ".
El problema con el truco trivial es que causó que un solo núcleo de CPU fuera 100% todo el tiempo, reduciendo efectivamente el número de subprocesos de CPU del hardware en uno, ya sea que su conexión vpn estuviera activa o no. Noté que las selecciones que estaba haciendo el código estaban en un socket de enlace de red, que envía datos vpnagentd cuando cambia la tabla de enrutamiento. vpnagentd sigue notando que hay un nuevo mensaje en el socket de netlink y llama a routeCallBackHandler para tratarlo, pero como el truco trivial no borra el nuevo mensaje, simplemente sigue llamándolo una y otra vez. el nuevo código provisto anteriormente vacía los datos del enlace de red para que no ocurra el bucle sin fin que causó el 100% de la CPU.
Si algo no funciona, hazlo
gdb -p $(pidof vpnagentd)
, una vez adjuntado:y vea en qué llamada está. Luego adivine cuál desea cortar, agréguelo a hack.c y vuelva a compilar.
fuente
_ZN27CInterfaceRouteMonitorLinux20routeCallbackHandlerEv
?nm /opt/cisco/anyconnect/lib/libvpnagentutilities.dylib | grep routeCallbackHandlerEv
y luego encontrarás__ZN25CInterfaceRouteMonitorMac20routeCallbackHandlerEv
nm /opt/cisco/anyconnect/lib/libvpnagentutilities.so
regresanm: /opt/cisco/anyconnect/lib/libvpnagentutilities.so: no symbols
a mi AnyConnect en Ubuntu, por lo que se generó sin información de la tabla de símbolos. ¿Cómo pudiste conseguir eso?Esto es MUY complicado, pero si crea una máquina virtual mínima con VMWare Player o similar, y ejecuta el cliente VPN Cisco AnyConnect en eso, podría ser posible configurar el enrutamiento como desee usando los adaptadores de red virtual VMWare, o simplemente usar el VM para acceder a los recursos necesarios a través de Cisco SSL VPN y "arrastrar / soltar" archivos a / desde su máquina real.
fuente
El software Shrew Soft VPN también me ayudó, como sugirió Ian Boyd .
Puede importar perfiles de cliente VPN de Cisco. Utilicé Cisco VPN Client versión 5.0.05.0290, y después de instalar Shrew VPN (versión 2.1.7) e importar el perfil de Cisco, pude acceder a la LAN local mientras estaba conectado a una VPN corporativa sin ninguna configuración adicional de conexión Shrew VPN (o software).
fuente
Gracias a Sasha Pachev por el buen truco de arriba.
vpnagentd
también se mete con el solucionador al sobrescribir los cambios realizados en/etc/resolv.conf
. Lo resolví ganando finalmente la carrera contra él:No te olvides de
chattr -i /etc/resolv.conf
desconectar.Estoy tratando de resolverlo interceptando la devolución de llamada, como para el método de rutas anterior, pero todavía no puedo encontrar la devolución de llamada o el método correspondiente.
Actualización 1/2: se
strace
reveló quevpnagentd
está utilizando lainotify
API para monitorear los cambios en el archivo de resolución. A partir de ahí fue cuesta abajo. Aquí está el truco adicional:Eso es un poco exagerado, dado que deshabilita toda observación de archivos para el agente. Pero parece funcionar bien.
El script de envoltura de cliente vpn a continuación integra toda la funcionalidad (actualizada para incluir este truco adicional).
chattr
ya no se usa / necesita.Actualización 3: Se corrigió la configuración de nombre de usuario / contraseña en el script. Ahora usa un
vpn.conf
archivo con el formato que se describe a continuación (y permisos de solo root).fuente
Mi compañía todavía usa esa VPN. El cliente vpnc simplemente cambia la configuración de iptables de esa manera:
Filtra todo excepto el tráfico vpn.
Simplemente coloque el filtro en un archivo con iptables-save, agregue líneas de acceso INPUT y OUTPOUT que coincidan con sus necesidades y vuelva a aplicar el archivo con iptables-restore.
por ejemplo para acceder a una red local en 192.168.0
fuente
¿Alguna noticia sobre esto?
Estoy totalmente de acuerdo y me preguntaba sobre lo mismo.
De todos modos, es una aplicación que requiere privilegios de administrador para instalar y, mientras se ejecuta, puede muy bien filtrar lo que haces ...
Mis intentos en Windows también fallan:
Jaja. Ninguna métrica por debajo de 20 aquí parece.
fuente
No sé si lo he entendido bien, pero primero aclaro mi comprensión:
Tiene una LAN local (por ejemplo, digamos 10.0.0.0/16, y un servidor VPN de Cisco remoto (por ejemplo, 64.0.0.0/16). Desea conectarse al servidor VPN a través del cliente VPN de Cisco y, sin embargo, necesita tener acceso a la LAN. En este caso, desea separar todo el 10.0.xx / 16 de la conexión VPN). Se debe agregar la siguiente ruta en un cliente Mac:
donde en1 es la interfaz a través de la cual está conectado a su LAN. Sé que también puedes agregar lo mismo en Windows y Linux.
fuente
Como no puedo agregar comentarios, publicaré aquí. Estoy corriendo en Windows.
La solución que usa Virtual Machine y ejecuta AnyConnect dentro de la VM y luego usa VM como mediador entre su entorno de trabajo y la red de la compañía no funcionará si su departamento de TI "amado" enruta 0.0.0.0 a través de VPN, incluso su red local (incluyendo esto entre su PC local y VM) se enruta a través de la VPN (sic!).
Traté de aplicar la solución publicada por @Sasha Pachev pero finalmente terminé parcheando .dll para que devuelva 0 al comienzo de la función. Finalmente, después de una pelea con la biblioteca dinámica, pude modificar las tablas de enrutamiento de acuerdo con mis necesidades, ¡pero aparentemente eso no es suficiente!
A pesar de que mis reglas parecen ser correctas para lograr un túnel dividido, sigo teniendo una falla general. ¿Te encontraste con un problema similar al que pudiste resolver?
Así es como se ve mi tabla de enrutamiento ahora (después de modificaciones manuales mientras VPN está activada)
sin embargo, el resultado del ping sigue
Solo como referencia, a continuación se muestra cómo se ve la tabla de rutas cuando la VPN está desconectada (sin alterar)
y así es como se ve la tabla cuando la VPN está conectada (sin modificaciones) en ese caso, cuando intento hacer ping
8.8.8.8
, simplemente obtengo un tiempo de espera (ya que el firewall de la compañía no permite que el tráfico salga de la intranet)fuente
Para aquellos que buscan mantener el control de su tabla de enrutamiento cuando utilizan una VPN SSL de Cisco AnyConnect, consulte OpenConnect . Ambos son compatibles con Cisco AnyConnect SSL VPN y no intenta interrumpir o 'asegurar' las entradas de la tabla de enrutamiento. @Vadzim alude a esto en un comentario anterior .
Después de probar todo menos parchear el Cliente AnyConnect Secure Mobility, pude reemplazarlo con éxito en Windows con OpenConnect GUI . Esto me permitió mantener la conectividad a los recursos locales (y actualizar la tabla de enrutamiento).
Uso OpenConnect en Windows pero también es compatible con Linux, BSD y macOS (entre otras plataformas) de acuerdo con la página del proyecto .
fuente
Intente eliminar esas entradas con la puerta de enlace para
10.64.202.13
ver si el ping8.8.8.8
funciona y luego agregarlas una por una e identificar cuál está causando el problema.¿Cómo parcheaste la DLL? Ni siquiera puedo modificar la tabla de enrutamiento porque sigue agregando la
0.0.0.0
puerta de enlace VPN nuevamente.fuente