Túnel de SSH explicado en términos simples

Acabo de utilizar esta guía para crear un túnel SSH para eludir mi proxy corporativo. No usé la "masilla" habitual, pero en "MobaXterm" (un progtwig similar a la masilla que también ofrece herramientas de Unix) escribí, para crear el túnel:

ssh -D 7070 -p 22 user@yourserver.com sleep 9999 

Luego fui a mi browser (Firefox) y le dije que usara SOCKS en el puerto localhost 7070 .

Todo está bien y funciona, pero no tengo idea de cómo funciona la tecnología subyacente. Quiero decir, a nivel general, sé cómo funciona el process, pero me gustaría ir un poco más allá.

Lo que quiero decir es que actualmente podemos comparar mi conocimiento con el que tengo de los automobilees: sé que hay un motor, 4 ruedas, etc., pero no tengo idea de cómo el motor realmente usa gasolina para mover el automobile. Las 2 respuestas que recibí hasta ahora solo me explican lo que ya sé. Tengo un CCNP, trabajo en un centro de datos como ingeniero de networkinges, sé cómo progtwigr, conozco lo suficiente el entorno Linux. Lo que me gustaría recibir de usted es una respuesta completa (pero de less de 20 páginas de RFC).

La respuesta debe include:

  1. Una descripción de las opciones principales en forma de túnel. Un buen ejemplo es la image en esta respuesta: Comprender los túneles SSH
  2. Qué tipo de túnel se usa cuando y para qué (túneles normales, túneles inversos)
  3. Una captura de wireshark del antes / después del túnel
  4. Una image que explica el process (después de todo soy un chico visual)

Prometo que daré 100 puntos tan pronto como pueda darle una recompensa a la pregunta. Realmente necesito una buena respuesta sobre esto. (En caso de que me olvide de la recompensa, por favor envíeme un correo electrónico: ilcon7e [at] gmail [dot] com

EDITAR

Mejorado la pregunta.

Visión general de muy alto nivel:

  1. La opción -D le dice a ssh que escuche conexiones en ese puerto usando el protocolo SOCKS. Configura Firefox para conectarse a ssh y hablar el protocolo SOCKS.

  2. Escribe http://www.google.com en su browser.

  3. Firefox se conecta a ese puerto SOCKS. SOCKS puede hacer muchas cosas, pero lo que nos interesa es esto: Firefox le pregunta al server SOCKS (ssh) "oye, ¿podrías hablar con http://www.google.com y darle esta request HTTP? Y dime ( Firefox) ¿qué dice http://www.google.com en respuesta a eso? " (Firefox no sabe o realmente le importa que ssh va a reenviar esa request por el túnel SSH).

  4. ssh reenvía esa request a lo largo de la connection ssh a algo que se ejecuta en la máquina remota (probablemente sshd).

  5. el progtwig que se ejecuta en la máquina remota establece la connection, envía los datos a Google y obtiene una respuesta.

  6. el progtwig en la máquina remota, según lo solicitado, le dice a ssh en su máquina cuál es la respuesta.

  7. ssh en su máquina, según lo solicitado, le dice a Firefox cuál es la respuesta.

  8. Firefox sabe que es una página web, por lo que comienza a mostrarla.

  9. Repita muchas veces, para todas las imágenes, JavaScript, CSS, etc.

Cuando visita un website (uno que no se ve obstaculizado por su firewall corporativo), su browser envía una request al server que figura en la URL en el puerto 80 (de forma pnetworkingeterminada). Por ejemplo, para visitar este sitio, nuestros browseres se comunican con el puerto 80 del server unix.stackexchange.com

Cuando configura su proxy, le dice a su browser que envíe todo al puerto localhost 7070 independientemente de la URL. Un server proxy está diseñado simplemente para captar datos en nombre de un cliente. Hay varios serveres proxy disponibles (una búsqueda rápida en el repository de su disto mostrará unos pocos – squid es uno y los serveres web apache y nginx también pueden actuar como serveres proxy) pero instalar uno no ayudaría a su escenario ya que el proxy trataría de acceda al website en su nombre y siga bloqueado por su firewall corporativo.

Sin embargo, ssh con la opción -D junto con el daemon sshd en el sitio remoto ( yourserver.com ) actúa como un server proxy, excepto que este se divide en dos mitades: un ssh local y un sshd remoto.

La request de su browser para http://unix.stackexchange.com se envía al cliente ssh en su computadora que está escuchando en el puerto 7070 . Esto cifra la request y la envía al server sshd remoto. Esto descifra la request y la envía al server correspondiente (nuevamente unix.stackexchange.com , puerto 80) con la ruta de retorno (la dirección IP y el puerto al que el server debe devolver su respuesta) modificada para ser la del sshd server ( yourserver.com ).

El server web Stack Exchange no conoce nada de este proxy y responde con la página que solicitó a la dirección IP y al puerto del server sshd (debido a esa pequeña modificación). Sin embargo, este server es consciente de que la request se originó desde ssh ejecución en su computadora (mantiene una tabla con este tipo de información), por lo tanto, la encripta y se la envía a usted. ssh en su computadora devuelve la respuesta a su browser, que muestra diligentemente su página web por usted.

ssh está actuando como un proxy distribuido. El 'túnel' aquí es el hecho de que el proxy está en dos mitades y se comunican entre sí a través de un túnel encriptado que nadie puede husmear y (en su caso) está utilizando un puerto que no está bloqueado por su firewall (puerto 22 )