ssh über mehrere Schnittstellen eth0 wlan0 zum Internet

ssh über mehrere Schnittstellen eth0 wlan0 zum Internet

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@externalipfunktioniert
  • ssh -b 192.168.178.100 user@externalipIstNICHTArbeiten

außerdem kann ich über beide Schnittstellen zum Internet ein Traceroute durchführen:

  • ssh -b 192.168.1.200 user@externalipfunktioniert

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 mainTabelle 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 32764et 32765als Ausnahmen zum Eintrag 32766beim Nachschlagen in der normalen mainTabelle.

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.200in 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, 32765dass 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 wlan0jetzt ohne Angabe der Quell-IP den Vorzug zu haben, erhöhen Sie die 202Metrik von auf , eth0damit 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 1000oder überein . Zuvor hergestellte Verbindungen gelten als „mit Angabe der Quell-IP“ und werden daher nicht gestört.wlan03276432765

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 maniptablesUndMarkierungenund diese Markierungen als Selektor in verwenden ip 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

verwandte Informationen