Total Pageviews

Search: This Blog, Linked From Here, The Web, My fav sites, My Blogroll

22 April 2009

LogMeln Hamachi: VPNs per newbies

Cos'è ed a cosa serve Hamachi?


Esistono già molte soluzioni di interconnessione di nodi che utilizzano diverse tecnologie ma tutte indistintamente più o meno presentano difficoltà di configurazione quando i nodi si trovano in particolari topologie tipo indietro a un firewall o a un router ecc.
    Hamachi è un gran bel software per i newbies perché permette di abbassare drasticamente la learning curve su argomenti non certo banali come quelli di networking aumentando il numero di persone coinvolto su tali tematiche un po come ha fatto Windows nel campo degli OS.
    Non è Open source ma il suo uso per ciò che ci riguarda è gratuito, inoltre viene assicurata da Applied Networking Inc. l' assenza di adware & spyware all' interno del programma... meglio di niente.
Hamachi crea delle VPNs che lavorano sul protocollo UDP. Garantisce connessioni (su mezzi insicuri come Internet) sicure attraverso autenticazione e criptazione del traffico fra le parti. In altre parole ci permette di creare una VPN con altri nodi ed accedere a servizi di condivisione come Samba e FTP o server per giochi online in modo privato e sicuro e soppratutto fa tutto ciò richiedendoci un davvero minimo sforzo.

