2 votos

Problema de túnel SSH inverso de Apple

He estado tratando de configurar el túnel SSH inverso desde fuera de mi red a casa, pero no he conseguido nada. Mi configuración es todo Apple: dos Macs detrás de un Airport Extreme, uno en x.x.x.20 escuchando en el puerto 22 y el otro en x.x.x.30 escuchando en 10.022. He configurado el NAT en el AP para reenviar los puertos externos 22 al x.x.x.20 y el 10.022 al x.x.x.30. Quiero que el túnel se ejecute a x.x.x.20:10022.

He estado utilizando este comando desde un dispositivo de Apple fuera de mi red doméstica: ssh -v -f -N -R 22:localhost:10022 homeuser@myhomedoman.com así como ssh -v -f -N -R 10022:localhost:22 homeuser@myhomedoman.com pero de cualquier manera, los registros en la máquina de escucha x.x.x.20:22 muestran que el tráfico va a ella y la máquina x.x.x.30:10022 no muestran ningún registro en el archivo secure.log. Incluso he probado ssh -v -f -N -R 10022:localhost:10022 homeuser@myhomedoman.com y el tráfico sigue llegando a la máquina de escucha x.x.x.20:22.

Lo extraño es que cuando ejecuto ssh -p 10022 homeuser@myhomedoman.com se conecta a la máquina de escucha x.x.x.30:10022 sin problemas. He revisado todas las reglas de NAT en el aeropuerto también y sólo hay una regla que cubre el puerto 10022 por lo que no es un problema de NATing en cuanto a la configuración del AP.

O bien estoy haciendo algo realmente mal, hay un error en la implementación de Apple de los túneles SSH inversos o que el Airport está haciendo algo raro con el tráfico. ¿Alguien más ha tenido este problema o ha encontrado una solución?

La guía que estoy ejecutando para hacer funcionar el túnel inverso es http://www.vdomck.org/2005/11/reversing-ssh-connection.html

Gracias de antemano.

2voto

Phill Puntos 126

Para evitar confusiones, llamaré :

  • x.x.x.20 -> local1
  • x.x.x.30 -> local2
  • Dispositivo Apple fuera de la red doméstica -> remote1

Tú dices:

He configurado el NAT en el AP para reenviar los puertos externos 22 al x.x.x.20 y 10022 a x.x.x.30.

que yo interpreto así:

                 ________                 +-----------------+         +-----------+
                /        \ -  port 22 ----|-----------------|------>  | local1:22 |                                  
+---------+    (          )               |                 |         +-----------+
| remote1 | -  ( Internet )               | Airport Express |                                     
+---------+    (          )               |                 |         +--------------+
                \________/ -  port 10022 -|-----------------|------>  | local2:10022 |  
                                          +-----------------+         +--------------+

Es decir, local2 es accesible en [dirección IP pública del Airport Extreme]:10022.

Sin embargo, el ssh Los comandos que ejecuta en su pregunta utilizan el puerto SSH por defecto (es decir, 22/tcp), y se conectan a local1:22 (más exactamente: se conectan a [dirección IP pública del Airport Extreme]:22, que reenvía la conexión a local1:22).

Debe modificar el ssh que se ejecuta en remote1 de la siguiente manera (fíjese en la opción -p 10022 ):

remote1$ ssh -p 10022 -f -N -R 2222:localhost:22 [username at local2]@[public IP address of Airport Extreme]

-p 10022 dice ssh a qué puerto conectarse, mientras que 2222:localhost:10022 dice ssh para asignar un socket en local2 para escuchar el puerto 2222 y reenviar cualquier paquete enviado a ese puerto al puerto 22 en remoto1:

 +------------+                         +----------------------+
 |            |                         |                      |
 | remote1:xx | -- SSH (port 10022)-->  | local2:10022 (SSH)   |
 |            |                         |                      |
 | remote1:22 | <--- SSH tunnel ------  | local2:2222 (alloc'd |
 |            |                         |              by ssh) |
 +------------+                         +----------------------+

Ahora puedes acceder a remote1 desde local2 de la siguiente manera:

 local2$ ssh -p 2222 remoteuser@localhost

(Se utiliza -f en su comando que envía ssh al fondo. El sshd que se vincula al puerto 2222 y se ejecuta en local2 continuará ejecutándose incluso si se detiene el Inicio de Sesión Remoto en las Preferencias del Sistema:

enter image description here

Para detenerlo, haz una lista:

local2$ lsof -i | grep 2222
local2$ sshd   855 jaume   14u  IPv6 0x4857f   0t0  TCP localhost:2222 (LISTEN)

y matarlo con kill <PID> :

local2$ kill 855

donde PID es el segundo valor en lsof de la línea de salida).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X