Ich habe eine Maschine mit zwei öffentlichen IP-Adressen auf zwei Schnittstellen. Diese Maschine läuft sshd
. Gibt es eine Möglichkeit, beim Erstellen eines Tunnels mit einer SOCKS-Schnittstelle (also -D
) anzugeben, welche Schnittstelle für ausgehende Verbindungen verwendet werden soll?
Antwort1
Genau genommen können Sie Ihr Problem durch eine Kombination aus der Option -b in ssh, wie von mgjk vorgeschlagen, und Routing lösen. Angenommen, Sie versuchen, einen Tunnel zur Site 8.8.8.7 aufzubauen (nur ein fiktives Beispiel) und möchten, dass die Verbindung über eth1 läuft, dann der Befehl
sudo route add -host 8.8.8.7 dev eth1
wird eine richtige Route hinzufügen, und alles sollte gut sein.
Dies ist jedoch auch der perfekte Anwendungsfall für „Policy Routing“. Dabei wird die Routing-Tabelle auf der Maschine konfiguriert, die den Tunnel einrichtet (dhderjenige, auf dem der Befehlssh -D …ausgegeben wird), einfach weil es das einzige ist, auf dem die beiden Schnittstellen vorhanden sind.
Eine knappe und dennoch ausreichende Erklärung liefert David Schwartzauf dieser Seite. Das einzige wichtige Detail ist: sagen wir eth0 ist 192.168.1.2 und eth1 ist 10.0.0.2, dann können Sie sagen
ip rule add from 10.0.0.2 table <NAME1>
ip rule add from 192.168.1.2 table <NAME2>
An diesem Punkt können Sie Ihre SSH-Verbindung über -b an die Adresse von eth1 binden, und fertig.
Antwort2
Was passiert, wenn Sie -b verwenden?
-b bind_address
Use bind_address on the local machine as the source address of
the connection. Only useful on systems with more than one
address.