Enrutamiento de todo el tráfico a través de VPN en Ubuntu Linux


13

Después de haber pasado horas resolviendo problemas, buscando soluciones potenciales en este sitio y en otros, y me resigno a pedir el consejo de mis mejores jugadores. Estoy trabajando para enrutar todo el tráfico de red en una instancia de Ubuntu a través de una VPN de Cisco en una universidad. Utilizando el administrador de red incorporado o vpnc, puedo establecer con éxito una conexión a la VPN y puedo enrutar con éxito el tráfico a cualquier IP de la universidad a través de la VPN. Sin embargo, aparte de esos rangos de IP específicos, parece que no puedo conjurar ninguna ruta que mapee con éxito todo el tráfico de red a través de la VPN.

Hasta ahora, he intentado:

route add -net 0.0.0.0 gw homeportal dev tun0
ruta agregar -net 0.0.0.0 tun0
route add -net 0.0.0.0 gw 128.122.252.77 dev tun0
route add -net 0.0.0.0 gw 128.122.252.77 dev eth0
iptables -A ADELANTE -o tun0 -j ACEPTAR
iptables -A ADELANTE -i tun0 -j ACEPTAR
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Y muchas otras cosas tontas, ineficaces, que no puedo recordar lo suficientemente bien como para transcribirlas con precisión.

Además, he intentado enrutar rangos de IP más pequeños e IP específicos, cada uno en vano. No estoy realmente seguro de qué está sucediendo, ya que el alcance de los efectos que he podido observar son fallas en la resolución de nombres y fallas en el enrutamiento del tráfico a través de la VPN. ¿Qué estoy haciendo mal aquí?

Editar-

Aquí está el resultado de ip route showdespués de iniciar la conexión VPN con VPNC:

predeterminado a través de 192.168.1.254 dev eth0 proto static 
10.0.0.0/8 dev tun0 alcance enlace 
91.230.41.0/24 dev tun0 alcance enlace 
128.122.0.0/16 dev tun0 alcance enlace 
128.122.252.68 a través de 192.168.1.254 dev eth0 src 192.168.1.32 
128.122.253.46 enlace de alcance dev tun0 
128.122.253.79 dev tun0 alcance enlace 
172.16.0.0/12 dev tun0 alcance enlace 
192.168.0.0/16 dev tun0 alcance enlace 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.32 métrica 1 
193.175.54.0/24 dev tun0 alcance enlace 
193.205.158.0/25 dev tun0 enlace de alcance 
193.206.104.0/24 dev tun0 enlace de alcance 
195.113.94.0/24 dev tun0 enlace de alcance 
203.126.200.0/24 dev tun0 alcance enlace 
203.174.165.128/25 enlace de alcance dev tun0 
212.219.93.0/24 dev tun0 enlace de alcance 
216.165.0.0/17 dev tun0 alcance enlace

Más información-

He enrutado con éxito el tráfico arbitrario a través de esta VPN en MS Windows a través del cliente Cisco AnyConnect con configuración predeterminada. Así es como se ve la tabla de enrutamiento cuando el cliente AnyConnect está funcionando (esta es una computadora diferente detrás del mismo enrutador en 192.168.1.254).

