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.