Hamachi : client VPN zero-conf pour faire plein de belles (vilaines ?) choses

closeCet article a été publié il y a 16 ans 6 mois 30 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Hamachi est un client VPN zero-conf. En gros, vous êtes censé installer le bazar et point, votre VPN est monté, vos amis vous trouvent par magie, l’être cher revient, l’argent coule à flot et vous retrouvez la sérénité intérieure.
Dans la pratique, y’a tout de même un peu plus à faire et tout cela mérite quelques explications.

Au fait à quoi ça sert ? En gros un VPN à la maison, ça sert en général à des groupes d’amis un peu geeks voulant vraiment avoir leur VPN flottant au-dessus d’Internet pour s’échanger des fichiers facilement, avoir leurs réseaux fermés de je ne sais quoi.

Si maintenant on imagine que ce réseau fermé est – exemple tout à fait au hasard 😉 – un serveur de jeu que vous voulez rendre accessible comme si vous étiez en LAN, alors que vous êtes sur Internet, certains trouveront cet outil complètement génialissime. Va savoir pourquoi… 😉
Enfin, si j’ai choisi Hamachi, c’est parce-que VOUS êtes quelqu’un aimant un peu l’informatique (sinon vous ne liriez pas cet article) et que vos amis joueurs sont des buses en informatique (cas classique). Ainsi, si vous leur demander d’installer un client VPN hyper compliqué, vous n’êtes pas près de jouer…

En relisant, je vois que l’article est long. Comme quoi, « zero-conf » <=> beaucoup d’explications. Allez, visite guidée.

Je vais décrire ce cas : un serveur de jeu (quel qu’il soit) sur un Linux, configuré pour un LAN, que je souhaite rendre accessible sur Internet à mes amis via ce VPN (donc comme si j’étais en LAN). Je vais donc vous expliquer trois choses. Premièrement : comment installer le client sur Linux et créer votre réseau d’amis. Deuxièmement : comment installer le client sur Windows et rejoindre votre réseau. Enfin, tout au long de la doc, quelques considérations de sécurité, des concepts derrière Hamachi etc.
Notamment, si je ne parle pas de serveur Hamachi, c’est parce-qu’il n’y en a pas. Si j’ai bien tout compris, la mise en relation des utilisateurs (vous et vos amis) entre eux passe à un moment donné par un point central (chez l’éditeur d’Hamachi je suppose). Mais ce n’est pas pour autant ques tous les utilisateurs du VPN Hamachi peuvent se voir (il faut se donner l’accord mutuel). C’est un peu la seule solution pour rendre le tout « zero-conf ». Ensuite, les transferts passent en direct évidemment.

La plupart des trucs que je raconte sort des README et de la doc d’Hamachi, mais comme vous ne le lisez pas (ou que vous ne comprenez rien à l’anglais) et que, même en ayant lu tout ça, ça reste un peu opaque sans pratiquer, je vous commente la chose avec un exemple de bout en bout.

J’oubliais : ce n’est pas opensource mais c’est gratuit dans la limite de création de réseaux de 16 personnes (je crois).

Enfin, si vous voulez comprendre le principe avant de mettre en place, survolez tout l’article avant d’envoyer la purée 🙂

Les différences entre Hamachi Linux et Windows sont :

    – Sous Linux, il n’y pas d’interface graphique pour Hamachi
    – Sous Linux, il faudra créer votre brin VPN à la main (3/4 commandes à recracher telles quelles)
    – Sous Linux, il faudra balancer 3/4 commandes (simples) pour créer votre « compte » et votre réseau
    – Sous Windows, tout cela sera graphique et automagique
    – Sous Windows, vous faites tourner des serveurs de jeux vous ? Je serais surpris. Ben zappez la partie Linux dans ce cas.

Le principe d’Hamachi (valable pour Linux et Windows) :

