ssh über einen router ohne portforwarding

9

Ich habe einen Linux-Server und möchte ihn in ein Heimnetzwerk hinter einem Router stellen. Ich muss irgendwann von außen auf diesen Server zugreifen, möchte aber keine Portweiterleitung einrichten, da ich keinen Zugriff auf den Router habe und auch die IP-Adresse des Routers nicht kenne.

Was ich tun kann, ist, ein Programm auf den Linux-Server zu setzen. Wenn es also mit dem Internet verbunden ist, sendet es ständig Daten an meinen anderen Server online, damit ich die IP-Adresse davon kenne. Aber gibt es eine Möglichkeit, von außen auf den Server hinter dem Router zu ssh zuzugreifen? so etwas wie NAT oder Socket, der die Netzwerkverbindung aufrechterhält?

Danke vielmals

Jiechao Li
quelle

Antworten:

20

Was Sie tun möchten, ist ssh VON Ihrem "Linux-Server" ZU etwas Äußerem, wie "mein_anderer_Server" oder etwas anderem, auf das beide Server zugreifen können.

Sie würden ssh Remote-Port-Weiterleitung verwenden.
[user@linux_server]$ ssh -R8022:localhost:22 my_other_server.com
Erläuterung: Stellen Sie eine Verbindung zu meinem anderen Server her und öffnen Sie dort den Port 8022, der über Port 22 an mich zurückgeleitet wird.

Von my_other_server.com aus können Sie über Port 8022 ssh an localhost senden und Ihren Datenverkehr auf dem linux_server an linux_server piggybacking weiterleiten - & gt; mein_anderer_Servertunnel [user@linux_server]$ ssh -p8022 localhost
Erläuterung: Stellen Sie über Port 8022, der an den Linux-Server weitergeleitet wird, eine Verbindung zu mir her

Wenn Sie Probleme mit dem anfänglichen linux_server haben - & gt; Wenn der my_other_server-Tunnel abgebrochen wird, können Sie ein Skript erstellen, um ihn offen zu halten, die Keepalive-Einstellungen anzupassen oder autossh verwenden.

MattPark
quelle
Danke, das funktioniert super! Ich möchte ein Skript verwenden, um es offen zu halten. Die andere Frage ist, was ich tun kann, wenn ich 1000 solcher 'Linux-Server' und nur einen 'my_other_server' habe? Ich gehe davon aus, dass sie alle unterschiedliche Ports benötigen und gibt es einen besseren Weg, dies zu tun?
Jiechao Li
Nun, das hängt davon ab. Könnten Sie jetzt, da Sie sich auf linux_server befinden, einfach von dort zu linux_server2 und linux_server3 ssh? Das wäre am einfachsten. Ja, Sie könnten dies mehrmals tun, anstatt 8022 zu verwenden, würden Sie 8023, 8024 verwenden. Wenn Sie diesen Weg gehen, erstellen Sie eine ~ / .ssh / config-Datei auf "my_other_server", die alle Portnummern enthält du hast nur ssh [alias] anstelle von ssh [port] localhost. Das wird umständlich.
MattPark
Ist es möglich, dies mit nur zwei Maschinen einzurichten? Verbinden Sie B mit A, das A wieder mit B durch sich selbst?
adamyonk
1
Ich habe es einfach gemacht. Kann bestätigen, dass es funktioniert. \O/
adamyonk
Ja Mann - offensichtlich hast du es herausgefunden. Sie können so etwas wie verwenden autossh um es offen zu halten.
MattPark
3

Sie können eine Art VPN verwenden, um dies zum Laufen zu bringen, benötigen jedoch einen Server, auf den der nicht zugreifbare Server zugreifen kann. Anschließend können Sie OpenVPN auf dem Server einrichten, Ihren PC und den Firewall-Server aktivieren client-to-client, und du bist fertig. http://openvpn.net/howto.html

Nathan C
quelle
Vielen Dank. Ich sehe mir das an, aber es scheint ein wenig kompliziert zu sein. Wenn ich das richtig verstehe, muss ich OpenVPN auf beiden Servern installieren, damit sie kommunizieren können, ohne den Router zu konfigurieren, oder?
Jiechao Li
Genau. Sie konfigurieren einen Server als "Server" und dann die beiden Clients, die Sie als "Clients" in der Konfiguration miteinander verbinden möchten. Die oben erwähnte umgekehrte SSH scheint für Sie jedoch einfacher zu sein.
Nathan C
0

Lange Zeit, um zu antworten. Das Hoffen könnte jemandem helfen, der dasselbe jetzt sucht.

Wenn Sie auf einen Server hinter NAT zugreifen möchten und keinen Code schreiben möchten, können Sie wahrscheinlich eines der folgenden Tools verwenden, das Ihren Anforderungen entspricht.

Beide oben genannten Tools setzen voraus, dass Sie Zugriff auf den Linux-Computer haben, um dessen Client zu installieren Einige ihrer Vorteile sind:

  • Mit beiden können Sie über das Webinterface auf das Terminal zugreifen
  • Sie benötigen keinen eigenen Reverse-SSH-Zwischenhost.
  • Sehr einfach zu installieren
  • Beide sind Open Source

Ich persönlich bevorzuge es, mehr zu treffen, da Sie das hosten können tmate server auf Ihrem eigenen Zwischenserver (für reverse ssh), während teleconsole nur für reverse ssh eine Verbindung zu ihren eigenen Servern herstellen kann.

Ankit Kulkarni
quelle
0

Diese Antwort basiert auf der akzeptierten, fügt aber die Details hinzu, mit denen ich sie erledigen konnte. Ich entschuldige mich für die Erklärung des Fußgängers, da dies überhaupt nicht mein Fachwissen ist.

Angenommen, Sie haben zwei Computer, A und B. Du möchtest ssh von A zu Bund Sie können in den mit ihnen verbundenen Routern keine Portweiterleitung durchführen.

Wie die akzeptierte Antwort besagt, benötigen Sie einen Server S dazu: im computer B, wirst du erlauben ssh Verbindungen kommen von S; und vom Computer A, Sie werden diesen Tunnel unter betreten S erreichen B.

Aber wie bekommt man den Server? S? ich fand serveo (Verknüpfung: https://serveo.net/ ). Es ist sehr einfach zu bedienen. Sie müssen nichts installieren oder registrieren und es ist kostenlos. Laut der Website sind die folgenden Schritte zu befolgen:

  1. Stellen Sie sich einen Alias ​​für den Computer vor B. Zum Beispiel, computer_B_alias.

  2. Im Computer B, ausführen ssh -R computer_B_alias:22:localhost:22 serveo.net.

  3. Jetzt können Sie auf den Computer zugreifen B vom Computer A indem Sie auf dem Computer Folgendes ausführen A: ssh -J serveo.net user@computer_B_alias, wo Sie ersetzen müssen user durch den Namen des Benutzers in Computer B.

P .: Natürlich machen Sie Punkt 2 zu einer automatischen Aufgabe, wenn Sie Ihren Computer starten B.

P.S.S .: Bevor Sie dies versuchen, stellen Sie sicher, dass ssh ist auf beiden Computern installiert. Für Ubuntu sudo apt-get install ssh würde den Job machen.

Godoy
quelle