Indice

VNC Inverso (reverse VNC)

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.

In pratica

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

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



Parametri di compressione del flusso

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.

Chi ha bisogno dell'assistenza

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 

Quando la persona che riceve aiuto è dietro un firewall che blocca anche le connessioni uscenti

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.

Problemi con il demone Linux di TightVNC

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.

Prepariamo per la ricompilazione

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.