Vous allez vous créer un compte, identifié par une couple de clef de cryptage (pensez à les sauvegarder si vous réinstaller votre PC ou votre serveur Linux). Vous vous donnerez un surnom et le système Hamachi vous donnera une IP privée (de la plage 5.x.y.z) qui vous caractérise sur le VPN. En fait, tous les utilisateurs Hamachi sont plus ou moins tous le même VPN (puisqu’on a tous une IP 5.x.y.z qu’on ne contrôle pas et puisqu’on passe à un moment par un serveur Hamachi pour se connecter etc).
Sauf que, histoire que ce ne soit pas une poubelle géante (un réseau interconnectant des gens entre eux qui ne le souhaitent pas), vous ne pouvez pas communiquer avec une IP 5.x.y.z (qu’elle corresponde ou non à un compte Hamachi) si vous ne faites pas partie d’un « réseau » (sorte de channel sur IRC si on voulait comparer – ou une chatroom à la limite), réseau protégé par un mot de passe et pour lequel n’existe aucune liste mentionnant son existence.
En gros, si votre réseau s’appelle chezmoionsamuse, que le pass n’est pas trop bidon, il n’y a aucune chance qu’un intrus vienne vous perturber par hasard (je suppose). Si vous voulez vous en convaincre, finissez de mettre en place le bazar et essayez des ping sur des IP au hasard, ou mieux, sur l’IP 5.x.y.z d’un ami nouvellement inscrit (avant qu’il ait rejoint votre réseau et après qu’il l’ai fait).
De plus, sous Linux, votre firewall refusera toute communication par défaut, je décrirai comment autoriser ce qu’il faut plus bas (notamment pour atteindre le serveur de jeu, c’est le but de mon exemple).
Sous Windows, ça semble grand ouvert par défaut (encore une fois, aux personnes figurant sur un réseau où vous êtes vous-mêmes).
Pas la peine de flipper, ça semble bien pensé à ce niveau-là.

Sous Linux : installation de l’application
Téléchargez l’outil, décompressez l’archive quelque part, passez root et faites ceci :

root$ 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.

En gros, vous venez de vous rajouter un binaire /sbin/tuncfg qui va servir à exploiter une carte réseau virtuelle, votre brin VPN.

Sous Linux : installation de ce qu’il faut pour exploiter les tunnels virtuels
Votre noyau Linux doit avoir chargé le module « tun » (plus d’infos là). Le plus simple est de charger le module grâce à l’outil modconf (apt-get install modconf). Ca donne ça :
modconf tun
Si vous ne trouvez pas ce module, c’est que votre noyau est compilé main (et vous avez fait l’impasse sur plein de choses) ou que votre distribution Linux est naze 🙂 Dans ce cas, recompilez-en un avec ce module (démerdez-vous un peu).
Pour vérifier qu’il est chargé :

$ lsmod | grep tun
tun                    11776  0

Avec modconf, ce module sera chargé à chaque boot.

Il faut ensuite créer à la main (une seule fois) un périphérique réseau qui sera exploité pour ces tunnels. Si vous tapez actuellement tuncfg (en tant que root), vous obtenez :

root$ tuncfg
tuncfg: cannot stat() /dev/net/tun -- No such file or directory
tuncfg: visit http://www.hamachi.cc/tuntap for more information

Donc, en root, tapez ceci :

root$ mkdir /dev/net
root$ mknod /dev/net/tun c 10 200

Alors le lancement de tuncfg ne dit plus rien (preuve qu’il s’est bien lancé, faites un ps pour contrôler)

Optionnel sous Linux : comment faire en sorte que tuncfg soit chargé au reboot ?
Si vous n’avez pas envie de devoir relancer à chaque reboot la commande tuncfg, vous pouvez par exemple créer un script qui sera appelé au boot. Je ne détaille pas le principe sous Linux, juste la procédure. Faites des man sur les commandes utilisées si vous êtes curieux.
Créez un fichier /etc/init.d/hamachi_tuncfg avec les permissions d’exécution, contenant :

#!/bin/sh
#script simple pour /etc/init.d de demarrage de tuncfg pour HAMACHI
#auteur : michauko

