This is an old revision of the document!


10. [10p] Tunel SSH invers

Sunt situații în care dorim ca o stație să fie accesibilă din exterior, dar este dificil să obținem un port în gateway (pentru port forwarding): fie din rațiuni administrative, fie din motive de securitate. Pentru a permite totuși o conexiune din exterior, se poate crea un tunel SSH invers. Tunel SSH invers înseamnă următorii pași:

  • se creează o conexiune SSH de la o stație cu adresă IP privată la un server extern cu adresă IP publică,
  • se deschide un port pe serverul cu adresă IP publică
  • traficul către acel port este tunelat prin conexiunea SSH către stația cu adresă IP privată

Dorim să permitem conectarea la stația red din Internet pe SSH. Vom crea o conexiune SSH “directă” de la stația red la contul vostru de pe fep.grid.pub.ro. Prin această conexiune veți tunela invers traficul SSH către red permițând conexiunea din exterior.

Pentru început, de pe stația red creăm o conexiune SSH directă către contul de pe fep.grid.pub.ro:

root@red:~# ssh -l $USERNAME fep.grid.pub.ro -R 10022:localhost:22   
[...]
$USERNAME@fep.grid.pub.ro's password: 
Last login: Mon Sep  9 09:55:37 2013 from 141.85.225.214
[$USERNAME@fep-62-2 ~]$ netstat -tln | grep 10022
tcp        0      0 127.0.0.1:10022             0.0.0.0:*                   LISTEN      
tcp        0      0 ::1:10022                   :::*                        LISTEN

unde $SUERNAME este numele contului de pe fep.grid.pub.ro/cs.curs.pub.ro. Introduceți parola corespunzătoare.

Observăm că se deschide portul 10022 pe fep.grid.pub.ro. Acest port va fi folosit pentru tunelul invers care ne va duce pe stația red.

Dacă altcineva a rulat comanda de creare a tunelului, atunci a ocupat portul 10022 de pe server. În acest caz folosiți un alt port pe server (10122, 10222 etc.).

Argumentul -R 10022:localhost:22 transmis comenzii ssh are următoarea semnificație:

  • 10022 - portul de pe server pe care se vor asculta conexiuni care vor fi tunelate invers;
  • localhost - stația către care vor fi trimise pachetele primite prin tunel (chiar stația locală);
  • 22 - portul către care vor fi trimise pachetele primite prin tunel (adică portul SSH local).

Discutați cu un coleg pentru a se conecta pe fep.grid.pub.ro pe contul propriu și apoi de a se conecta către red folosind contul portul deschis mai sus (10022). Pentru aceasta, colegul va folosi stația fizică și se va conecta pe contul său la fep.grid.pub.ro:

student@mjolnir:~$ ssh -l $USERNAME_COLEG fep.grid.pub.ro
[...]

Pe fep.grid.pub.ro rulează un load balancer pentru SSH. Din acest motiv este posibil să intrați pe “celălalt” sistem. Verificați că numele de host din promtp corespunde cu cel pe care l-ați folosit inițial la crearea tunelului: adică ambele să fie fep-62-2 sau fep-62-1. Pentru siguranță folosim și comanda netstat:

[$USERNAME_COLEG@fep-62-2 ~]$ netstat -tln | grep 10022
tcp        0      0 127.0.0.1:10022             0.0.0.0:*                   LISTEN
tcp        0      0 ::1:10022                   :::*                        LISTEN

După conectarea colegului la fep, realizăm o conexiune prin tunelul SSH pe portul 10022 deschis:

[$USERNAME_COLEG@fep-62-2 ~]$ ssh -l root localhost -p 10022
Warning: Permanently added '[localhost]:10022' (RSA) to the list of known hosts.
root@localhost's password: 
[...]
root@red:~#

În cadrul conexiunii ni se cere parola utilizatorului root de pe stația red (adică parola student).

În final colegul a accesat stația red, o stația cu adresă IP privată inaccesibilă din exterior. Pentru aceasta a folosit o altă stație (care ar putea fi din altă rețea) pentru a se conecta la fep.grid.pub.ro și de acolo la red prin intermediul tunelului invers creat inițial.

rl/labs/09/contents/10.1385472343.txt.gz · Last modified: 2013/11/26 15:25 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0