Tabla de ruta IPv4
================================================== =========================
Rutas activas:
Métrica de interfaz de puerta de enlace de destino de red
          0.0.0.0 0.0.0.0 192.168.1.254 192.168.1.13 30
         10.0.0.0 255.0.0.0 192.168.128.1 192.168.128.197 2
      91.230.41.0 255.255.255.0 192.168.128.1 192.168.128.197 2
        127.0.0.0 255.0.0.0 en línea 127.0.0.1 306
        127.0.0.1 255.255.255.255 en línea 127.0.0.1 306
  127.255.255.255 255.255.255.255 En enlace 127.0.0.1 306
      128.122.0.0 255.255.0.0 192.168.128.1 192.168.128.197 2
   128.122.252.68 255.255.255.255 192.168.1.254 192.168.1.13 31
       172.16.0.0 255.240.0.0 192.168.128.1 192.168.128.197 2
      192.168.0.0 255.255.0.0 192.168.128.1 192.168.128.197 2
      192.168.1.0 255.255.255.0 en línea 192.168.1.13 286
     192.168.1.13 255.255.255.255 en enlace 192.168.1.13 286
    192.168.1.254 255.255.255.255 en enlace 192.168.1.13 31
    192.168.1.255 255.255.255.255 en enlace 192.168.1.13 286
     192.168.31.0 255.255.255.0 en enlace 192.168.31.1 276
     192.168.31.1 255.255.255.255 en enlace 192.168.31.1 276
   192.168.31.255 255.255.255.255 en enlace 192.168.31.1 276
    192.168.128.0 255.255.255.0 en enlace 192.168.128.197 257
  192.168.128.197 255.255.255.255 en línea 192.168.128.197 257
  192.168.128.255 255.255.255.255 en línea 192.168.128.197 257
    192.168.203.0 255.255.255.0 en línea 192.168.203.1 276
    192.168.203.1 255.255.255.255 en enlace 192.168.203.1 276
  192.168.203.255 255.255.255.255 en línea 192.168.203.1 276
     193.175.54.0 255.255.255.0 192.168.128.1 192.168.128.197 2
    193.205.158.0 255.255.255.128 192.168.128.1 192.168.128.197 2
    193.206.104.0 255.255.255.0 192.168.128.1 192.168.128.197 2
     195.113.94.0 255.255.255.0 192.168.128.1 192.168.128.197 2
    203.126.200.0 255.255.255.0 192.168.128.1 192.168.128.197 2
  203.174.165.128 255.255.255.128 192.168.128.1 192.168.128.197 2
     212.219.93.0 255.255.255.0 192.168.128.1 192.168.128.197 2
      216.165.0.0 255.255.128.0 192.168.128.1 192.168.128.197 2
        224.0.0.0 240.0.0.0 en línea 127.0.0.1 306
        224.0.0.0 240.0.0.0 en línea 192.168.1.13 286
        224.0.0.0 240.0.0.0 en línea 192.168.203.1 276
        224.0.0.0 240.0.0.0 en línea 192.168.31.1 276
        224.0.0.0 240.0.0.0 en línea 192.168.128.197 10000
  255.255.255.255 255.255.255.255 En enlace 127.0.0.1 306
  255.255.255.255 255.255.255.255 En enlace 192.168.1.13 286
  255.255.255.255 255.255.255.255 en línea 192.168.203.1 276
  255.255.255.255 255.255.255.255 en línea 192.168.31.1 276
  255.255.255.255 255.255.255.255 en línea 192.168.128.197 10000
================================================== =========================

Me imagino que será claro que el enrutamiento de la red es bastante nuevo para mí, por lo que agradecería un nivel bastante alto de verbosidad en las respuestas.
deftfyodor

1
Sería útil si pudiera indicar si está utilizando algún cliente (¿alguna conexión?), Y si pudiera publicar su tabla de enrutamiento, gracias.
MariusMatutiae

Hazlo usando ip route, por cierto.
user1686

2
Sí, no utilice comandos de enrutamiento obsoletos: use ip route show para la tabla de enrutamiento. Los comandos obsoletos ocultan algunas de las complejidades que son posibles y útiles también con las VPN, y mucho menos las VLAN, ...
MariusMatutiae

@grawity, @MariusMatutiae - Claro, he editado la pregunta con la salida del comando. Gracias por mencionar el ip routecomando, no lo había encontrado antes.
deftfyodor

Respuestas:


3

Su red local es 192.168.1.0/24, como se muestra en esta línea en su tabla de enrutamiento:

 192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.32  metric 1

Su red VPN es 10.0.0.0/8, como se muestra en esta línea:

 10.0.0.0/8 dev tun0  scope link 

Actualmente, su enrutador predeterminado es:

 default via 192.168.1.254 dev eth0  proto static 

que es, por supuesto, lo que no desea, porque pertenece a su LAN local: por lo tanto, todas sus cosas se enrutan a través de su puerta de enlace local, como si la VPN no existiera.

 You do have however, the all-important statement

 128.122.252.68 via 192.168.1.254 dev eth0  src 192.168.1.32  

cuál es la ruta a su proveedor de VPN.

EDITAR:

No me había dado cuenta de que la tabla de enrutamiento es simplemente la que se obtiene de su VPN, sin su intervención. Esto puede indicar (indirectamente) que su proveedor de servicios está dispuesto a reenviar solo el tráfico explícitamente permitido en su tabla a través de la interfaz tun0, y puede haber tomado medidas adicionales para bloquear el resto del tráfico, en cuyo caso sus esfuerzos serán inútiles.

Sin embargo, suponiendo que su proveedor esté dispuesto a reenviar todo su tráfico, lo que debe hacer es lo siguiente.

Primero, debe averiguar si hay una puerta de enlace dispuesta a aceptar su conexión en el otro lado, porque necesitamos su dirección IP. Te daré cuatro métodos para hacer esto.

