Apple Reverse SSH Tunneling Issue

2

Ho cercato di installare il tunneling SSH inverso dall'esterno della mia rete a casa, ma non sono riuscito a ottenere dove. La mia configurazione è tutta Apple: due Mac dietro a Airport Extreme, uno su x.x.x.20 in ascolto sulla porta 22 e l'altro su x.x.x.30 in ascolto su 10.022. Ho configurato NAT sull'AP per inoltrare le porte esterne 22 a x.x.x.20 e 10.022 a x.x.x.30. Voglio che il tunnel venga eseguito su x.x.x.20: 10022.

Ho usato questo comando da un dispositivo Apple esterno alla mia rete domestica: ssh -v -f -N -R 22:localhost:10022 [email protected] e ssh -v -f -N -R 10022:localhost:22 [email protected] ma in entrambi i casi, i registri sul sistema di ascolto xxx20: 22 mostrano che il traffico va ad esso e la macchina xxx30: 10022 non mostra alcun record nel file secure.log. Ho persino provato ssh -v -f -N -R 10022:localhost:10022 [email protected] e il traffico continua a colpire il sistema di ascolto x.x.x.20: 22.

La cosa strana è che quando eseguo ssh -p 10022 [email protected] si connette perfettamente alla macchina per ascoltare x.x.x.30: 10022. Ho passato anche tutte le regole NAT nell'Aeroporto e c'è solo una regola che copre la porta 10022 quindi non è un problema di NAT per quanto riguarda la configurazione dell'AP.

O sto facendo qualcosa di veramente sbagliato, c'è un bug nell'implementazione di Apple dei tunnel SSH inversi o che l'aeroporto sta facendo qualcosa di divertente con il traffico. Qualcun altro ha avuto questo problema o trovato una soluzione alternativa?

La guida che sto utilizzando per eseguire il tunnel inverso è link

Grazie in anticipo!

    
posta Scottmeup 17.02.2013 - 08:01
fonte

1 risposta

2

Per evitare confusione ti chiamo :

  • x.x.x.20 - > local1
  • x.x.x.30 - > local2
  • Dispositivo Apple fuori dalla rete domestica - > REMOTE1

Dici:

I've setup NAT on the AP to forward external ports 22 to the x.x.x.20 and 10022 to x.x.x.30.

che interpreto in questo modo:

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

Cioè, local2 è raggiungibile su [indirizzo IP pubblico di Airport Extreme]: 10022.

Tuttavia, i comandi ssh eseguiti nella domanda utilizzano la porta SSH predefinita (ovvero 22 / tcp) e si connettono a local1: 22 (più esattamente: si connettono a [ indirizzo IP pubblico di Airport Extreme]: 22, che inoltra la connessione a local1: 22).

Devi modificare il comando ssh eseguito su remote1 come questo (opzione di avviso -p 10022 ):

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

-p 10022 indica ssh a quale porta connettersi, mentre 2222:localhost:10022 indica ssh per allocare un socket su local2 per ascoltare la porta 2222 e inoltrare qualsiasi pacchetto inviato a quella porta alla porta 22 su remote1:

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

Ora puoi accedere a remote1 da local2 come segue:

 local2$ ssh -p 2222 remoteuser@localhost

(Si utilizza -f nel comando che invia ssh allo sfondo. Il processo sshd che si collega alla porta 2222 ed eseguito su local2 continuerà ad essere eseguito anche se si interrompe Login remoto in Preferenze di sistema:

Per interromperlo, elencalo:

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

e uccidilo con kill <PID> :

local2$ kill 855

dove PID è il secondo valore nella riga di output di lsof .)

    
risposta data 18.02.2013 - 23:47
fonte

Leggi altre domande sui tag