September 05, 2012

VPNc, problemas de ruteo hacia el host

«vpnc is a client for cisco vpn concentrator flavors, where a VPN is a technology for using the Internet or another intermediate network to connect computers to isolated remote computer networks that would otherwise be inaccessible.»
-- from wikipedia [search: vpn]

Overview

Para quienes tenemos que conectarnos ocasionalmente para trabajar de manera remota, una de las herramientas que podemos usar es una VPN (virtual private network). Para el caso especifico que nos ocupa, uno de los proveedores más comunes es Cisco.

Obviamente, se tienen clientes "oficiales" para las plataformas destino de los usuarios (windows, por ejemplo), sin embargo no es mi caso, así que instalando VPNc el cual es un cliente que podemos usar portando el perfil de usuario y que el servidor sea de las siguiente plataformas:
  • Cisco VPN concentrator 3000 Series
  • Cisco IOS routers
  • Cisco PIX / ASA Zecurity Appliances
  • Juniper/Netscreen
El caso que nos ocupa es que ocasionalmente, es posible recibir problemas tales como:
  • can't send packet: Can't assign requested address
  • can't send packet: No route to host
Veamos...

Configuración

Configurar un nuevo perfil no tiene mucho problema, basta con saber los siguientes datos dentro de un archivo especifico, digamos algo como:
andresaquino $ cat ~/empresa/perfil.vpnc
ID
Gateway
Password
Domain

En mi caso, el archivo que tengo es algo como esto:
andresaquino $ cat ~/empresa/andres.vpnc
IPSec ID Empresa_IT
IPSec gateway svpn.empresa.com
IPSec secret 3672456rtN
Domain EMPRESAMX

Solución

Para el caso que nos ocupa, nos mostraba los siguientes problemas:
[ 192.168.0.101 | proletaria ] Downloads                   
andresaquino $ sudo vpnc ~/empresa/andres.vpnc 
Enter username for svpn.empresa.com: m0123
Enter password for m0123@svpn.empresa.com: 
can't send packet: Can't assign requested address

Y este caso:
[ 192.168.0.101 | proletaria ] Downloads                   
andresaquino $ sudo vpnc ~/empresa/andres.vpnc 
Enter username for svpn.empresa.com: m0123
Enter password for m0123@svpn.empresa.com: 
can't send packet: No route to host

¿Qué hicimos? simplemente limpiar las tablas de encaminamiento de paquetes o dicho en lenguaje más claro: limpiar las tablas de ruteo. El sistema operativo mantiene una lista de direcciones IP por donde encaminar las solicitudes de red, digamos por ejemplo que buscamos saber por donde sale una solicitud hacia mail.google.com, luego entonces con un [ route get mail.google.com ] en OS X podemos obtener algo como lo siguiente:
Mac 10.13  andresaquino $> sudo route get inbox.google.com
Password:
   route to: qro02s11-in-f5.1e100.net
destination: default
       mask: default
    gateway: 192.168.86.1
  interface: en0
      flags: 
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500         0

Para el caso de Linux, podemos usar tracepath o traceroute (de los cuales, será más común encontrar traceroute):
Mac 10.13  andresaquino $> traceroute inbox.google.com
traceroute to inbox.google.com (172.217.7.37), 64 hops max, 52 byte packets
 1  192.168.86.1 (192.168.86.1)  4.870 ms  6.552 ms  3.486 ms
 2  192.168.100.1 (192.168.100.1)  4.223 ms  4.653 ms  4.149 ms
 3  10.150.64.2 (10.150.64.2)  6.221 ms  5.780 ms  5.256 ms
 4  * * *
 5  10.180.59.71 (10.180.59.71)  13.211 ms  11.194 ms  8.567 ms
 6  fixed-189-203-11-106.totalplay.net (189.203.11.106)  20.722 ms  13.288 ms  11.435 ms
 7  72.14.234.206 (72.14.234.206)  10.521 ms  12.022 ms  11.725 ms
 8  72.14.237.123 (72.14.237.123)  12.667 ms  11.143 ms  10.164 ms
 9  qro02s12-in-f5.1e100.net (172.217.7.37)  10.345 ms  12.885 ms  10.370 ms

Nota:
El comportamiento de [ route -n ] no será el mismo entre distintas versiones de UNiX, por lo tanto te recomiendo usar [ traceroute ] o [ netstat -ar ].

Sin embargo, ocasionalmente (sobre todo en equipos móviles) estas tablas pueden no ser las mismas cuando se cambia de enlace de red (Wifi) y será necesario limpiar las tablas para encaminar nuestras sesiones de red correctamente, para eso usaremos la opción [ flush ] del comando [ route ] y reiniciar nuestro dispositivo de red. Tomen en cuenta que aunque lleguemos a reiniciar el dispositivo eso no quiere decir que las tablas de ruteo se eliminarán, ya que estas permanecen en el cache del sistema operativo durante un tiempo determinado.
Mac 10.13  andresaquino $> sudo route -n flush
default              192.168.86.1         done


Una vez que realizas el flush, reiniciamos el dispositivo de red, iniciamos nuestra VPN y listo!
Mac 10.13  andresaquino $> sudo vpnc ~/empresa/andres.vpnc 
Enter username for svpn.empresa.com: m0123
Enter password for m0123@svpn.empresa.com: 
Connect Banner:
| SYSTEM UNAUTHORIZED USE WARNING
| El uso de este sistema esta RESTRINGIDO SOLAMENTE PARA PERSONAL AUTORIZADO. Cualquier actividad es monitoreada y registrada por personal del area de sistemas, por lo tanto cualquier persona que haga uso del mismo acepta que estas actividades sean monitoreadas y registradas. Estar consciente que si cualquier actividad criminal es detectada, dichos registros asi como informacion personal seran entregadas a las autoridades correspondientes para su investigacion. 

add net 10.10.11.111: gateway 192.100.90.71
add net 10.10.11.112: gateway 192.100.110.71
add net 10.10.11.113: gateway 192.100.120.71
...
VPNC started in background (pid: 24957)...

Referencias


The War of the Worlds - Original drawings, 1906

Original drawings from the 1906 edition of H.G. Wells’ “The War of the Worlds”, illustrated by Brazilian artist Henrique Alvim Corrêa pic.tw...