ssh a través de múltiples interfaces eth0 wlan0 a internet

ssh a través de múltiples interfaces eth0 wlan0 a internet

Estoy intentando abrir varios túneles ssh inversos a través de diferentes interfaces (en una raspberry pi con raspbian strech) como alternativa.

Dicho esto, tengo problemas para abrir conexiones ssh salientes a través de diferentes interfaces. Ahora mismo hay:

  • eth0 como IP estática (192.168.1.200)
  • wlan0 a través de dhcp (192.168.178.100)

Vincular ssh a la dirección IP funciona para "eth0" pero no para "wlan0":

  • ssh -b 192.168.1.200 user@externalipestá trabajando
  • ssh -b 192.168.178.100 user@externalipesNOlaboral

Además de eso, puedo rastrear la ruta a través de ambas interfaces a Internet:

  • ssh -b 192.168.1.200 user@externalipestá trabajando

sudo traceroute -i wlan0 google.com

traceroute to google.com (172.217.21.14), 30 hops max, 60 byte packets
 1  192.168.178.1 (192.168.178.1)  12.528 ms  17.229 ms  21.757 ms
 2  192.0.0.1 (192.0.0.1)  26.576 ms  41.445 ms  47.408 ms ...
  ...

sudo traceroute -i eth0 google.com

traceroute to google.com (172.217.21.14), 30 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  0.537 ms  0.404 ms  0.570 ms
  ...

¿Alguna idea de cómo hacer que funcione ssh en ambas interfaces?

ruta -n:

0.0.0.0         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
0.0.0.0         192.168.178.1   0.0.0.0         UG    303    0        0 wlan0
192.168.0.0     0.0.0.0         255.255.252.0   U     202    0        0 eth0
192.168.178.0   0.0.0.0         255.255.255.0   U     303    0        0 wlan0

Respuesta1

De forma predeterminada, solo se utilizará la primera entrada coincidente en la tabla de enrutamiento (principal) para determinar la ruta al destino. Además, un paquete que no se reciba en esta entrada coincidente se descartará debido arp_filter.

Su configuración requiere enrutamiento de políticas: la ruta ahora debe depender no solo del destino, sino también del origen, almacenando múltiples rutas en múltiples tablas de enrutamiento y seleccionando la tabla adecuada, por lo tanto, la ruta, dependiendo del origen. La afirmación anterior sigue siendo cierta: se elegirá la primera ruta coincidente en la tabla, pero podría elegirse de una tabla diferente.

Entonces, primero configura tablas de enrutamiento adicionales (valores de tabla elegidos "arbitrariamente") para complementar lo que no habría funcionado solo usando la maintabla:

ip route add table 1921681    default via 192.168.1.1 dev eth0
ip route add table 192168178  default via 192.168.178.1 dev wlan0

Luego se utiliza el selector de fuente correcto para elegir la tabla adecuada conip rule. Aquí solo una nueva regla sería suficiente, pero por motivos de simetría, se agregarán ambas, lo que permitirá una mayor flexibilidad en la tabla de enrutamiento principal, por ejemplo, al cambiar métricas (ver más adelante):

ip rule add from 192.168.0.0/22   lookup 1921681
ip rule add from 192.168.178.0/24 lookup 192168178

Las reglas ahora son:

# ip rule
0:  from all lookup local 
32764:  from 192.168.178.0/24 lookup 192168178 
32765:  from 192.168.0.0/22 lookup 1921681 
32766:  from all lookup main 
32767:  from all lookup default 

Considere las entradas 32764et 32765como excepciones a la entrada que busca en la tabla 32766habitual .main

Eso es todo, ahora tus comandos anteriores funcionarán según lo previsto, ambas rutas pueden funcionar al mismo tiempo, cuando indicas la IP de origen con la opción -b.

Si no indica la IP de origen, el sistema no coincidirá inmediatamente con las reglas adicionales y las tablas de enrutamiento, y utilizará de forma predeterminada la elección realizada al usar la tabla principal: la primera ruta coincidente ganará, por lo que seleccionará la fuente 192.168.1.200en su configuración actual. .

Para repetirlo nuevamente, si no indicas explícitamente una IP de origen (como suele ser el caso), tu ruta principal aún seleccionará lapor defectoruta predeterminada y la IP de origen predeterminada correspondiente, luego las reglas 32764y 32765se asegurarán de que siga funcionando correctamente en cualquier caso. De esta forma puedes jugar con las métricas para elegir qué ruta e IP tienen prioridad.

Por ejemplo, para que wlan0ahora sea preferido cuando no se indica la IP de origen, aumente la 202métrica de eth0to 1000para tener wlan0la ruta predeterminada, de modo que la IP se elija primero. Indicar explícitamente la IP de origen seguirá coincidiendo directamente en las reglas 32764o 32765. Las conexiones previamente establecidas cuentan como "indicando la IP de origen", por lo que no serán perturbadas.

ip route add default via 192.168.1.1 dev eth0 metric 1000
ip route del default via 192.168.1.1 dev eth0 metric 202

Algunas notas adicionales:

  • No intente eliminar todas las rutas predeterminadas en la maintabla (habitual), o sus conexiones no se establecerán más si la aplicación no indica la IP de origen (" Network is unreachable").
  • Son posibles casos más complejos, incluido tener la misma IP en dos redes diferentes, pero esto requerirá configuraciones adicionales y probablemente ayuda de netfilter y iptables.
  • Incluso es posible equilibrar la carga de esas rutas utilizandoiptablesymarcasy usar esas marcas como selector en ip rule, pero es más complejo que funcione correctamente en todos los casos, especialmente cuando se mezclan conexiones donde se indica la IP de origen y donde el sistema deja que la IP de origen sea elegida, y también especialmente para UDP. Entonces también podría requerir un uso incómodo de NAT y aflojarrp_filter.

Respuesta2

Asegúrate de haber habilitado las interfaces

ip link set dev eth0 up
ip link set dev wlan0 up

información relacionada