Wie zwinge ich ssh, eine zweite Schnittstelle mit höherer Metrik zu verwenden?

9

Ich habe ein crunchbang VM mit zwei Schnittstellen, eth0und eth1, von denen jede eine Verbindung zu einem OpenWRT VM ( eth0sein 10.232.64.20und eth1sein 10.232.65.20). Ich verwende Network Manager und DHCP. Mein übergeordnetes Ziel ist es, mehrere sshVerbindungen zu haben und sie miteinander zu verbinden ifenslave.

Standardmäßig ist eth1(aus irgendeinem Grund) das Standard-Gateway:

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

Ich habe eine Route hinzugefügt für eth0:

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

Dann habe ich zwei Routen:

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

Kommt aber sshnur raus über 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': 

Nach dem Ändern der eth0Metrik habe ich:

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

Und jetzt sshraus nur über 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

Wie erzwinge ich sshdie Verwendung einer Schnittstelle mit einer höheren Metrik?

Bearbeiten

Ich habe die Konfiguration in 4.2 implementiert und getestet . Routing für mehrere Uplinks / Anbieter im Linux Advanced Routing & Traffic Control HOWTO. Da die Konfiguration einfach ist und keine Fehler aufgetreten sind, zeige ich nur Code und Ergebnisse mit minimaler Erklärung.

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

Hier sind die generierten Routing-Tabellen:

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 

Bei dieser Konfiguration stellt ssh eine Verbindung über beide Schnittstellen her:

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': 

Es scheint jedoch, dass ich Network Manager verlieren muss. Wenn jemand erklären könnte, warum das eine schlechte Idee ist, oder vor Fallstricken warnen würde, würde ich es begrüßen.

Edit2

Das Entfernen von Network Manager verlief gut. Ich habe nur eine letzte Frage. Was ist die aktuelle Standardmethode zum Laden der Konfiguration beim Booten?

Mirimir
quelle
Ich habe gerade 4.2 entdeckt . Routing für mehrere Uplinks / Anbieter . Ich werde die Frage bis zur Implementierung aktualisieren.
Mirimir
Es hat funktioniert, also werde ich meine Frage aktualisieren.
Mirimir
Ich verstehe nicht, wie das Routing beim Booten geladen wird, da dies Root-Rechte erfordert. Es funktioniert gut mit einem Skript, aber ich würde lieber ohne Setup neu starten können.
Mirimir

Antworten:

1

Erstens ist Ihre Lösung für das Problem gut. Zweitens hängt es vom Betriebssystem ab. Crunchbag basiert auf Debian, sodass diese Lösungen die Aufgabe erfüllen können:

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

Auf RHEL-basierten Systemen besteht auch die Möglichkeit, <ifname>-ruleund hinzuzufügen <ifname>-route.

Hargut
quelle