test -x /sbin/tuncfg || exit 0
. /lib/lsb/init-functions


export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

case "$1" in
  start)
        log_daemon_msg "Demarrage TUNCFG pour HAMACHI" "tuncfg"
        if start-stop-daemon --start --quiet --oknodo --exec /sbin/tuncfg ; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;
  stop)
        log_daemon_msg "Arret TUNCFG pour HAMACHI" "tuncfg"
        if start-stop-daemon --stop --quiet --oknodo --name tuncfg ; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;

  restart)
        log_daemon_msg "Redemarrage TUNCFG pour HAMACHI" "tuncfg"
        start-stop-daemon --stop --quiet --oknodo --retry 30 --name tuncfg
        if start-stop-daemon --start --quiet --oknodo --exec /sbin/tuncfg ; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;

  *)
        log_action_msg "Usage: /etc/init.d/hamachi_tuncfg {start|stop|restart}"
        exit 1
esac

exit 0

Ensuite, on crée les raccourcis qui vont bien dans les runlevels :

# update-rc.d  hamachi_tuncfg defaults
 Adding system startup for /etc/init.d/hamachi_tuncfg ...
   /etc/rc0.d/K20hamachi_tuncfg -> ../init.d/hamachi_tuncfg
   /etc/rc1.d/K20hamachi_tuncfg -> ../init.d/hamachi_tuncfg
   /etc/rc6.d/K20hamachi_tuncfg -> ../init.d/hamachi_tuncfg
   /etc/rc2.d/S20hamachi_tuncfg -> ../init.d/hamachi_tuncfg
   /etc/rc3.d/S20hamachi_tuncfg -> ../init.d/hamachi_tuncfg
   /etc/rc4.d/S20hamachi_tuncfg -> ../init.d/hamachi_tuncfg
   /etc/rc5.d/S20hamachi_tuncfg -> ../init.d/hamachi_tuncfg

Pour simuler le reboot, appelez la commande /etc/init.d/hamachi_tuncfg start (ou stop ou restart). Contrôlez la (non-)présence du processus avec ps.

Voilààààà, tout est prêt au niveau de l’OS Linux pour lancer Hamachi.

Lancement et utilisation de Hamachi sous Linux :

Maintenant que la partie technique est faite (cf. les paragraphes ci-dessus), il faut vous créer un compte. Cette fois, vous allez utilisez un compte utilisateur « normal » (ie, pas root). Par exemple, pour en revenir au serveur de jeu, le compte de l’utilisateur qui héberge ledit serveur. La commande – à faire une seule fois – est la suivante :

toto$ hamachi-init
Initializing Hamachi configuration (/home/toto/.hamachi). Please wait ..

  generating 2048-bit RSA keypair .. ok
  making /home/toto/.hamachi directory .. ok
  saving /home/toto/.hamachi/client.pub .. ok
  saving /home/toto/.hamachi/client.pri .. ok
  saving /home/toto/.hamachi/state .. ok

Authentication information has been created. Hamachi can now be started with
'hamachi start' command and then brought online with 'hamachi login'.

Ensuite, les commandes suivantes servent à chaque fois que vous voulez vous connecter au « système Hamachi » (avant de lancer votre serveur de jeu par exemple).

D’abord lancer hamachi :

toto$ hamachi start
Starting Hamachi hamachi-lnx-0.9.9.9-20 .. ok

Puis vous connecter (passer « online ») :

toto$ hamachi login
Logging in ....>....... ok

Si vous voulez connaitre votre IP sur le VPN (c’est-à-dire à quelle adresse sera hébergée votre serveur de jeu), faites un :

toto$ cat ~/.hamachi/state
Identity   5.168.x.y <---- c'est elle l'IP, c'est là que vos amis iront pour atteindre serveur "LAN sur Internet"
Nickname   votre_nick_quand_vous_l_aurez_choisi
AutoLogin  yes
OnlineNet  vos_reseaux_lorsque_vous_en_aurez_crees_ou_rejoints

