ssh a ip privato


18

Ho un computer con CentOS (computer A) configurato come ha un IP privato 10.150.5.141 (con firewall limitato), posso accedere a Internet e il mio ArchLinux VPS (computer B) con ip wxyz reale

Come posso creare un altro PC (computer C) che possa accedere al computer B per connettersi al computer A, ma il computer C non può connettersi direttamente al computer A (perché si trova sulla propria rete privata A)?

So che un tunnel può aprire le porte locali su un altro computer: porta, ma come fare il contrario?

Voglio accedere al computer A sshtramite il computer B ma il computer B non può accedere al computer A, perché la rete sul computer A è restrittiva (può uscire, ma non può entrare, perché non ho accesso al loro router)

Voglio qualcosa del genere:

ssh -connect-to w.x.y.z:22 -open-port vvv -forward-to 10.150.5.141 -port 22

in modo che quando vengo ssh w.x.y.z:vvvdal computer C verrà inoltrato alla rete privata 10.150.5.141:22.

Risposte:


14

Quello che stai cercando si chiama tunnel inverso. sshfornisce tramite l' -Rinterruttore:

-R [bind_address:]port:host:hostport
       Specifies that the given port on the remote (server) host is to 
       be forwarded to the given host and port on the local side.  This 
       works by allocating a socket to listen to port on the remote side, 
       and whenever a connection is made to this port, the connection is
       forwarded over the secure channel, and a connection is made to host 
       port hostport from the local machine.

Come l'OP ha scoperto con la loro risposta, la sintassi è la seguente:

$ ssh -f -N -R vvv:localhost:22 w.x.y.z

Esempio

Ho 2 computer in rete lappye remotey. Quindi eseguo il seguente comando su lappy:

$ ssh -f -N -R 12345:localhost:22 remotey

Posso confermare che funziona:

$ ps -eaf|grep "[l]ocalhost:22"
saml     27685     1  0 11:10 ?        00:00:00 ssh -f -N -R 12345:localhost:22 remotey

Ora, se sshseparatamente sul sistema remoto remoteyed eseguo questo comando, posso vedere che ora accetta connessioni sulla porta 12345 sull'interfaccia locale del sistema remoto:

$ netstat -an|grep :12345
tcp        0      0 127.0.0.1:12345             0.0.0.0:*                   LISTEN      
tcp        0      0 ::1:12345                   :::*                        LISTEN      

Test della connessione

Puoi vedere che il tunnel SSH inverso funziona come segue.

  1. accedere remotey

    [user@lappy ~]$ ssh remotey
    
  2. testare la porta del tunnel inverso

    [user@remotey ~]$ ssh -p 12345 localhost
    
  3. ora dovrebbe essere tornato a ridere

    user@localhost's password: 
    Last login: Thu Aug  1 17:53:54 2013
    /usr/bin/xauth:  creating new authority file /home/user/.Xauthority
    [user@lappy ~]$ 
    

Porte su interfacce diverse da localhost ( lo)?

Potresti essere lasciato a grattarti la testa se provi un comando come questo e non sembra funzionare, o si lega sempre a una porta sull'interfaccia localhost ( lo).

Per esempio:

lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey

NOTA: questo comando indica di aprire la porta 12345 @ remotey e di eseguire il tunneling di tutte le connessioni alla porta 22 @ lappy.

Quindi in remoto:

remotey$ netstat -an|grep 12345
tcp        0      0 127.0.0.1:12345              0.0.0.0:*                   LISTEN   

Quello che sta succedendo è che sshdle configurazioni non ti consentono di farlo. In effetti senza questa funzione abilitata ( GatewayPorts) non sarai in grado di associare alcuna sshporta del tunnel a nulla tranne a localhost.

Abilitazione di GatewayPorts

remotey$ grep GatewayPorts /etc/ssh/sshd_config
#GatewayPorts no

Per abilitarlo, modifica questo file /etc/ssh/sshd_config:

GatewayPorts clientspecified

E riavvia sshd:

remotey$ sudo service sshd restart

Ora riprova e dovremmo vedere l'effetto che stiamo cercando:

lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey

E ricontrolla questa volta sul telecomando:

remotey$ netstat -anp | grep 12345
tcp        0      0 192.168.1.3:12345           0.0.0.0:*                   LISTEN      9333/sshd

NOTA: In quanto sopra possiamo vedere che il sshdprocesso ora è in ascolto sull'interfaccia che ha l'indirizzo IP 192.168.1.3, per le connessioni sulla porta 12345.

Test della connessione (parte deux)

Ora con la nostra configurazione modificata quando lo testiamo questa volta. La differenza principale è che non dobbiamo più collegarci a localhost!

  1. accedere remotey

    [user@lappy ~]$ ssh remotey
    
  2. testare la connessione inversa

    [user@remotey ~]$ ssh -p 12345 remotey
    
  3. ora dovrebbe essere tornato a ridere

    root@remotey's password: 
    Last login: Wed Aug 21 01:49:10 2013 from remotey
    [user@lappy ~]$ 
    

Riferimenti


c'è un modo per fare tunnel da 0.0.0.0:12346 a 127.0.0.1:12345 sulla stessa macchina?
Kokizzu,

1
@Kokizzu - Ho provato a configurarlo e mi sto avvolgendo attorno a quello che stai chiedendo. Ho trovato questo che suona come quello che vuoi, anattatechnologies.com/q/2012/08/chaining-ssh-tunnels . Proverò a risolverlo più tardi stasera, sentitevi liberi di giocarci e fatemi sapere se ci fate progressi.
slm

non è quello che intendevo, voglio che si leghi a wxyz: vvv2 invece di 127.0.0.1 (sul computer B), quindi anche altre persone possono usarlo ..
Kokizzu

1
@Kokizzu - vedi aggiornamenti.
slm

2

Poiché il computer B non può accedere al computer A, è necessario prima aprire un tunnel remoto dal computer A.

ssh user@computerB -R vvv:localhost:22

grazie, ma c'è un modo per aprire una porta sull'IP di eth0 che ha inoltrato a un servizio che ha ascoltato localhost?
Kokizzu,

1

non importa, ho trovato la risposta:

ssh -f -N -R vvv:localhost:22 w.x.y.z

dal computer A

EDIT: TL; DR, soluzione corretta:

ssh -f -N -R w.x.y.z:vvv:localhost:22 w.x.y.z
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.