Donner accès au serveur à Internet, via une connexion client via SSH

17

Je peux utiliser mon ordinateur personnel A pour me connecter par SSH à un serveur B où l'accès au réseau externe est bloqué. En d'autres termes, toutes les requêtes Internet envoyées par B génèrent une erreur: le réseau est inaccessible . Puis-je rediriger toutes ces demandes pour passer par l'ordinateur A qui a un accès illimité à Internet?

Le serveur B est un serveur qui héberge l'un de mes sites Web. Je souhaite télécharger des fichiers afin d'installer des logiciels. Mais la connexion est bloquée. J'ai pu transférer des fichiers , mais il a été compliqué parce que les versions logicielles sont différentes sur A et B , de sorte que les dépendances où il est différent et il a fallu différents fichiers sur A et B .

J'ai cherché sur Internet et il me semble que j'ai besoin d'un tunnel inverse. Mais je n'ai trouvé que des solutions où un port est redirigé . Mais ce n'est pas ce dont j'ai besoin car je ne veux pas que B accède à A mais à Internet.

AL
la source
si le downvoter de ces questions voit ce commentaire, cela vous dérangerait de nous faire savoir pourquoi? Je ne vois rien de mal à cela, même si la réponse est "impossible".
strugee
Copie
Lawrence
ssh vous permet d'effectuer une redirection de port locale ou distante, c'est-à-dire lorsqu'une application sur B tente d'ouvrir un port local X, qui est transmise à A pour tenter d'ouvrir le port que vous avez spécifié. Ainsi, A est libre de transmettre cette demande de connexion à Internet. Vous n'avez pas mentionné le ou les ports ou protocoles que vous essayez d'utiliser, ce qui faciliterait la construction de réponses détaillées.
Stabledog
J'essaie d'utiliser Composer , il devrait donc y avoir des requêtes HTTP et HTTPS vers Github afin de télécharger les packages.
AL

Réponses:

8

Vous pouvez exécuter un proxy sur l'ordinateur A auquel l'ordinateur B se connecterait ensuite pour accéder à Internet via l'ordinateur A.

Quelque chose comme ça

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

Installez un proxy comme squid sur A qui écoute sur le port 3128, puis vous pouvez ssh sur le serveur avec ceci -
ssh -L 3128:127.0.0.1:3128 user@B

Cela permettra à B d'accéder à Internet via A

Lawrence
la source
Une fois connecté à B, comment les requêtes Internet seront-elles redirigées vers A? Il n'y a pas de configuration à changer?
AL
Vous devrez définir un serveur proxy sur B à 127.0.0.1:3128
Lawrence
10

Il suffit d'ajouter quelques étapes plus claires aux réponses de @Lawrence et @ SpiRail.

Effectuez la configuration comme suit:

Configuration sur l'hôte A:

  1. Installez le serveur proxy Squid sur l'hôte A. Par défaut, Squid écoute sur le port 3128.
    yum install squid
  2. Commentez http_access deny allpuis ajoutez http_access allow alldans /etc/squid/squid.conf
  3. Si l'hôte A lui-même utilise un proxy, par exemple 10.140.78.130:8080 pour se connecter à Internet, ajoutez également ce proxy /etc/squid/squid.confcomme suit:
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
cache_peer 10.140.78.130 parent 8080 0 no-query default
never_direct allow all

Configuration sur l'hôte B:

  1. Ajoutez les entrées suivantes dans / etc / environment
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
  1. source /etc/environment

Maintenant, notre configuration est terminée.

Création d'un tunnel SSH avec la redirection de port à distance

  1. Exécutez la commande SSH suivante à partir de l'hôte A
    ssh -R 3129:localhost:3128 user@HostB

    Si vous souhaitez créer un tunnel SSH persistant, vous pouvez utiliser l'autossh comme suit:
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    Pour que la commande autossh ci-dessus fonctionne, vous devez configurer les clés SSH de HostA à HostB

  2. Cela permettra à l'hôte B d'accéder à Internet via l'hôte A.

Vérification d'Internet:

  1. Exécutez la commande suivante à partir de l'hôte B
    wget https://google.com

Diagramme de flux de trafic : entrez la description de l'image ici

Dhiru
la source
5

La réponse de @Lawrence était assez bonne pour que je puisse tout comprendre. Mais voici les étapes plus détaillées que j'ai utilisées.

J'ai utilisé cela pour utiliser mon dongle 4g ​​d'ordinateurs portables pour acheminer Internet vers un Raspberry Pi avec une connexion fixe à un routeur wifi.

Si votre hôte est un mac: installez squidman http://squidman.net/squidman/

(pas seulement du calmar générique, j'ai eu trop de mal à le construire) Les paramètres par défaut me semblaient assez bons.

connectez-vous à 4g connectez-vous au wifi - configurez une adresse IP statique sur votre wifi et supprimez l'adresse de la passerelle (sauf si vous faites des choses avancées) sinon vous obtenez deux routes par défaut et c'est très ennuyeux. - assurez-vous que votre routeur wifi n'utilise pas la même plage 192.168.xy (configurez un "x" différent dans ce cas)

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

Sur le PI

export http_proxy=http://localhost:8080

avec visudo ajouter le texte:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

Maintenant, wget fonctionnera et sudo apt-get vous permettra d'installer des packages.

Si vous voulez aussi git c'est ici: /programming/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy

SpiRail
la source
Merci pour votre réponse. Quel est le rôle d' visudoici? Où ajoutez-vous le texte? (Je ne peux pas l'utiliser sudosur mon hébergement Web)
AL
Je ne comprends pas vraiment votre question, mais si vous tapez simplement visudo dans le terminal (vous pourriez avoir besoin d'un 'sudo visudo'), vous pouvez ajouter la ligne de texte en bas.
SpiRail
il n'y a pas d'accès root sur mon hébergement Web.
AL
C'était il y a longtemps maintenant. Mais à partir de la mémoire, visudo édite le fichier sudoers et la ligne ajoutée signifie que ces variables d'environnement utilisateur sont conservées lors de la saisie de sudo. Si vous ne pouvez pas faire de sudo, vous n'avez de toute façon pas besoin de cette étape.
SpiRail