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.


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


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


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í


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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.