Dar acceso al servidor a Internet, a través del cliente que se conecta por SSH

17

Puedo usar la computadora A de mi casa para conectarme por SSH a un servidor B donde el acceso a la red externa está bloqueado. En otras palabras, todas las solicitudes a B desde Internet arrojan un error: la red es inalcanzable . ¿Puedo redirigir todas estas solicitudes para que pasen por la computadora A que tiene acceso ilimitado a Internet?

El servidor B es un servidor que aloja uno de mi sitio web. Quiero descargar archivos para instalar algún software. Pero la conexión está bloqueada. Yo era capaz de transferir archivos, pero era complicado debido a las versiones de software son diferentes en A y B , por lo que las dependencias donde diferentes y que requieren diferentes archivos en un y B .

Busqué en Internet y parece que necesito un túnel inverso. Pero solo encontré soluciones donde se redirige un puerto . Pero no es lo que necesito ya que no quiero que B acceda a A sino a Internet.

Alabama
fuente
Si el votante negativo de estas preguntas ve este comentario, ¿le importaría decirnos por qué? No veo nada malo en ello, incluso si la respuesta "no es posible".
strugee
Posible duplicado de unix.stackexchange.com/questions/111972/…
Lawrence
ssh le permite reenviar puertos locales o remotos, es decir, cuando una aplicación en B intenta abrir un puerto local X, que se reenvía a A como un intento de abrir cualquier puerto que haya especificado. Entonces, A es libre de reenviar esa solicitud de conexión a Internet. No ha mencionado qué puerto (s) o protocolos está tratando de usar, eso facilitaría la construcción de respuestas detalladas.
Stabledog
Estoy tratando de usar Composer , por lo que deberían ser solicitudes HTTP y HTTPS a Github para descargar los paquetes.
AL

Respuestas:

8

Puede ejecutar un proxy en la computadora A a la que se conectaría la computadora B para acceder a Internet a través de la computadora A.

Algo como esto

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

Instale un proxy como squid en A que escucha en el puerto 3128, y luego puede enviar ssh al servidor con esto:
ssh -L 3128:127.0.0.1:3128 user@B

Eso permitirá que B acceda a Internet a través de A

Lawrence
fuente
Una vez conectado a B, ¿cómo se redirigirán las solicitudes a Internet a A? ¿No hay configuración para cambiar?
AL
Tendrá que configurar un servidor proxy en B en 127.0.0.1:3128
Lawrence
10

Simplemente agregue algunos pasos más y claros a las respuestas de @Lawrence y @ SpiRail.

Realice la configuración de la siguiente manera:

Configuración en el host A:

  1. Instale el servidor proxy Squid en el Host A. Por defecto, Squid escucha en el puerto 3128.
    yum install squid
  2. Comenta y http_access deny allluego agrega http_access allow all/etc/squid/squid.conf
  3. Si el Host A mismo usa algún proxy, digamos 10.140.78.130:8080 para conectarse a internet, entonces también agregue ese proxy de la /etc/squid/squid.confsiguiente manera:
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
cache_peer 10.140.78.130 parent 8080 0 no-query default
never_direct allow all

Configuración en el host B:

  1. Agregue las siguientes entradas 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

Ahora nuestra configuración está completa.

Crear un túnel SSH con reenvío de puerto remoto

  1. Ejecute el siguiente comando SSH desde el host A
    ssh -R 3129:localhost:3128 user@HostB

    Si desea hacer un túnel SSH persistente, puede usar autossh de la siguiente manera:
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    Para que funcione el comando autossh anterior, debe tener configuradas las claves SSH de HostA a HostB

  2. Esto permitirá que el Host B acceda a Internet a través del Host A.

Comprobando internet:

  1. Ejecute el siguiente comando desde el Host B
    wget https://google.com

Diagrama de flujo de tráfico : ingrese la descripción de la imagen aquí

Dhiru
fuente
5

La respuesta de @Lawrence fue lo suficientemente buena para que yo lo entendiera todo. Pero aquí están los pasos más detallados que utilicé.

Utilicé esto para usar mi dongle 4g ​​de computadoras portátiles para enrutar Internet a una frambuesa pi con una conexión de línea fija a un enrutador wifi.

Si su host es un mac: instale squidman http://squidman.net/squidman/

(no solo calamar genérico, tuve demasiados problemas para construirlo) La configuración predeterminada me pareció lo suficientemente buena.

conectarse a 4g conectarse a wifi: configure una ip estática en su wifi y elimine la dirección de la puerta de enlace (a menos que esté haciendo cosas avanzadas) de lo contrario obtendrá dos rutas predeterminadas y es muy molesto. - asegúrese de que su enrutador wifi no esté usando el mismo rango 192.168.xy (configure una "x" diferente en este caso)

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

En el PI

export http_proxy=http://localhost:8080

con visudo agregue el texto:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

Ahora wget funcionará y también sudo apt-get para que pueda instalar paquetes.

Si quieres git también está aquí: /programming/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy

SpiRail
fuente
Gracias por tu respuesta. ¿Cuál es el papel de visudoaquí? ¿Dónde agregas el texto? (No puedo usar sudoen mi alojamiento web)
AL
Realmente no entiendo su pregunta, pero si simplemente escribe visudo en la terminal (puede que necesite un 'sudo visudo') puede agregar la línea de texto en la parte inferior.
SpiRail
No hay acceso de root en mi alojamiento web.
AL
Fue hace mucho tiempo ahora. Pero desde la memoria se edita el archivo sudoers y la línea que se agrega significa que esas variables de entorno del usuario se mantienen al escribir sudo. Si no puede hacer sudo, entonces no necesita este paso de todos modos.
SpiRail