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:
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
(identic cu cel de pe cs.curs.pub.ro
):
root@red:~# ssh -l $USERNAME fep.grid.pub.ro -R 100XY: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 ~]$ ss -tln | grep 100XY tcp 0 0 127.0.0.1:100XY 0.0.0.0:* LISTEN tcp 0 0 ::1:100XY :::* LISTEN
unde $USERNAME
este numele contului de pe fep.grid.pub.ro
/cs.curs.pub.ro
, iar XY
este un identificator numeric unic al stației din laborator (dacă nu aveți pe monitorul stației din laborator un identificator discutați cu asistentul). Introduceți parola corespunzătoare contului vostru de pe fep.grid.pub.ro
/cs.curs.pub.ro
.
Observăm că se deschide portul 100XY
pe fep.grid.pub.ro
. Acest port va fi folosit pentru tunelul invers care ne va duce pe stația red
.
Argumentul -R 100XY:localhost:22
transmis comenzii ssh
are următoarea semnificație:
100XY
- 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).
După ce alți colegi rulează comenzile similare vă veți putea conecta pe stația red
a acestora folosind portul deschis de ei; discutați cu alți colegi ca să vă spună ce port au deschis. Pentru aceasta, veți folosi stația fizică și vă veți conecta conecta pe contul de pe fep.grid.pub.ro
.
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 prompt 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 ss
:
[$USERNAME_COLEG@fep-62-2 ~]$ ss -tln | grep 100ZT tcp 0 0 127.0.0.1:100ZT 0.0.0.0:* LISTEN tcp 0 0 ::1:100ZT :::* LISTEN
În output-ul comenzii de mai sus 100ZT
este portul deschis de coleg.
După conectarea colegului la fep
, realizăm o conexiune prin tunelul SSH pe portul 100ZT
deschis de coleg:
[$USERNAME_COLEG@fep-62-2 ~]$ ssh -l student localhost -p 100ZT Warning: Permanently added '[localhost]:100ZT' (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 ați accesat stația red
a colegului, o stația cu adresă IP privată inaccesibilă din exterior. Pentru aceasta ați 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.
Creați un fișier pe stația red
proaspăt accesată, iar colegul poate verifica faptul că, într-adevăr, ați accesat container-ul său prin tunelul SSH invers pe care l-a creat anterior.