Verbinden Sie Maschinen, die sich beide hinter NAT befinden, über einen SSH-Tunnel

Verbinden Sie Maschinen, die sich beide hinter NAT befinden, über einen SSH-Tunnel

Ich habe zwei Maschinen, beide hinter NAT. Außerdem habe ich von jeder Maschine aus Zugriff auf den SERVER. Gibt es eine Möglichkeit, einen SSH-Tunnel von Maschine1 zu Maschine2 über den SERVER zu erstellen?

Client-Rechner sind Linux Mint. SERVER ist Debian. Ich habe auf allen Rechnern nur Benutzerzugriffsrechte.

Antwort1

Ich kann mir vorstellen, wie es gemacht werden könnte.

Sie haben also 3 Computer. A, B, C

A,B stehen hinter NAT. Nehmen wir an, B ist der Vermittler

Methode 1

2 Tunnel

Sie können also eine SSH-Verbindung von A nach B (Tunnel 1) herstellen. Und von C nach B (Tunnel 2). Und von Tunnel 1 weiter zu Tunnel 2.

Computer A verbindet sich mit SSH -L

Computer C verbindet sich mit SSH -R

Mit -L bzw. -R wird bestimmt, welche Seite des Tunnels zuhört und welche Seite des Tunnels weiterleitet.

Wenn ich mich also nicht geirrt habe, könnten Sie so etwas tun wie:

A$ ssh -L 1234:127.0.0.1:2345 user@compB
C$ ssh -R 2345:127.0.0.1:3456 user@compB

Ich bin mir jedoch nicht sicher, ob Sie zwei Verbindungen zum selben SSH-Server herstellen können. Versuchen Sie daher Folgendes: Erstellen Sie zwei verschiedene SSHD-Server.

Bearbeiten Sie sshd_config auf CompB und Sie werden sehen, dass dort „Port 22“ steht. Fügen Sie darunter eine Zeile mit dem Text „Port 222“ hinzu. Dann führt CompB einen SSH-Server auf zwei Ports aus.

Dann können Sie sich mit den SSH-Servern über zwei verschiedene Ports verbinden: 22 und 222

A$ ssh -L 1234:127.0.0.1:2345 user@compB -p22
C$ ssh -R 2345:127.0.0.1:3456 user@compB -p222

Port 1234 ist der Port auf Computer A, an den Sie Ihr Client-Programm anschließen. Es ist der Eingang zum Tunnel 1

Port 2345 ist der Port auf Computer B und Eingang zu Tunnel 2

Port 3456 ist der Port, auf dem Sie das Serverprogramm auf CompC ausführen

Auf diese Weise kann CompA über CompB eine Verbindung zu einem Server auf CompC herstellen.

Methode 2

ein Tunnel

Eine Möglichkeit besteht darin, nur einen Tunnel zu verwenden, aber dann erhalten Sie nur auf der Hälfte der Strecke eine Verschlüsselung. 5.6.7.8 ist die IP von CompC, Port 3456 ist der Server auf CompC und Port 1234 ist der Abhörport für den Tunnel.

A$ ssh -L 1234:5.6.7.8:3456 user@compB

Verbinden Sie dann auf CompA das Client-Programm mit Port 1234 auf CompA und alles wird an CompC weitergeleitet.

Antwort2

basierend auf der Antwort vonbarlop

Ich habe A und B hinter NAT. Und C, auf das von A und B zugegriffen wird

Auf CI muss nur SSH-Zugriff vorhanden sein. Sonst ist nichts erforderlich.

auf Maschine A Aufgabe zu Crontab hinzufügen

$crontab -e

TUNCMDR='ssh -f -N -R 1144:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR  &&  echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log)  &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1143 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL  &&  echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log)  &>/dev/null

auf Maschine B Aufgabe zur Crontab hinzufügen

$crontab -e

TUNCMDR='ssh -f -N -R 1143:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR  &&  echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log)  &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1144 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL  &&  echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log)  &>/dev/null

HINWEIS: Die Ports 1143 und 1144 sind auf Host B im Vergleich zu Host A geändert

auf dem Host A, um eine Verbindung mit BIhnen herzustellen, laufen ssh -p 1234 Buser@localhost
auf dem Host, Bum eine Verbindung mit AIhnen herzustellen, laufen ssh -p 1234 Auser@localhost
auf dem Host, Cum eine Verbindung mit AIhnen herzustellen, laufen ssh -p 1144 Auser@localhost
auf dem Host, Cum eine Verbindung mit BIhnen herzustellen, laufenssh -p 1143 Buser@localhost

Sie können die Informationen zur Wiederverbindung sehen, die ausgeführt werdencat ~/ssh-world.log

UPD

Stoppen Sie Sitzungstrennungen/-abbrüche durch Hinzufügen zu ~/.ssh/config

Host *
    ServerAliveInterval 15

verwandte Informationen