Una VPN e' un infrastruttura che permette di utilizzare vari servizi fra i host client e server dislocati su una WAN (come Internet) utilizzando per la comunicazione il sistema di collegamenti della WAN stessa impedendo però tutto cio' che sta al di fuori della VPN di accedere alla VPN stessa. Alcuni scenari d' uso esemplificativi potrebbero essere:
  • Condivisione file/stampanti attraverso NFS o SMB/CIFS fra nodi geograficamente distanti utilizzando come mezzo trasmissivo non una LAN Ethernet ma Internet (che come ben sappiamo e' totalmente insicura anzi...)
  • Accedere in remoto ad un host con VNC
  • Utilizzare servizi Web o email visibili solo ai nodi che compongono la VPN ed invisibili all' esterno di essa
  • giocare game online non con tutto il mondo ma con alcuni nodi selezionati(p.e. solo con gli amici)
  • .... ecc... mettiamo come limite la nostra fantasia
L' obiettivo di Hamachi è quello di creare un sistema che necessita il minimo sforzo possibile da parte degli utenti quando essi debbono configurare il loro client per la VPN.
    In Hamachi oltre ai nodi di tipo client (degli utenti della VPN) c' è un tipo di nodo server chiamato mediation server (un po come un tracker in una rete bittorent) ed appartiene alla Hamachi che viene utilizzato solo inizialmente per la configurazione dei client:
  • in tal modo la rete Hamachi è capace di inizializzare le connessioni VPN fra i client nella quasi totalità dei casi senza dover ricorrere a complesse procedure di configurazione anche nel caso i client si trovino dietro firewall o NAT
  • Il mediation server raccoglie informazioni solo sui nodi della VPN nessun pacchetto (fra l' altro cifrato) dati fra i nodi passa attraverso di lui. Le communicazioni fra i nodi sono P2P
Una VPN creata con Hamachi utilizza un protocollo P2P per il collegamento fra un nodo ed un altro:
  • Cioè uno o più server di backend si utilizzano per tener traccia di tutte le informazioni che riguardano i nodi della rete ed ovviamente dell' autenticazione di essi


    Sicurezza

    L' aspetto di sicurezza in una VPN e' essenziale. Se non c'è non andiamo da nessuna parte. Questo perché in una VPN si utilizza un canale insicuro come Internet per trasmettere dati confidenziali ed è quindi necessario utilizzare
    1. un qualche modo di autenticazione per stabilire chi può far parte di essa e chi no
    2. un qualche modo di criptazione per garantire la confidenzialità nello scambio di informazioni
    Ogni client viene identificato da un indirizzo della rete Hamachi che gli viene assegnato nella fase di inizializzazione quando il client si collega ad un mediation server per la prima volta. In questa fase per lo scambio di informazioni client-server e per il login si utilizza il protocollo (closed) Hamachi su TCP
        Nella fase di login (autenticazione) da parte di un client il mediation server Hamachi possiede già una coppia (pubblica, privata) di chiavi RSA. La chiave pubblica del server viene distribuita insieme al software client che noi installiamo sul PC. In questo modo il client può verificare l' autenticità del server.
        D' altra parte il nodo client genera la propria coppia di chiavi RSA che utilizzerà ogni volta che dovrà connettersi per l' autenticazione durante la fase di login
        In seguito se la fase di login è andata a buon fine si stabilisce la connessione P2P su protocollo UDP questa volta fra il client autenticato e i nodi della VPN


    Installazione e configurazione


    A quanto pare è stato pensato inizialmente per la piattaforma Windows e poi solo ultimamente ha cominciato ad emigrare verso altre piatteforme fra cui la nostra Linux.
        La versione Linux (che ha qualche funzionalità in meno rispetto a quella per Windows) ha un interfaccia nativa CLI anche se sono gia diffuse due GUI di terze parti. Inoltre il modo di installazione è quello tradizionale (anche se ben fatto quindi facile e paragonabile ad un installazione da pacchetto) non essendo distribuite versioni pacchettizzate per la nostra Ubuntu. Inoltre la documentazione è ottima direi.
    • Vediamo adesso i passi di download:
    1. Qui scarichiamo i sorgenti di Hamachi per linux
    2. Qui c' è una prima GUI abbastanza datata e qui una molto più recente che a parte i gusti personali consiglierei solo per il fatto che c'è in versione pacchettizzata .deb (Quella per hardy va bene pure per intrepid)
    • Hamachi abbisogna dell' interfaccia standard tun/tap che si usa per creare un tunnel o bridge anche da altri software come OpenVPN. Il kernel delle maggiori disto Linux dispone già di tale modulo solo che noi lo dobbiamo abilitare con:
    sudo modprobe tun
    • e poi farlo caricare automaticamente al boot di Linux immettendo la linea tun nel file di configurazione di autocaricamento moduli /etc/ modules dando:
    sudo gedit /etc/modules

    • messa la linea e salvato il file abbiamo finito con i preliminari. In ogni caso prima di proseguire assicuriamoci che un valido tunnelling node è stato creato in /dev dando:
    ls /dev/net/tun

    • se otteniamo un output di errore No Such File or Directory provvediamo a creare manualmente un nuovo nodo dando:
    sudo mkdir /dev/net
    sudo mknod /dev/net/tun c 10 200

    NB: Nel qualcaso si abbia un kernel modificato o addirittura compilato a mano ci sarà bisogno di ricompilare il kernel col supporto per l' IP Tunnelling. In tal caso un' occhiata qui può essere d' aiuto.

    Andiamo a vedere adesso l' installazione vera e propria di Hamachi
      tar -zxvf hamachi-0.9.9.9-x.tar.gz
      cd hamachi-0.9.9.9-x/
      sudo make install
      sudo tuncfg
      Output:
      harrykar@harrykar-desktop:~$ cd /home/harrykar/my_dws/hamachi-0.9.9.9-20-lnx
      harrykar@harrykar-desktop:~/my_dws/hamachi-0.9.9.9-20-lnx$ sudo make install
      
      Copying hamachi into /usr/bin ..
      Creating hamachi-init symlink ..
      Compiling tuncfg ..
      Copying tuncfg into /sbin ..
      
      Hamachi is installed. See README for what to do next.
      harrykar@harrykar-desktop:~/my_dws/hamachi-0.9.9.9-20-lnx$ sudo tuncfg
      harrykar@harrykar-desktop:~/my_dws/hamachi-0.9.9.9-20-lnx$
      
      
    • Le prima istruzione scompatta l' archivio e con la seconda entriamo nella directory hamachi
    • la terza fa l' installazione vera e propria provvedendo a copiare i file binari in /usr/bin, a compilare ed a creare un simbolic link per hamaki-init
    • la quarta fa avviare hamachi. tuncfg (un programma utile per la configurazione dell' interfaccia che si deve eseguire come root a differenza del comando hamachi che può essere eseguito come normal-user)
    Il file README specifica che: You will need to run sudo tuncfg for every new Hamachi session (i.e after every reboot)


    Configurazione base di Hamachi

    Qui ci sarebbero 2 scenari possibili:
    • Eseguire Hamachi in background come un servizio di sistema. Questo scenario è il più adeguato per un utilizzo continuativo di Hamachi
    • oppure come come una semplice user application usando magari un gui frontend. Noi seguiremo quest' ultimo scenario che è di gran lunga il più semplice oltre che il più flessibile (non trattiene risorse di rete e del pc quando non serve ossia quando hamachi non viene usato) se usiamo Hamachi solo occasionalmente quando ci serve.
    diamo (solo per la prima volta):

    hamachi-init

    e otteniamo un output simile a

    harrykar@harrykar-desktop:~/my_dws/hamachi/hamachi-0.9.9.9-20-lnx$ hamachi-init
    Initializing Hamachi configuration (/home/harrykar/.hamachi). Please wait ..
    
    generating 2048-bit RSA keypair .. ok
    making /home/harrykar/.hamachi directory .. ok
    saving /home/harrykar/.hamachi/client.pub .. ok
    saving /home/harrykar/.hamachi/client.pri .. ok
    saving /home/harrykar/.hamachi/state .. ok
    
    Authentication information has been created. Hamachi can now be started with
    'hamachi start' command and then brought online with 'hamachi login'.

    Una volta generata la coppia di chiavi e creata la configurazione iniziale come dicono le note dell' output diamo:

    hamachi start
    
    

    Output
    harrykar@harrykar-desktop:~/my_dws/hamachi/hamachi-0.9.9.9-20-lnx$ hamachi start
    Starting Hamachi hamachi-lnx-0.9.9.9-20 .. ok

    che eseguirà il demone. Per assicurarci se diamo ifconfig vedremo che si è creata una nuova interfaccia virtuale (qui chiamata ham0) con indirizzo IP assegnato della classe 5.x.y.z

    harrykar@harrykar-desktop:~/my_dws/hamachi/hamachi-0.9.9.9-20-lnx$ ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:1e:2a:bd:1e:9a
    inet addr:192.168.x.x  Bcast:192.168.x.x  Mask:255.255.x.x
    inet6 addr: fe80::21e:2aff:xxxx:xxxx/x Scope:Link
    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    RX packets:2479753 errors:0 dropped:0 overruns:0 frame:0
    TX packets:3467201 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:1317222970 (1.3 GB)  TX bytes:3645142390 (3.6 GB)
    Interrupt:10 Base address:0xa000
    
    ham0      Link encap:Ethernet  HWaddr 56:65:fa:48:87:8a
    inet addr:5.90.182.148  Bcast:5.255.255.255  Mask:255.0.0.0
    UP BROADCAST RUNNING MULTICAST  MTU:1200  Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:500
    RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    lo        Link encap:Local Loopback
    inet addr:127.0.0.1  Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING  MTU:16436  Metric:1
    RX packets:645 errors:0 dropped:0 overruns:0 frame:0
    TX packets:645 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:69744 (69.7 KB)  TX bytes:69744 (69.7 KB)
    
    harrykar@harrykar-desktop:~/my_dws/hamachi/hamachi-0.9.9.9-20-lnx$


    Una volta che hamachi gira possiamo settare il nostro nickname dando:

    hamachi set-nick "NostroNickname"

    Output
    harrykar@harrykar-desktop:~/my_dws/hamachi/hamachi-0.9.9.9-20-lnx$ hamachi set-nick harrykar
    Setting nickname .. ok


    Adesso è arrivato finalmente il momento di fare il login con un mediation server
    dando:

    hamachi login

    Output
    harrykar@harrykar-desktop:~/my_dws/hamachi/hamachi-0.9.9.9-20-lnx$ hamachi login
    Logging in ......... ok

    NB:--se invece diamo prima $hamachi login di default ci viene assegnato un nick generico che comunque poi possiamo personalizzare con $hamachi set-nick nickname


    Hamachi cataloga le VPN con un nome mnemonico che indica una particolare rete. Se non abbiamo una possiamo crearla adesso dando:

    hamachi create nomerete password

    Output
    harrykar@harrykar-desktop:~/my_dws/hamachi/hamachi-0.9.9.9-20-lnx$ hamachi create ciaoatutti 12345
    Creating ciaoatutti .. ok
    

    Chi crea una rete diventa suo proprietario ed è l' unico che potrà in seguito eliminarla col comando $hamachi delete oppure forzare un nodo a scollegarsi col comando: $hamachi evict

    *Circa le NETWORK PASSWORDS*
    Raccomando di scegliere con cura la password. Se non si ha idea di quel intendo dire visitare il sito grc per ottenere una random string password. Queste sono passwords molto forti che doneranno sicurezza alla nostra configurazione.


    Se invece abbiamo già una rete o conosciamo una e vogliamo farne parte diamo:

    hamachi join  


    Adesso è giunta l' ora di andare on-line diamo:

    hamachi go-online 


    Se abbiamo o facciamo parte di più reti VPN posso vedere la loro lista senza però gli identificativi dei peer associati (guarda il prossimo comando) dando:

    hamachi list


    Gli identificativi dei peer invece si possono ottenere con:

    hamachi get-nicks

    • Il nome della rete spunta fra [nomerete]
    • *[nomerete] vuol dire che siamo membri di questa rete
    • I nicknames spuntano sotto *[nomerete]. Se c'è asterisco davanti * 5.x.x.x nick vuol dire che il peer è in fase di connessione nel caso invece sia già collegato dovrà spuntare l' IP virtuale e senza asterisco
    Con questo si chiude la prima parte adesso ci rimane di installare la gui. Niene di più facile un semplice clik sul file .deb che abbiamo scaricato e il gioco è fatto.
    Uno degli obiettivi di questa hamachi-gui è: aspirare di essere un clone di quella di Windows (e in effetti lo è). Abbiamo quindi an secondo metodo di gestione per Hamachi. I gusti sono gusti...

    NB:--per i newbies sconsiglio caldamente di scaricare i sorgenti anzichè il . deb (per hardy) perchè già col primo comando otteranno la prima delusione:

    harrykar@harrykar-desktop:~$ cd /home/harrykar/my_dws/hamachi/ham_gui_temp/hamachi-gui-0.9.6
    harrykar@harrykar-desktop:~/my_dws/hamachi/ham_gui_temp/hamachi-gui-0.9.6$ ./configure
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether build environment is sane... yes
    checking for a thread-safe mkdir -p... /bin/mkdir -p
    checking for gawk... gawk
    checking whether make sets $(MAKE)... yes
    checking whether to enable maintainer-specific portions of Makefiles... no
    ./configure: line 2298: ALL_LINGUAS: command not found
    checking for style of include used by make... GNU
    checking for gcc... gcc
    checking for C compiler default output file name... a.out
    checking whether the C compiler works... yes
    checking whether we are cross compiling... no
    checking for suffix of executables...
    checking for suffix of object files... o
    checking whether we are using the GNU C compiler... yes
    checking whether gcc accepts -g... yes
    checking for gcc option to accept ISO C89... none needed
    checking dependency style of gcc... gcc3
    checking for library containing strerror... none required
    checking for gcc... (cached) gcc
    checking whether we are using the GNU C compiler... (cached) yes
    checking whether gcc accepts -g... (cached) yes
    checking for gcc option to accept ISO C89... (cached) none needed
    checking dependency style of gcc... (cached) gcc3
    checking for gcc... (cached) gcc
    checking whether we are using the GNU C compiler... (cached) yes
    checking whether gcc accepts -g... (cached) yes
    checking for gcc option to accept ISO C89... (cached) none needed
    checking dependency style of gcc... (cached) gcc3
    checking how to run the C preprocessor... gcc -E
    checking for grep that handles long lines and -e... /bin/grep
    checking for egrep... /bin/grep -E
    checking for ANSI C header files... yes
    checking for intltool >= 0.34... 0.37.1 found
    checking for xgettext... /usr/bin/xgettext
    checking for msgmerge... /usr/bin/msgmerge
    checking for msgfmt... /usr/bin/msgfmt
    checking for perl... /usr/bin/perl
    checking for XML::Parser... ok
    checking for sys/types.h... yes
    checking for sys/stat.h... yes
    checking for stdlib.h... yes
    checking for string.h... yes
    checking for memory.h... yes
    checking for strings.h... yes
    checking for inttypes.h... yes
    checking for stdint.h... yes
    checking for unistd.h... yes
    checking locale.h usability... yes
    checking locale.h presence... yes
    checking for locale.h... yes
    checking for LC_MESSAGES... yes
    checking libintl.h usability... yes
    checking libintl.h presence... yes
    checking for libintl.h... yes
    checking for ngettext in libc... yes
    checking for dgettext in libc... yes
    checking for bind_textdomain_codeset... yes
    checking for msgfmt... (cached) /usr/bin/msgfmt
    checking for dcgettext... yes
    checking if msgfmt accepts -c... yes
    checking for gmsgfmt... /usr/bin/msgfmt
    checking for xgettext... (cached) /usr/bin/xgettext
    checking for catalogs to be installed...  sv pl fr it de no es bg sk
    checking for pkg-config... /usr/bin/pkg-config
    checking pkg-config is at least version 0.9.0... yes
    checking for GTK... configure: error: Package requirements (gtk+-2.0 >= 2.10) were not met:
    
    No package 'gtk+-2.0' found
    
    Consider adjusting the PKG_CONFIG_PATH environment variable if you
    installed software in a non-standard prefix.
    
    Alternatively, you may set the environment variables GTK_CFLAGS
    and GTK_LIBS to avoid the need to call pkg-config.
    See the pkg-config man page for more details.
    
    harrykar@harrykar-desktop:~/my_dws/hamachi/ham_gui_temp/hamachi-gui-0.9.6$
    

    La compilazione quando problematica la potranno benissimo fare dopo un bel po di esperienza ;-) .__


    Resources

     Andrea's belvedere blog

    No comments:

    Post a Comment