Autore: Fabio Di Matteo
Ultima revisione: 04/05/2012
Ovvero come fare assistenza remota ad un nostro amico dietro un firewall.
Quando dobbiamo connetterci ad un server (per poterlo utilizzare in qualche modo) normalmente siamo noi a iniziare la connessione su una specifica porta e in seguito usufruire dei servizi offerti. Per esempio se dobbiamo collegarci alla macchina di un nostro amico per fornirgli assistenza è necessario che la macchina del nostro amico sia in ascolto su una specifica porta e che il firewall o router del nostro amico ci consenta di “vedere” la sua macchina dalla rete. Ovvero che abbia attivato l'inoltro di quella porta sulla macchina del nostro amico.
Non sempre pero' è possibile istruire il firewall/router del nostro amico a lascirci “passare” per questo quindi si usano le connessioni inverse dove a contattarci è il nostro amico e quelli in ascolto su una specifica porta siamo invece noi. Dopo che la connessione è avvenuta per esempio nel caso in cui volessimo usare (come in questo caso) un servizio VNC possiamo noi usufruire del servizio sulla macchina del nostro amico .
Adesso vedremo cosa devono fare entrambe le parti sia con Gnu/Linux che con windows.
Useremo il software libero TightVNC sia per Windows che per Linux in questo caso in versione 1.3 e l'eseguibile linux x11vnc disponibile per tutte le distribuzioni.
Chi fornisce l'assistenza remota deve fare in modo di conoscere il proprio indirizzo internet pubblico (che fornira' all'amico da aiutare) e configurare il proprio router/firewall per accettare connessioni sulla porta 5500 (o quella che scegliamo) sul proprio indirizzo privato.
Gnu/Linux
vncviewer -listen
Windows
vncviewer.exe /listen
Su reti lente sarebbe opportuno specificare la compressione del flusso in modo da risparmiare banda. I parametri necessari sono i seguenti da aggiungere ai comandi sopradescritti -quality 4 -compresslevel 9 in questo modo :
vncviewer -listen -quality 4 -compresslevel 9
Se a /listen
facciamo seguire il numero di una porta il demone si mette in ascolto su quella porta specifica.
N.B. il demone linux sembra rifiutarsi di restare in ascolto su una porta specifica scelta da noi diversa dalla 5500.
Gnu/Linux
x11vnc -connect <indirizzo pubblico di chi da assistenza>:5500
Windows
Su windows bisogna prima lanciare il demone senza parametri e poi istruirlo alla connessione con un altro comando.
WinVNC.exe
WinVNC.exe -connect <indirizzo pubblico di chi da assistenza>::5500
per interromepere la condivisione del desktop:
WinVNC.exe -kill
Puo' capitare di dovere aiutare una persona che si trova in un ufficio pubblico, universita' o altro posto dove il firewall lascia passare solo le connessioni uscenti verso il solo web (per consentire ,ai client della rete, la sola la navigazione ).
In questi casi l'unica cosa da fare è di mettere in ascolto il demone sulla porta 80 (tipica del traffico web) e fare iniziare le connessioni su questa porta.
Come gia' detto, nelle prove condotte, non sono riuscito a mettere in ascolto il demone linux sulla porta 80 pertanto ho dovuto fare una piccola modifica al codice sorgente di quest'ultimo e ricompilarlo in modo tale da restare di default in ascolto sulla porta 80.
Per ricompilare TightVNC ci serve installare i pacchetti di sviluppo tradizionali come make, gcc e Imake , libz-dev , lib-jpeg (leggere il file REDME incluso per maggiori dettagli).
Il file da modificare è listen.c contenuto nella directory vncviewer di TightVNC 1.3 .
Quindi individuare la funzione:
listenForIncomingConnections(int *argc, char **argv, int listenArgIndex)
e cercare al suo interno la riga:
listenSocket = ListenAtTcpPort(listenPort);
e sostituirla con
listenSocket = ListenAtTcpPort(80);
E' opportuno(estetico) inoltre modificare il messaggio sullo stderr
fprintf(stderr,"%s -listen: Listening on port %d\n", programName, listenPort)
con
fprintf(stderr,"%s -listen: Listening on port 80\n", programName);
Si sarebbe potuto modificare solo la variabile listenPort
ma va bene ugualmente.
Ricompiliamo tutto
% xmkmf % make World
L'eseguibile vncviewer che ci interessa si trovera' nella cartella vncviewer.