Concedi l'accesso al server a Internet, tramite client che si connette tramite SSH


17

Posso utilizzare il mio computer di casa A per connettermi tramite SSH a un server B in cui è bloccato l'accesso alla rete esterna. In altre parole, tutte le richieste a Internet da B generano un errore: la rete non è raggiungibile . Posso reindirizzare tutte queste richieste per passare attraverso il computer A che ha un accesso illimitato a Internet?

Il server B è un server che ospita uno del mio sito Web. Voglio scaricare i file per installare alcuni software. Ma la connessione è bloccata. Sono stato in grado di trasferire file, ma è stato complicato, perché le versioni del software sono diverse in A e B , in modo che le dipendenze in cui diversi e ha richiesto diversi file su A e B .

Ho cercato su Internet e sembra che mi serva un tunnel inverso. Ma ho trovato solo soluzioni in cui una porta viene reindirizzata . Ma non è quello di cui ho bisogno poiché non voglio che B acceda ad A ma a Internet.


se il downvoter di queste domande vede questo commento, ti dispiacerebbe farci sapere perché? Non vedo nulla di sbagliato, anche se la risposta è "impossibile".
strugee,


ssh ti consente di eseguire il port forwarding locale o remoto, ovvero quando un'applicazione su B tenta di aprire una porta locale X, che viene inoltrata ad A come tentativo di aprire qualsiasi porta specificata. Quindi A è libero di inoltrare la richiesta di connessione a Internet. Non hai menzionato quali porte o protocolli stai tentando di utilizzare, ciò renderebbe più semplice la costruzione di risposte dettagliate.
Stabledog,

Sto cercando di usare il compositore , quindi dovrebbero essere richieste HTTP e HTTPS a github per scaricare i pacchetti.
AL

Risposte:


8

È possibile eseguire un proxy sul computer A a cui il computer B si connetterà per accedere a Internet tramite il computer A.

Qualcosa come questo

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

Installa un proxy come squid su A che è in ascolto sulla porta 3128, e quindi puoi ssh sul server con questo -
ssh -L 3128:127.0.0.1:3128 user@B

Ciò consentirà a B di accedere a Internet tramite A


Una volta connesso a B, come verranno reindirizzate le richieste a Internet su A? Non c'è configurazione da modificare?
AL

Dovrai impostare un server proxy su B su 127.0.0.1:3128
Lawrence,

10

Aggiungo solo alcuni passaggi più chiari alle risposte di @Lawrence e @ SpiRail.

Eseguire l'installazione come segue:

Impostazione sull'host A:

  1. Installa il server proxy Squid sull'host A. Per impostazione predefinita, Squid è in ascolto sulla porta 3128.
    yum install squid
  2. Commenta http_access deny allquindi aggiungi http_access allow allin /etc/squid/squid.conf
  3. Se l'host A stesso utilizza alcuni proxy, ad esempio 10.140.78.130:8080 per connettersi a Internet, aggiungere anche tale proxy /etc/squid/squid.confcome segue:
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
cache_peer 10.140.78.130 parent 8080 0 no-query default
never_direct allow all

Impostazione sull'host B:

  1. Aggiungi le seguenti voci a / etc / environment
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
  1. source /etc/environment

Ora la nostra installazione è completa.

Creazione del tunnel SSH con il port forwarding remoto

  1. Eseguire il seguente comando SSH dall'host A
    ssh -R 3129:localhost:3128 user@HostB

    Se si desidera creare un tunnel SSH persistente, è possibile utilizzare l'autossh nel modo seguente:
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    Perché il comando autossh sopra descritto funzioni, è necessario configurare le chiavi SSH da HostA a HostB

  2. Ciò consentirà all'host B di accedere a Internet tramite l'host A.

Verifica di Internet:

  1. Eseguire il comando seguente dall'host B
    wget https://google.com

Diagramma del flusso di traffico : inserisci qui la descrizione dell'immagine


5

La risposta di @Lawrence è stata abbastanza buona per me da chiarire tutto. Ma ecco i passaggi più dettagliati che ho usato.

Ho usato questo per usare i miei laptop 4g dongle per instradare Internet a un Raspberry Pi con una connessione di rete fissa a un router wifi.

Se il tuo host è un mac: installa squidman http://squidman.net/squidman/

(non solo calamari generici, ho avuto troppi problemi con la costruzione) Le impostazioni predefinite mi sembravano abbastanza buone.

connettiti a 4g connettiti a wifi - configura un ip statico sul tuo wifi e rimuovi l'indirizzo gateway (a meno che tu non stia facendo cose avanzate) altrimenti otterrai due percorsi predefiniti ed è molto fastidioso. - assicurati che il tuo router wifi non stia utilizzando lo stesso intervallo 192.168.xy (in questo caso configura una "x" diversa)

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

Sul PI

export http_proxy=http://localhost:8080

con visudo aggiungi il testo:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

Ora wget funzionerà e quindi sudo apt-get in modo da poter installare i pacchetti.

Se vuoi anche git è qui: /programming/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy


Grazie per la tua risposta. Qual è il ruolo di visudoqui? Dove aggiungi il testo? (Non posso usare sudosul mio hosting Web)
AL

Non capisco davvero la tua domanda, ma se digiti visudo nel terminale (potresti aver bisogno di un "sudo visudo") puoi aggiungere la riga di testo in fondo.
SpiRail

non c'è accesso root sul mio web hosting.
AL

Era tanto tempo fa. Ma dalla memoria visudo modifica il file sudoers e la linea che viene aggiunta significa che quelle variabili di ambiente dell'utente vengono mantenute quando si digita sudo. Se non riesci a fare sudo, non hai comunque bisogno di questo passaggio.
SpiRail,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.