1) Con la PC conectada a la VPN, pruebe el siguiente comando:

   sudo dhclient -v tun0

Si todo va bien, debería ver una respuesta que contiene esta línea:

 DHCPOFFER of a.b.c.d from x.y.w.z

xywz es la dirección IP de la puerta de enlace local. Es posible que tenga que apagar su VPN después de esta prueba, y tal vez incluso para reiniciar su PC, porque habremos estropeado la tabla de enrutamiento bastante bien.

2) Alternativamente, puede intentar navegar a uno de los sitios permitidos (aquellos que aparecen en su tabla de enrutamiento como a través de la interfaz tun0 ) y luego emitir el comando:

  ip neigh show

Debería obtener una lista de las PC contactadas a través del protocolo ARP, con MAC y dirección IP; Lo más probable es que reciba cero o una respuesta. Si recibe una sola respuesta, entonces ese es su enrutador.

3) Si no recibe tal respuesta, puede intentar con

  sudo nmap -sn 10.0.0.0/8

(que va a ser muy lento) Su puerta de enlace será una de las PC enumeradas, muy probablemente la que tenga una dirección que termine en .1 o en .254, si existe.

4) Use el comando tcpdump:

  sudo tcpdump -n -i tun0

y vea las direcciones IP expuestas por el comando.

Si tampoco obtiene una respuesta adecuada a esta prueba, significa que alguien realmente ha apretado los tornillos en su red.

Pero seamos optimistas, y supongamos que ahora tiene una dirección IP candidata xwyz para el enrutador remoto. Deberá eliminar la puerta de enlace predeterminada (como sudo!):

  ip route del default via 192.168.1.254

y agregue el nuevo:

  ip route add default via x.w.y.z 

e intenta navegar.

Permítanme repetir: dado que su proveedor ha permitido el tráfico solo a unas pocas direcciones IP seleccionadas a través de su VPN, es posible que haya tomado medidas adicionales (= firewall) para evitar que un usuario inteligente fuerce su tráfico genérico a través de su VPN. En este caso, no hay nada que puedas hacer. Pero si no lo hizo, los pasos anteriores deberían ayudarlo a encontrar una solución.


Gracias por la respuesta muy elaborada, sin embargo, al entrar en la segunda mitad, tengo un poco de hipo. la salida de ip addr show dev tun0lecturas 10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1412 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 192.168.128.193/24 brd 192.168.128.255 scope global tun0 valid_lft forever preferred_lft forever, sin dirección de pares para ser observada. Además, la tabla de enrutamiento que publiqué anteriormente no había sido modificada por mí, sino que fue generada completamente por el cliente vpn.
deftfyodor

@deftfyodor Por favor, vea mi edición.
MariusMatutiae

Usando el comando tcpdump, pude discernir la puerta de enlace y enrutar el tráfico predeterminado hacia ella. Desafortunadamente, todavía solo funciona para los rangos de IP aprovisionados específicamente. Ciertamente, me inclino a creer que existe alguna medida de seguridad adicional, sin embargo, no tengo ningún problema para enrutar el tráfico arbitrario a través de la misma VPN en MS Windows usando el cliente AnyConnect, por lo que seguramente debe haber más en la historia.
deftfyodor

@deftfyodor ¿Puede verificar si su tabla de enrutamiento en Windos es diferente de la de Linux?
MariusMatutiae

Generalmente es similar, aunque hay algunos elementos que difieren, en particular, 0.0.0.0 está configurado para enrutar a través de mi enrutador de red como puerta de enlace, manteniendo la puerta de enlace VPN como interfaz. Edité la pregunta para mostrar la tabla de enrutamiento de Windows.
deftfyodor

3

A todos sus routecomandos les faltan máscaras de red, por lo que solo coinciden con la 0.0.0.0dirección específica , no con todo el Internet. Así que reemplace 0.0.0.0con 0.0.0.0/0en el primer comando que intentó:

ip route add -net 0.0.0.0/0 gw homeportal dev tun0

Puede haber una advertencia que no estoy seguro si su cliente VPN resuelve por sí solo: el punto final del túnel debe excluirse de ser enrutado a través de la VPN, debe enrutarse a través de su eth0interfaz. Entonces, si agregar esta ruta predeterminada rompe su VPN, agregue una ruta específica para su punto final VPN:

ip route add <ENDPOINT>/32 dev eth0


2
Creo que el segundo se supone que es ip route, ¿no? Además, aunque siempre es una buena idea agregar máscaras de red, parece que routeasume / 0 al agregar 0.0.0.0
user1686
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.