Ensuite, choisissez-vous un beau nickname (à faire une seule fois, sauf pour en changer) :

toto$ hamachi set-nick toto_qui_hoste_le_serveur_de_jeu
Setting nickname .. ok

Ensuite, il faut créer un réseau. A noter que celui qui crée le réseau sera le seul à avoir le droit de le détruire ou de kicker des gens. Donc je suggère que le compte qui héberge le serveur de jeu soit celui qui crée ce réseau (rappel : ce réseau = ce point de ralliement, ce channel). Ca se fait comme ça :

toto$ hamachi create mon_reseau mon_mot_de_passe
Creating mon_reseau .. ok

Vous pouvez lister les personnes présentes (d’une part inscrites, d’autre part connectées ou non). Pour l’instant ce sera vide :

toto$ hamachi list
   [mon_reseau]

Vous-même n’êtes pas encore connecté à ce réseau (sinon il y aurait une « * » devant [mon_reseau]). Pour ce faire :

toto$ hamachi go-online mon_reseau
Going online in mon_reseau .. ok

(Ca vous demandera le mot de passe, évidemment).

Lorsque tous vos amis joueurs, sous Windows, auront rejoint votre réseau, ça ressemblera plutôt à :

toto$ hamachi list
 * [mon_reseau]
       * 5.90.x.y       fredo                     83.a.b.c:1043
          5.168.d.e     warlord
        * 5.63.e.f       autrepote               82.g.h.i:1077

Les « * » signifient que les gens sont connectés, vous avez leur IP VPN et leur IP Internet en fin de ligne. Si vous ne voyez pas les surnoms, il faut lancer la commande hamachi get-nicks.

Voilà vous savez tout.

Quelques autre commandes avant que je n’oublie, voyez :

toto$ hamachi --help
Hamachi, a zero-config virtual private networking utility, ver 0.9.9.9-20

  usage: hamachi [-c ] [command]

  -c         overrides default configuration directory (~/.hamachi)
  command    specifies an action. Can be one of the following -

             #  start [debug]
                stop
             #  set-nick 
                login
                logout
             #  list
                get-nicks
             #  create  []
                delete 
                evict   <5.x.x.x>
             #  join    []
                leave  
             #  go-online 
                go-offline 

  If no command is specified, hamachi displays its status including version,
  pid, online status and the nickname

et aussi, pour quitter Hamachi, le plus brutal est :

toto$ hamachi stop
Shutting down .. ok

Ca sauvegarde votre état, à savoir : online/offline, les réseaux auxquels vous étiez connectés etc. Vous pouvez quitter d’abord proprement tout ça (c’est pas utile) avec des commandes style hamachi logoff et hamachi go-offline mon_reseau (pour rejoindre un réseau : hamachi go-online mon_reseau).

Bon voilà, vous savez tout sous Linux pour :

    – mettre en place hamachi
    – créer votre compte, vous connecter
    – créer votre réseau et vous y (dé)connecter
    – voir qui est dessus
    et surtout : connaitre votre IP sur le VPN, IP qui sera à donner à tout le monde pour joindre votre serveur.

Sous Linux : quoi faire sur le firewall ?

Si vous avez déjà des amis sous Hamachi sous Windows, vous verrez que ces amis n’arrivent pas à « ping-er » l’IP du VPN de l’utilisateur Hamachi sous Linux (donc potentiellement ils ne pourront pas joindre votre serveur de jeu).
Il faut ouvrir le firewall proprement.
En effet, sans ça, si vous tentez des ping dans un sens ou dans l’autre (depuis votre compte Hamachi Linux et depuis un compte que vous aurez sur une autre machine Windows par exemple), vos logs risquent de vous dire quelque chose comme ça :

