Geben Sie dem Server über einen Client, der über SSH eine Verbindung herstellt, Zugriff auf das Internet

16

Ich kann mit meinem Heimcomputer A über SSH eine Verbindung zu einem Server B herstellen, auf dem der Zugriff auf das externe Netzwerk gesperrt ist. Mit anderen Worten, alle Anforderungen an das Internet von B werfen einen Fehler auf: Das Netzwerk ist nicht erreichbar . Kann ich alle diese Anforderungen umleiten, um sie über den Computer A weiterzuleiten, der über einen uneingeschränkten Zugang zum Internet verfügt?

Server B ist ein Server, der eine meiner Websites hostet. Ich möchte Dateien herunterladen, um Software zu installieren. Die Verbindung ist aber gesperrt. Ich war in der Lage , Dateien zu übertragen , aber es war kompliziert , weil die Software - Versionen unterschiedlich sind auf A und B , so die Abhängigkeiten wo anders und es benötigte andere Dateien auf A und B .

Ich habe im Internet gesucht und es scheint, dass ich einen Reverse-Tunnel brauche. Ich habe aber nur Lösungen gefunden, bei denen ein Port umgeleitet wird . Aber es ist nicht das, was ich brauche, da ich nicht möchte, dass B auf A zugreift, sondern auf das Internet.

AL
quelle
Wenn der Downvoter dieser Frage diesen Kommentar sieht, würde es Ihnen etwas ausmachen, uns wissen zu lassen, warum? Ich sehe nichts falsch daran, auch wenn die Antwort "nicht möglich" ist.
Strugee
Mögliches Duplikat von unix.stackexchange.com/questions/111972/…
Lawrence
Mit ssh können Sie entweder eine lokale oder eine Remote-Portweiterleitung durchführen. Wenn also eine Anwendung auf B versucht, einen lokalen Port X zu öffnen, wird dieser an A weitergeleitet, um den von Ihnen angegebenen Port zu öffnen. Dann kann A diese Verbindungsanfrage ins Internet weiterleiten. Sie haben nicht erwähnt, welche Ports oder Protokolle Sie verwenden möchten, um die Erstellung detaillierter Antworten zu vereinfachen.
Stabledog
Ich versuche, Composer zu verwenden , daher sollten HTTP- und HTTPS-Anforderungen an Github gesendet werden, um die Pakete herunterzuladen.
AL

Antworten:

8

Sie können einen Proxy auf Computer A ausführen, mit dem Computer B dann eine Verbindung herstellen würde, um über Computer A auf das Internet zuzugreifen.

Etwas wie das

             +----------+            +-----------+
             |          |+----SSH+-->|           |
             |     A    |            |    B      |
             |+--------+|            |           |
  Internet <-++-+PROXY<++<SSH Tunnel--+          |
             |+--------+|            |           |
             +----------+            +-----------+

Installieren Sie einen Proxy wie squid auf A, der auf Port 3128 lauscht, und dann können Sie mit diesem Befehl ssh auf den Server senden.
ssh -L 3128:127.0.0.1:3128 user@B

Dadurch kann B über A auf das Internet zugreifen

Lawrence
quelle
Wie werden die Anforderungen an das Internet nach dem Herstellen der Verbindung zu B an A umgeleitet? Es gibt keine Konfiguration zu ändern?
AL
Sie müssen einen Proxyserver auf B auf 127.0.0.1:3128
Lawrence am
8

Fügen Sie einfach einige weitere und klare Schritte zu den Antworten von @Lawrence und @ SpiRail hinzu.

Führen Sie das Setup wie folgt aus:

Setup auf Host A:

  1. Installieren Sie den Proxyserver Squid auf Host A. Standardmäßig lauscht Squid an Port 3128.
    yum install squid
  2. Kommentiere das http_access deny alldann http_access allow allin /etc/squid/squid.conf
  3. Wenn Host A selbst einen Proxy verwendet, beispielsweise 10.140.78.130:8080, um eine Verbindung zum Internet herzustellen, fügen Sie diesen Proxy /etc/squid/squid.confwie folgt hinzu:
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
cache_peer 10.140.78.130 parent 8080 0 no-query default
never_direct allow all

Setup auf Host B:

  1. Fügen Sie die folgenden Einträge zu / etc / environment hinzu
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
  1. source /etc/environment

Jetzt ist unser Setup abgeschlossen.

Erstellen eines SSH-Tunnels mit Remote-Portweiterleitung

  1. Führen Sie den folgenden SSH-Befehl von Host A aus
    ssh -R 3129:localhost:3128 user@HostB

    Wenn Sie einen dauerhaften SSH-Tunnel erstellen möchten, können Sie autossh wie folgt verwenden:
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    Damit der obige Befehl autossh funktioniert, sollten Sie SSH-Schlüssel von HostA auf HostB einrichten

  2. Dadurch kann Host B über Host A auf das Internet zugreifen.

Überprüfen Sie das Internet:

  1. Führen Sie den folgenden Befehl von Host B aus
    wget https://google.com

Verkehrsflussdiagramm : Bildbeschreibung hier eingeben

Dhiru
quelle
5

@Lawrence 's Antwort war gut genug für mich, um alles zu erledigen. Aber hier sind die detaillierteren Schritte, die ich verwendet habe.

Ich habe dies für die Verwendung meines Laptops 4g Dongle verwendet, um das Internet zu einem Himbeer-Pi mit einer Festnetzverbindung zu einem WLAN-Router zu leiten.

Wenn Ihr Host ein Mac ist: Installieren Sie squidman http://squidman.net/squidman/

(Nicht nur generischer Tintenfisch, ich hatte zu viel Mühe, ihn zu erstellen.) Die Standardeinstellungen schienen mir gut genug zu sein.

connect to 4g connect to wifi - konfiguriere eine statische IP in deinem WLAN und entferne die Gateway-Adresse (es sei denn, du machst fortgeschrittene Dinge), sonst bekommst du zwei Standardrouten und es ist sehr ärgerlich. - Stellen Sie sicher, dass Ihr WLAN-Router nicht denselben Bereich wie 192.168.xy verwendet (konfigurieren Sie in diesem Fall ein anderes "x").

ssh -R 8080:localhost:8080 pi@<ip address of the pi or target machine>

Auf dem PI

export http_proxy=http://localhost:8080

mit visudo füge den text hinzu:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

Jetzt funktioniert wget und sudo apt-get, so dass Sie Pakete installieren können.

Wenn du auch Git willst, ist es hier: /programming/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy

SpiRail
quelle
Danke für deine Antwort. Was ist die Rolle von visudohier? Wo fügen Sie den Text hinzu? (Ich kann nicht sudoauf meinem Webhosting verwenden)
AL
Ich verstehe Ihre Frage nicht wirklich, aber wenn Sie nur visudo in terminal eingeben (möglicherweise benötigen Sie ein 'sudo visudo'), können Sie die Textzeile unten einfügen.
SpiRail
Auf meinem Webhosting gibt es keinen Root-Zugriff.
AL
Es ist schon lange her. In Memory Visudo wird die sudoers-Datei jedoch bearbeitet, und die hinzugefügte Zeile bedeutet, dass diese Benutzerumgebungsvariablen bei der Eingabe von sudo beibehalten werden. Wenn Sie sudo nicht können, brauchen Sie diesen Schritt sowieso nicht.
SpiRail