Comment forcer ssh à utiliser une seconde interface avec une métrique plus élevée?

9

J'ai une machine virtuelle Crunchbang avec deux interfaces, eth0et eth1chacune d'elles se connecte à une machine virtuelle OpenWRT ( eth0être 10.232.64.20et eth1être 10.232.65.20). J'utilise Network Manager et DHCP. Mon objectif global est d'avoir plusieurs sshconnexions et de les lier ifenslave.

Par défaut, eth1(pour une raison quelconque) est la passerelle par défaut:

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

J'ai ajouté un itinéraire pour eth0:

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

Ensuite, j'ai deux itinéraires:

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

Cependant, sshne sort que via eth1:

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

user@crunchbang:~$ ssh -b 10.232.65.20 [email protected]
Enter passphrase for key '/home/user/.ssh/id_rsa': 

Après avoir changé la eth0métrique, j'ai:

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

Et maintenant sshne sort que via eth0:

user@crunchbang:~$ ssh -b 10.232.64.20 [email protected]
Enter passphrase for key '/home/user/.ssh/id_rsa': 

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

Comment forcer sshà utiliser une interface avec une métrique plus élevée?

Éditer

J'ai implémenté et testé la configuration dans la 4.2. Section Routage pour plusieurs liaisons montantes / fournisseurs du HOWTO Linux Advanced Routing & Traffic Control. Étant donné que la configuration est simple et que je n'ai rencontré aucune erreur, je vais simplement afficher le code et les résultats, avec une explication minimale.

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

Voici les tables de routage générées:

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 

Avec cette configuration, ssh se connecte via les deux interfaces:

user@crunchbang:~$ ssh -b 10.232.64.20 [email protected]
Enter passphrase for key '/home/user/.ssh/id_rsa': 

user@crunchbang:~$ ssh -b 10.232.65.20 [email protected]
Enter passphrase for key '/home/user/.ssh/id_rsa': 

Cependant, il semble que je doive perdre Network Manager. Si quelqu'un pouvait expliquer pourquoi c'est une mauvaise idée, ou avertir des pièges, je l'apprécierais.

Modifier2

La suppression de Network Manager s'est bien passée. J'ai juste une dernière question. Quelle est la méthode standard actuelle pour charger la configuration au démarrage?

mirimir
la source
Je viens de découvrir 4.2. Routage pour plusieurs liaisons montantes / fournisseurs . Je mettrai à jour la question en attendant la mise en œuvre.
mirimir
Cela a fonctionné, je vais donc mettre à jour ma question.
mirimir
Je ne sais pas comment charger le routage au démarrage, car cela nécessite des droits root. Le faire avec un script fonctionne bien, mais je préférerais pouvoir redémarrer sans configuration.
mirimir

Réponses:

1

Tout d'abord, votre solution au problème est bonne. Deuxièmement, cela dépend du système d'exploitation. Crunchbag est basé sur Debian, donc ces solutions pourraient faire l'affaire:

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

Sur les systèmes basés sur RHEL, il est également possible d'ajouter <ifname>-ruleet <ifname>-route.

hargut
la source