Listed by source hosts:
 Rejected 5 packets on interface ham0
    From 5.x.y.z - 4 packets
       To 5.a.b.c - 4 packets
          Service: 8 (icmp/8) (Shorewall:INPUT:REJECT:) - 1 packet
          Service: www (tcp/80) (Shorewall:INPUT:REJECT:) - 3 packets
    From 5.x.y.z - 1 packet
       To 5.a.b.c - 1 packet
          Service: 3 (icmp/3) (Shorewall:OUTPUT:REJECT:) - 1 packet

Les curieux auront vu avec ifconfig qu’une nouvelle interface réseau est née : ham0.
J’utilise shorewall (cf. ma doc Debian pour plus d’infos). Si vous n’ utilisez « que » iptables, vous êtes autiste et vous pourrez transposer ce qui suit.

Dans le fichier /etc/shorewall/interfaces, vous déclarez une zone correspondant à l’interface réseau virtuelle de Hamachi, ça donne quelque chose comme ça :

net     eth0            detect          dhcp,tcpflags,norfc1918,routefilter,nosmurfs,logmartians,blacklist
#pour hamachi :
ham     ham0            detect          tcpflags,detectnets,nosmurfs

Ensuite, dans /etc/shorewall/zones, vous expliquez que cette « zone » est de type ipv4 classique :

fw      firewall
net     ipv4
ham     ipv4
loc    ipv4

Enfin, comme vous souhaitez sûrment être restrictif pour l’accès à ce réseau, il n’est sûrement pas la peine de préciser quelque chose dans le fichier /etc/shorewall/policy : tout est droppé par défaut. Le retour d’information du firewall (le serveur de jeu) vers les clients sera autorisé même sans règle type ACCEPT fw ham puisque la communication aura été initié dans l’autre sens (client joueur qui s’adresse au serveur). N’oublions pas que le firewall Linux est « stateful ».
Donc on n’a plus qu’à ouvrir ce qui nous intéresse. Ci-dessous le port du jeu « Call Of Duty UO » et l’autorisation de ping (ça aide toujours un peu à débugger) dans le fichier /etc/shorewall/rules :

# HAMACHI
Ping/ACCEPT     ham             fw
ACCEPT          ham             fw      udp 28960 # CALL OF DUTY

Vous relancez shorewall (/etc/init.d/shorewall restart), contrôlez son bon lancement (tail /var/log/shorewall-init.log). Et ô magie, le ping Windows/ip_hamachi -> Linux/ip_hamachi passe.

Pour ce qui est de la connexion au serveur de jeu dont il est question dans cet article, il faut encore que vous le lanciez en lui expliquant d’une manière ou d’une autre qu’il est configuré en LAN et que son adresse d’attachement est 5.x.y.z et non pas votre IP publique. Pigé ? Certains pourraient même avoir besoin de désactiver des contrôles de clefs…

Maintenant pour vos amis qui ne demandent qu’à jouer, pas à geeker, voici le chapitre qu’il leur faut :

Installation & utilisation sous Windows

Ca, c’est le chapitre où vous expliquez au reste de votre équipe de bras cassés de l’informatique comment faire pour se connecter à votre VPN-machin sous Windows pour (enfin) pouvoir jouer. ‘y comprennent rien c’est grave 🙂
Il faut installer le client Windows, le lancer et suivre ce que ça raconte. Il y a même un tuto obligatoire qui explique le B-A.BA pour prendre en main Hamachi. Ensuite, vos amis rejoindront votre réseau (qu’on a nommé ici « mon_reseau ») et c’est terminé.
En image, ça donne ça :
hamachi 01

hamachi_windows_02.png

hamachi_windows_03.png

hamachi_windows_04.png

hamachi_windows_05.png

hamachi_windows_06.png

hamachi_windows_07.png

hamachi_windows_08.png

hamachi_windows_09.png

hamachi_windows_10.png

hamachi_windows_11.png

Et je vous le donne en mille, dans le cas ci-dessus, l’utilisateur Linux (vous) qui a créé le réseau est la personne dont le nick est « ze_serveur ». Plus haut, j’ai du le nommer « toto_qui_hoste_le_serveur ». Pigé ?

