ciao a tutti,
ho deciso di esporvi un progetto che mi frulla in testa da un po' : non so
se qualcuno in rete ci abbia già pensato (forse si, ma non conosco
nessuno), ma l'idea mi sembra carina : solo mi mancano alcune conoscenze
specifiche sulla suite TCP/IP , oltre che quelle di programmazione ...
tutte cose alle quali con un po' di buona volontà potrei ovviare, ma
intanto vi propongo il progetto.
Scopo :
riuscire a connettersi tramite internet ad un PC posto in una rete locale,
configurato con IP di classe privata, "nascosto" da almeno un router che
consideriamo intoccabile.
Motivazioni:
a breve mi arriverà la fibra a casa, e ho bisogno (per lavoro) di tenere
sempre online il mio serverillo domestico per potermi scaricare files di
config, docs, etc. ogni volta che (da un cliente) se ne presenti la
necessità; ora il tutto funziona perchè il router ADSL è configurato per
far passare tutto, ma come ben sappiamo con la fibra non si ha la
possibilità di aprire una porta verso l'esterno.
Requisiti:
1 pc connesso ad internet tramite fibra ottica (da ora in poi lo chiamerò
CASA), 1 server connesso ad internet (SRV) attraverso un' altro tipo di
linea (indifferente quale, purchè accetti connessioni in ingresso), 1
client (CLT) che cerca di connettersi ad un servizio di CASA.
La mia idea:
Su SRV gira un demone in ascolto su di una porta che stabiliremo, diciamo
la 5050.
CASA effettua una connessione tcp a SRV ogni 30 secondi, richiede se c'è
qualcosa di nuovo per lui, e se non trova nulla chiude la connessione. Nel
fare questo, il router di CASA deve aprire una porta sull' if esterna,
aspettando su quella porta la risposta di SRV alla connessione di CASA, e
reindirizzando questa risposta a CASA stesso.
Supponiamo che io, CLT, decida di voler stabilire una connessione con CASA
: lancio un client scritto ad hoc, che si connette alla 5050 di SRV, e
tramite questo client invio a SRV delle informazioni contenenti la mia
volontà di collegarmi con CASA ; a questo punto, SRV aspetta che CASA
faccia la sua consueta connessione (quindi aspetta max 30 sec), e nel
momento in cui CASA si connette, SRV si configura per fare da gateway tra
CLT e CASA, sfruttando la porta appena aperta sul router di CASA per
effettuare la connessione a SRV ; visto che la connessione è già avvenuta,
SRV può sostenere il dialogo con CASA senza dovere inviare delle syn,
dialogo che, a questo punto, non dovrebbe incontrare nessun ostacolo nel
router di CASA. Per il router tutto il traffico sarà tra CASA e SRV, ma in
realtà SRV prende i comandi da CLT : in pratica, se tutto funzionasse a
dovere, avrei ottenuto che CLT ha scambiato dei dati con CASA, e
sembrerebbe quasi che sia stato CLT a connettersi a CASA.
L'idea sarebbe ancor più versatile e interessante se riuscissimo ad
estrapolarla dal contesto di un singolo servizio : sarebbe cioè
interessante studiare un protocollo di dialogo tra CASA - SRV - CLT in modo
che tramite questa hack si possano effettuare connessioni su qualunque
porta di CASA, a prescindere dal tipo di dati da trasportare (dovremmo cioè
lavorare a livello di trasporto, se le mie reminescenze di modelli ISO/OSI
non mi ingannano)
Linguaggio:
l'unico che conosco decentemente è il python, anche se a naso direi che
questa è una idea da realizzare in C (che conosco molto poco).
si accettano idee / consigli / suggerimenti / insulti / finanziamenti
miliardari
ciao Giorgio
============================== Giorgio Andreoletti - mentelocale S.r.l. responsabile hardware e networking responsabile sviluppo web www.mentelocale.it giorgio.andreoletti@xxxxxxxxxxxxxx ==============================
<========---------- Prima di scrivere in m-list per favore leggi il regolamento http://www.lugge.net/soci/manifesto.htm#list
Archivio delle e-mail postate in lista //www.freelists.org/archives/lugge/
----------========> Incontri in sede: martedì 15:00-18:00 e sabato 9:30-12.30