Ich versuche, mehrere Reverse-SSH-Tunnel über verschiedene Schnittstellen (auf einem Raspberry Pi mit Raspbian Strech) für ein Fallback zu öffnen.
Allerdings habe ich Probleme, ausgehende SSH-Verbindungen über verschiedene Schnittstellen zu öffnen. Im Moment gibt es:
- eth0 als statische IP (192.168.1.200)
- wlan0 über dhcp (192.168.178.100)
Das Binden von SSH an die IP-Adresse funktioniert für „eth0“, aber nicht für „wlan0“:
ssh -b 192.168.1.200 user@externalip
funktioniertssh -b 192.168.178.100 user@externalip
IstNICHTArbeiten
außerdem kann ich über beide Schnittstellen zum Internet ein Traceroute durchführen:
ssh -b 192.168.1.200 user@externalip
funktioniert
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
...
Irgendeine Idee, wie man SSH über beide Schnittstellen zum Laufen bringt?
Route -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
Antwort1
Standardmäßig wird nur der erste passende Eintrag in der (Haupt-)Routingtabelle verwendet, um die Route zum Ziel zu bestimmen. Darüber hinaus wird ein Paket, das nicht bei diesem passenden Eintrag empfangen wird, verworfen, darp_filter
.
Ihr Setup erfordert Policy-Routing: Die Route muss jetzt nicht nur vom Ziel, sondern auch von der Quelle abhängen, indem mehrere Routen in mehreren Routing-Tabellen gespeichert werden und die entsprechende Tabelle und damit Route je nach Quelle ausgewählt wird. Die vorherige Aussage bleibt wahr: Die erste passende Route in der Tabelle wird ausgewählt, sie kann jedoch aus einer oder mehreren anderen Tabellen ausgewählt werden.
Sie legen also zunächst zusätzliche Routingtabellen fest (Tabellenwerte werden „willkürlich“ gewählt), um das zu ergänzen, was allein mit der main
Tabelle nicht funktioniert hätte:
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
Anschließend wählt man mit dem rechten Quellenwähler die passende Tabelle aus mitip rule
. Hier würde eine einzige neue Regel genügen, aber aus Gründen der Symmetrie werden beide hinzugefügt, um mehr Flexibilität in der Hauptroutingtabelle zu ermöglichen, z. B. beim Ändern von Metriken (siehe später):
ip rule add from 192.168.0.0/22 lookup 1921681
ip rule add from 192.168.178.0/24 lookup 192168178
Die Regeln lauten jetzt:
# 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
Betrachten Sie die Einträge 32764
et 32765
als Ausnahmen zum Eintrag 32766
beim Nachschlagen in der normalen main
Tabelle.
Das war's, jetzt funktionieren Ihre vorherigen Befehle wie vorgesehen. Beide Routen können gleichzeitig funktionieren, wenn Sie die Quell-IP mit der Option angeben -b
.
Wenn Sie die Quell-IP nicht angeben, führt das System keine unmittelbare Übereinstimmung mit den zusätzlichen Regeln und Routingtabellen aus und greift standardmäßig auf die Auswahl zurück, die bei Verwendung der Haupttabelle getroffen wurde: Die erste übereinstimmende Route gewinnt, wodurch die Quelle 192.168.1.200
in Ihrem aktuellen Setup ausgewählt wird.
Um es noch einmal zu wiederholen: Wenn Sie nicht explizit eine Quell-IP angeben (wie es normalerweise der Fall ist), wählt Ihre Hauptroute trotzdem dieStandardStandardroute und die entsprechende Standard-Quell-IP, dann stellen die Regeln sicher 32764
, 32765
dass es in jedem Fall weiterhin korrekt funktioniert. Sie können also mit den Metriken spielen, um auszuwählen, welche Route und IP Vorrang hat.
Beispiel: Um wlan0
jetzt ohne Angabe der Quell-IP den Vorzug zu haben, erhöhen Sie die 202
Metrik von auf , eth0
damit die Standardroute von verwendet wird, sodass die IP zuerst gewählt wird. Die explizite Angabe der Quell-IP stimmt immer noch direkt mit den Regeln 1000
oder überein . Zuvor hergestellte Verbindungen gelten als „mit Angabe der Quell-IP“ und werden daher nicht gestört.wlan0
32764
32765
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
Einige zusätzliche Hinweise:
- Versuchen Sie nicht, alle Standardrouten aus der
main
(üblichen) Tabelle zu entfernen. Andernfalls werden Ihre Verbindungen nicht mehr hergestellt, wenn die Anwendung die Quell-IP ("Network is unreachable
") nicht angibt. - Auch komplexere Fälle sind möglich, darunter die Verwendung derselben IP in zwei verschiedenen Netzwerken. Dazu sind jedoch zusätzliche Einstellungen und wahrscheinlich die Hilfe von Netfilter und erforderlich
iptables
. - Es ist sogar möglich, die Last dieser Routen auszugleichen, indem man
iptables
UndMarkierungenund diese Markierungen als Selektor in verwendenip rule
, aber es ist komplexer, es in allen Fällen richtig funktionieren zu lassen, insbesondere beim Mischen von Verbindungen, bei denen die Quell-IP angegeben ist und bei denen die Quell-IP vom System ausgewählt werden kann, und insbesondere auch bei UDP. Es könnte dann auch eine umständliche Verwendung von NAT und eine Lockerung erfordernrp_filter
.
Antwort2
Stellen Sie sicher, dass Sie Schnittstellen aktiviert haben
ip link set dev eth0 up
ip link set dev wlan0 up