¿Cómo fuerzo a ssh a usar una segunda interfaz con una métrica más alta?


9

Tengo una máquina virtual Crunchbang con dos interfaces eth0y eth1cada una de las cuales se conecta a una máquina virtual OpenWRT ( eth0ser 10.232.64.20y eth1ser 10.232.65.20). Estoy usando Network Manager y DHCP. Mi objetivo general es tener múltiples sshconexiones y unirlas ifenslave.

Por defecto, eth1(por alguna razón) es la puerta de enlace predeterminada:

user@crunchbang:~$ ip ro
default via 10.232.65.1 dev eth1  proto static
10.232.64.0/24 dev eth0  proto kernel  scope link  src 10.232.64.20
10.232.65.0/24 dev eth1  proto kernel  scope link  src 10.232.65.20

Agregué una ruta para eth0:

user@crunchbang:~$ sudo ip route add default via 10.232.64.1 dev eth0  proto static metric 1

Entonces tengo dos rutas:

user@crunchbang:~$ ip ro
default via 10.232.65.1 dev eth1  proto static
default via 10.232.64.1 dev eth0  proto static  metric 1
10.232.64.0/24 dev eth0  proto kernel  scope link  src 10.232.64.20
10.232.65.0/24 dev eth1  proto kernel  scope link  src 10.232.65.20

Sin embargo, sshsolo sale a través de eth1:

user@crunchbang:~$ ssh -b 10.232.64.20 user@1.2.3.4
ssh: connect to host 1.2.3.4 port 22: Connection timed out

user@crunchbang:~$ ssh -b 10.232.65.20 user@1.2.3.4
Enter passphrase for key '/home/user/.ssh/id_rsa': 

Después de cambiar la eth0métrica tengo:

user@crunchbang:~$ ip ro
default via 10.232.64.1 dev eth0  proto static  metric 1
default via 10.232.65.1 dev eth1  proto static  metric 2
10.232.64.0/24 dev eth0  proto kernel  scope link  src 10.232.64.20
10.232.65.0/24 dev eth1  proto kernel  scope link  src 10.232.65.20

Y ahora sshsolo sale a través de eth0:

user@crunchbang:~$ ssh -b 10.232.64.20 user@1.2.3.4
Enter passphrase for key '/home/user/.ssh/id_rsa': 

user@crunchbang:~$ ssh -b 10.232.65.20 user@1.2.3.4
ssh: connect to host 1.2.3.4 port 22: Connection timed out

¿Cómo fuerzo ssha usar una interfaz con una métrica más alta?

Editar

He implementado y probado la configuración en 4.2. Enrutamiento para múltiples enlaces ascendentes / sección de proveedores del Linux Advanced Routing & Traffic Control HOWTO. Dado que la configuración es simple y que no encontré errores, solo mostraré el código y los resultados, con una explicación mínima.

root@crunchbang:~# ip route add 10.232.64.0/24 dev eth0 src 10.232.64.20 table T0
root@crunchbang:~# ip route add default via 10.232.64.1 table T0
root@crunchbang:~# ip route add 10.232.65.0/24 dev eth1 src 10.232.65.20 table T1
root@crunchbang:~# ip route add default via 10.232.65.1 table T1
root@crunchbang:~# ip route flush table main
root@crunchbang:~# ip route add 10.232.64.0/24 dev eth0 src 10.232.64.20
root@crunchbang:~# ip route add 10.232.65.0/24 dev eth1 src 10.232.65.20
root@crunchbang:~# ip rule add from 10.232.64.20 table T0
root@crunchbang:~# ip rule add from 10.232.65.20 table T1
root@crunchbang:~# ip route add default scope global nexthop via 10.232.64.1 dev eth0 weight 1 nexthop via 10.232.65.1 dev eth1 weight 1

Aquí están las tablas de enrutamiento generadas:

root@crunchbang:~# ip route show table T0
default via 10.232.64.1 dev eth0 
10.232.64.0/24 dev eth0  scope link  src 10.232.64.20 

root@crunchbang:~# ip route show table T1
default via 10.232.65.1 dev eth1 
10.232.65.0/24 dev eth1  scope link  src 10.232.65.20 

root@crunchbang:~# ip ro
default 
    nexthop via 10.232.64.1  dev eth0 weight 1
    nexthop via 10.232.65.1  dev eth1 weight 1
10.232.64.0/24 dev eth0  scope link  src 10.232.64.20 
10.232.65.0/24 dev eth1  scope link  src 10.232.65.20 

Con esa configuración, ssh se conecta a través de ambas interfaces:

user@crunchbang:~$ ssh -b 10.232.64.20 user@1.2.3.4
Enter passphrase for key '/home/user/.ssh/id_rsa': 

user@crunchbang:~$ ssh -b 10.232.65.20 user@1.2.3.4
Enter passphrase for key '/home/user/.ssh/id_rsa': 

Sin embargo, parece que necesito perder Network Manager. Si alguien pudiera explicar por qué es una mala idea, o advertir sobre las trampas, lo agradecería.

Edit2

Eliminar Network Manager fue bien. Solo tengo una última pregunta. ¿Cuál es la forma estándar actual de cargar la configuración en el arranque?


Acabo de descubrir 4.2. Enrutamiento para múltiples enlaces ascendentes / proveedores . Actualizaré la pregunta pendiente de implementación.
mirimir

Funcionó, así que actualizaré mi pregunta.
mirimir

No entiendo cómo cargar el enrutamiento en el arranque, porque eso requiere derechos de root. Hacerlo con un script funciona bien, pero prefiero poder reiniciar sin configuración.
mirimir

Respuestas:


1

Primero, su solución para el problema es buena. En segundo lugar, depende del sistema operativo. Crunchbag está basado en Debian, por lo que estas soluciones podrían hacer el trabajo:

/server/487939/permanently-adding-source-policy-routing-rules

En los sistemas basados ​​en RHEL también existe la posibilidad de agregar <ifname>-ruley <ifname>-route.

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.