Voilà. C’est fini. Fraggez bien.

15 comments

  1. a qui sert hamachi ?

    ben vous etes un petit groupe de joueurs qui trouve un jeu multijoueurs sur internet voir sur le peer to peer. Ce jeux exige une clef cd (valide) pour jouer sur internet, si vous mettez une clef générer par un générateur elle pourra etre valide pour installer le logiciel mais pas pour jouer avec vos camarades, donc en partie lan pas de probleme, donc hamachi permet de creer des parties lan visible sur internet, ce qui permet de juger si le jeu vaut le coup d etre acheté.
    Attention pour les utilisateurs windows, hamachi montre aux autres les dossiers qui sont partagés ainsi que les imprimantes, donc prudence !

  2. ah bah bravo… et moi qui essayait d’être fin et de ne pas parler de piratage de jeu…. (ouvertement)

    Pour les partages Windows, il suffit de cocher la case « désactiver les services windows vulnérables » à l’installation ou d’aller retrouver cette case dans les options

  3. Maintenant la question devien:

    Comment instaler et user hamachi sous Linux SANS accès root

    Pour pouvoir être vraîment vilain ou par necésité (ce qui est le cas)

    Pour instaler hamachi sans root, il sufit de modifier les chemins aux Makefile, mais le problème surgit aver tuncfg

    nescepas ?

  4. Il existe un GUI pour Linux (et OSX), tout est expliqué sur le site officiel.

    Et en ce qui concerne le lourd fait de devoir connaître son IP hamachi, il est tout à fait possible d’utiliser dyndns.com pour diminuer la peine.

  5. salut
    bah merci pour ce tutoriel qui m’a enormément servi pour la partie technique pour le reste ça aller car je debute en administration d’un dédié sous debian lenny et je signale que votre tutoriel est pleinement fonctionnel.
    j’en est eu l’utilité car on voulais faire des parties en coopération dans tom-clancy hawx avec la communauté mais vous imaginez pas le bazard pour ce retrouver dans les n parties existantes alors avec hamachi en 5s on ce retrouve comme en lan ce qui est assez génial.
    donc un grand merci à vous pour ce super tuto.
    ca rje ne me voyais pas expliquer à certaines personnes de la communauté d’utiliser un VPN plus complexe pour eux windosiens habitué au click and play
    si jamais vous voulez joindre le serveur nous sommes quand même un nombre conséquent d’utilisateurs demandez je le metterez.

  6. Salut,
    merci pour ce tutoriel.
    j’ai un petit souci: j’ai suivi toutes les démarches à faire sur linux et tout ça c’est bien passé jusqu’à ce que j’essaye de me loger:
    hamachi login
    Logging in …… failed

    vous n’aurez pas une idée sur l’origine de ce pb?

  7. Bonjour,

    Voilà mon probléme.

    J’ai créé un serveur mais voilà quand un ami se connecte là ca se gatte.

    En effet on se voix sur hamachi, on se ping, on chat sans aucun probléme mais voilà les fichiers partagés sur le PC ne sont pas visible. ( l’option parcourir )

    Malgrès que sur les deux PC nous avons le même groupe de travail et que le partage de fichiers est activé. Hamachi est bien mis en priorité des réseaux.

    On a fait le test avec deux XP puis après 1 XP et 1 Vista – Pareil on ne se voix pas sur le réseau.

    Merci de votre aide. ( Ps : nous avons la derniére version d’HAMACHI )

  8. Hello,
    De ce que je m’en souviens, au niveau Hamachi, il faut aller chercher une option pour bien tolérer le partage de fichiers car c’est désactivé par défaut, pour raison de sécurité.
    Rien à voir il me semble avec le « partage de fichier » qu’on trouve typiquement dans les conf de cartes réseaux. Je ne sais plus si ça doit être activé à ce niveau là aussi

    Ca date tout ça pour moi 🙂
    Bonne chance

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.