# [Réseau] VPN distribué

## Poischack

Bonsoir,

je suis entrain de réfléchir à comment mettre en place une sorte de VPN distribué, j'explique:

j'aimerais créer un réseau privé virtuel permettant de crypter les communications entre plusieurs hôtes,

mais j'aimerais bien éviter que tout les flux passent par un seul serveur.

Je n'ai jamais entendu parler de ça et pour le moment mes recherches sont vaines.

Si vous pensez connaitre un soft qui me permettrais de gérer ça ....

Merci

----------

## -KuRGaN-

Sur le coup ça me dit rien, mais c'est pour quel utilisation ton idée de VPN distribué ??

----------

## Poischack

J'aimerais monter des serveurs ftp/cvs/cifs sans me préoccuper de la configuration de sécurité de chacun de ces serveurs et limiter l'accès à des hotes de confiances.

Je pourrais tres bien m'en passer mais je suis assez curieux et j'aime bien découvrir ce genre de soft.

----------

## -KuRGaN-

Mouai, je ne vois pas trop exactement ce que tu veux faire.

Mais tout tes serveurs sont biens sur des WAN différents en gros ??

Sinon tu peux chercher en encapsulant tes protocoles dans du ssh au pire si j'ai bien compris ton histoire.

----------

## Poischack

Mes hôtes sont tous sur Internet et je voudrais tous les ramener sur un même réseau virtuel.

Mais en y reflechissant je vois pas comment ça pourrais marcher sans passer par un serveur central pour faire la corrélation ip public / ip privée.

----------

## -KuRGaN-

+1 pour ta réflection.

Et après une mince recherche sur google, je n'ai rien trouvé non plus   :Sad: 

----------

## El_Goretto

En fait, j'ai déjà réfléchi à ce soft, parce que je veux le programmer dès que j'aurais le temps... (une palce dans une entreprise pas trop speed??).

Sous windows (tiens et même linux), il y a hamachi, mais il n'est pas du tout opensource. 

Si t'es motivé, j'ai déjà réfléchi au bouzin, et les libs à mettre en jeu. A part la partie graphique où je ne connais rien, je pense pouvoir m'en sortir (libpcap, libnet, et EVP/openssl). Evidemment, çà doit pouvoir être portable sur win et nux, et ces libs doivent remplir ces conditions).

----------

## -KuRGaN-

 *Quote:*   

> Hamachi is not just truly peer-to-peer, it is verifiably secure peer-to-peer.

 

Ouai ça à l'air pas mal cette histoire.

@el_goretto: si c'est pour des serveurs Linux, le mieux est de faire une interface graphique séparée, un peu comme mldonkey et mlgui, car moi, j'utiliserai plutôt ce soft sur un serveur et pas un client.

----------

## El_Goretto

 *-KuRGaN- wrote:*   

> @el_goretto: si c'est pour des serveurs Linux, le mieux est de faire une interface graphique séparée, un peu comme mldonkey et mlgui, car moi, j'utiliserai plutôt ce soft sur un serveur et pas un client.

 

Sûr, on est d'accord pour le serveur qui distribue les clés et les IP. Seulement, ya le client... Et là...

APPEL AUX VOLONTAIRES!!  :Smile: 

Ya un projet à lancer, dont je veux faire partie  :Smile: 

----------

## Poischack

Ah oui hamachi, des copains m'en avaient parlé il y a un moment, ils l'utilisaient pour jouer sur le web en simulant un gros lan.

Ce projet est interressant car réalisable et surtout, il n'existe pour le moment pas de solution libre (à ma connaissance).

----------

## -KuRGaN-

Bon et bien comme pour ecota, je suis une bille en prog alors je veux bien apporter ma pierre à l'édifice en faisant des tests (tain va falloir que je m'y mette quand même !!! )

----------

## PabOu

 *Poischack wrote:*   

> Mes hôtes sont tous sur Internet et je voudrais tous les ramener sur un même réseau virtuel.
> 
> Mais en y reflechissant je vois pas comment ça pourrais marcher sans passer par un serveur central pour faire la corrélation ip public / ip privée.

 

Je me demande si il n'y a pas moyen de faire ca avec OpenVPN..

Je sais qu'il y a moyen de faire des bridges, de relier deux "serveurs-bridge" entre eux (pour relier 2 lans complets et pas simplement ajouter une machine à un lan déjà existant).. on peut également faire en sorte que les différents clients puissent communiquer entre eux...

Et je sais également qu'on peut définir plusieurs IP à contacter pour se connecter au même réseau VPN. Seulement je ne sais pas comment le programme choisit l'IP à utiliser (dans l'ordre d'apparition dans le fichier de config ? ou aléatoirement ?), et enfin, je ne sais pas comment mettre tout ca en place...

Et puis je ne parle pas des performances horribles que ca peut engendrer si on utilise pas un serveur central...

En fait tu veux éviter de centraliser pour quelle raison ? pour éviter de surcharger la bande passante du serveur central ou bien pour éviter que le réseau VPN soit down chaque fois que le serveur central est down ?

----------

## -KuRGaN-

Si j'ai bien compris son histoire , tous les réseaux de chacun de ses serveurs doivent communiquer entre eux, mais il ne veux pas que, si le serveur central tombe, tous les vpn tombent.

Ouai en gros il veut un p2p_vpn_server sur chaque réseau.

So,

El_goretto,

Au boulot.

 :Laughing: 

----------

## PabOu

 *-KuRGaN- wrote:*   

> il ne veux pas que, si le serveur central tombe, tous les vpn tombent.

 

Si c'est juste ca, avec OpenVPN, il n'a qu'a définir plusieurs serveurs centraux, et lorsqu'un tombe, les clients (avec la bonne option "persist-tun" et plusieures entrées 'remote") vont se connecter sur un autre serveur.

----------

## El_Goretto

Avec mes essais passés d'OpenVPN, j'avais mis l'option qui permet aux clients de se "voir" et de communiquer entre eux (client-to-client). Mais les flux passaient toujours pas le serveur central.Après, je ne sais pas si il y a "mieux" comme option.

Et effectivement, mon idée était de décentraliser les flux entre clients (pour la redondance de serveur, c'est un point à réflechir (moi j'avais pensé à une hiérarchie)).

----------

## Poischack

C'est pas pour du p2p hein  :Very Happy:  sinon je prendrais un soft qui crypte les échanges et vasta.

Je veut pas tout centraliser parceque j'ai pas forcement une connexion du tonerre et qu'il est donc plus interessant de laisser les clients échanger les trucs entre eux.

----------

## loopx

 *Poischack wrote:*   

> 
> 
> Si vous pensez connaitre un soft qui me permettrais de gérer ça ....
> 
> Merci

 

Très bonne question, ca m'intéresse aussi tiens. Il est vrai que les VPN normau vont tout faire passer via le serveur qui accèpte toute les connexions. Ton truc serais plus une technologie de p2p que de vpn, je peux pas plus t'aider.

----------

## loopx

En y pensant un tit peu, il doit y avoir moyen de faire un truc mais ca risque d'etre barbare. Genre, chaque client VPN est en fait un serveur vpn, et il se connecte à chaque autre client. De ce fait, il y a tout plein de réso VPN. Reste plus qu'a jouer avec les routes. Route qui seront trouvé grace à un système de DNS dont je vois pas bien comment ca pourrais fonctionner ... A méditer...

----------

## El_Goretto

Ben perso, j'avais pensé à 2 approches, une avec serveur qui sert juste à permettre aux clients de faire connaitre les uns des autres, et distribuer les clés, avec une gestion centralisée des droits d'accès à des salles (en fait, visuellement, ca donnerait un mix entre une arborescence de fichiers ce que propose TeamSpeak).

L'autre approche totalement sans serveur nécessiterait de déclarer sur chaque client les pairs... Ca suffit dans le cadre d'un groupe de potes sans gestion de droits (cad en mono-salle). Ou alors faut implémenter un système de confiance mutuelle, genre si qqn du VPN ajoute un pair, il est transmis aux les autres clients connectés. Mais pour supprimer qqn, c'est déjà moins simple... Bref! a réfléchir tout çà, c'est du domaine du faisable sans trop de cassage de tête.

Tout ca pour dire que c'est du faisable, mais que j'aimerais bien ne pas me retrouver seul...  :Smile:  En tout cas, je vais essayer de faire une archi logicielle grossière ce week-end, voire tenter une description du fonctionnement du soft. Toute aide (réflexions sur la conception sans parler de code, conseils de dev, ou autre) est bienvenue  :Smile: 

Et ouvrir un thread de lancement de projet ici, des fois que...

Si qqn a des infos ou des liens sur la gestion de projet opensource (mises en garde, pb de brevet, déposer un nom, gérer les sources, travail en groupe etc), ca me permettrait de les lire tranquillement pour le jour où je déciderais de me lancer.

----------

## Poischack

Personnellement je pense que la premiere option est la meilleur, ça permet de simplifier la tache à l'usager (pas au programmeur par contre  :Smile: )

----------

## PabOu

on pourrait se baser sur openvpn (fonctionne bien, opensource, multi-os et tout) et simplement créer un script qui partagerait les ip des utilisateurs...

Lorsqu'un utilisateur se connecte au serveur principal, le serveur stocke l'ip. Et quand un autre utilisateur se connecte, le serveur lui envoie l'ip du premier utilsateur, et stocke la sienne. Lorsque le 3ème se connecte, le serveur envoie les 2 premieres ips...

De cette façon, tous les clients se connectent entre eux (chaque utilisateur aurait X connexions VPN ou X serait égal au nombre de peers -1) ce qui permet de ne pas faire passer tout le traffic par un serveur principal.

Vous m'avez compris ? c'est peut-être ce qu'a proposé el_goretto dans sa première idée.. j'ai pas trop compris ce qu'il voulait dire par là.. et puis reste à voir comment organiser ca au niveau IP..

----------

## El_Goretto

Je pensais bien prendre OpenVPN comme source d'inspiration, en ce qui concerne les couches basses. Mais ta solution PabOu est faussement simple  :Smile:  ... Puisqu'il faut réécrire le client OpenVPN a mon avis, et qu'on ne peut pas se contenter d'une surcouche. En effet, même s'ils ont leur adresses respectives, il faut quand même qu'ils négocient une clé de session.

Le code serveur serait simple, de base: référencer les clients par leurs @IP réelles et virtuelles, gérer l'authentification (via mdp SRP ou clé publique), et générer et transmettre une clé de session chaque fois qu'un client veut initier un dialogue avec un autre client (sujet à discussion voire simplification). Après, on peut l'améliorer avec la structure de salles dont je parlais... mais bon, pas avant la v2.0  :Wink: 

Des questions?  :Smile: 

----------

## PabOu

J'avoue ne pas m'y connaître assez en OpenVPN, même si je l'ai installé..

Mais qu'entends-tu par clé de session ? Avec OpenVPN, il suffit de s'échanger les certificats avec clé publique, et puis les clients se débrouillent entre eux, non ?

----------

## El_Goretto

 *PabOu wrote:*   

> J'avoue ne pas m'y connaître assez en OpenVPN, même si je l'ai installé..
> 
> Mais qu'entends-tu par clé de session ? Avec OpenVPN, il suffit de s'échanger les certificats avec clé publique, et puis les clients se débrouillent entre eux, non ?

 

Bon, ce que je crois (je l'ai installé, et tenté de faire dialoguer les clients ensemble mais bon): c'est effectivement basé sur des certifs SSL, mais comme tous les flux passent par le serveur, je dirais qu'il ya a sécurisation des liens client/serveur, mais c'est tout.

Une clé de session, c'est une quantité de données qui sert à chiffrer donc les flux (cf des cours basiques de crypto). Il en faut idéalement une entre chaque paire de pairs (ouf), et ne pas garder tout le temps la même (logique). Idéalement, elle serait générée aléatoirement par le serveur (suite à une demande d'un client pour causer à une autre client), ou bien découle d'un protocole d'authentification (SRP que je connais bien, ou bien SSL... que je connais juste de loin).

Je ne suis pas expert là dessus, comme expérience j'ai juste un stage avec un developpement de sniffer IPsec, mais ça reprenait les mêmes concepts crypton & sécu.

----------

## CryoGen

Ce projet m'interresse grandement  :Smile: 

J'explique : je dois réaliser un VPN via VSAT pour 15 sucursales d'une société qui veux utiliser des serveurs linux  :Smile:   Seulement, la vitesse via VSAT n'est pas tres importante (et oui c'est cher le VSAT ^^) => 128kb/s par site donc si tout dois passer par un serveur central ca va pas le faire  :Very Happy:  ! Ai-je dit qu'ils veulent la VoIP inter-site en plus   :Laughing: 

Donc un VPN "distribué/p2p" me serait très utile  :Smile:  Ah moins qu'il existe une meilleure alternative ?

Je devellope en C/C++ et je suis pret à participer à se projet :p

----------

## PabOu

Je ne vois pas pourquoi on doit utiliser une clé de session..

Avec SSL, chaque hôte a deux clés, une privée, et une publique.

Lors de l'envoi d'un message le cryptage avec la clé privée permet de prouver que le message n'a pas été altéré en cours de route.. seule la clé publique qui lui est associée permet de décoder ce message et seulement ce message (tout le monde peut donc lire le message mais je suis le seul à pouvoir émettre ce message).

Toujours lors de l'envoi d'un message, la clé publique du correspondant permet de crypter le message. Seule la clé privée qui lui est associée pourra décrypter le message, et seulement ce message (tout le monde peut envoyer ce message, mais SEUL mon correspondant pourra le lire).

La combinaison de ces deux clés fait tout (seul le correspondant peut lire et seul l'emetteur peut envoyer) ! Et je pense qu'aujourd'hui, SSL à fait ses preuves... donc pas besoin de clé de session.

Tu attends quoi d'autre comme sécurisation ?

----------

## El_Goretto

 *PabOu wrote:*   

> La combinaison de ces deux clés fait tout (seul le correspondant peut lire et seul l'emetteur peut envoyer) ! Et je pense qu'aujourd'hui, SSL à fait ses preuves... donc pas besoin de clé de session.

 

Excuse moi, je n'ai pas détaillé, parce que je pensais que tu savais ce que c'était dans les détails: http://www.commentcamarche.net/crypto/ssl.php3.

Dans un protocole d'authentification à clés assymétriques, celles ci ne servent qu'aux négociations, après, c'est uen clé de session générée sur le coup qui sert pour les flux. C'est pour des question de rapidité de calcul.

@CryoGen: je serais ravi de développer çà avec toi  :Smile:  Je n'ai fais de développement que lors de mes études qui remontent à 2 ans (ct le sniffer). Si de ton côté, tu es plus à l'aise, on fonctionnerait genre "je propose-tu valides-on écrit" ou inversement. Par contre, je ne suis pas trop au fait des outils pour le travail collaboratif. J'ai bien utilisé qqs fois cvs, mais ca va pas plus loin. Je pense en particuliers à un site web par exemple pour déposer de la doc (mais on peut faire sans, je suppose, avec un ftp ou sftp de base). A mois que sourceforge propose des packs noob/dev?  :Smile: 

----------

## PabOu

 *El_Goretto wrote:*   

> Dans un protocole d'authentification à clés assymétriques, celles ci ne servent qu'aux négociations, après, c'est uen clé de session générée sur le coup qui sert pour les flux. C'est pour des question de rapidité de calcul.

 

Euh oui, maintenant que tu m'en parles, ca me revient.

Pourquoi ce serait au serveur de créer cette clé de session pour que les clients commmuniquent entre eux ?

----------

## CryoGen

 *El_Goretto wrote:*   

>  *PabOu wrote:*   La combinaison de ces deux clés fait tout (seul le correspondant peut lire et seul l'emetteur peut envoyer) ! Et je pense qu'aujourd'hui, SSL à fait ses preuves... donc pas besoin de clé de session. 
> 
> Excuse moi, je n'ai pas détaillé, parce que je pensais que tu savais ce que c'était dans les détails: http://www.commentcamarche.net/crypto/ssl.php3.
> 
> Dans un protocole d'authentification à clés assymétriques, celles ci ne servent qu'aux négociations, après, c'est uen clé de session générée sur le coup qui sert pour les flux. C'est pour des question de rapidité de calcul.
> ...

 

Ben je suis un peu rouillé en dev reseau aussi et j'y connais pas grand chose sur la mise en oeuvre de ssl/vpn... mais de toute façon il faut que je m'y mette pour mon boulot ^^ ca motive donc, et au moins j'aurai pas l'impression d'exploiter les autres  :Smile: 

Pour le travail collaboratif un cvs/svn est obligatoire  :Smile:  mais j'en ai jamais vraiement utilisé non plus  :Very Happy:  à part avec VisualStudio.... donc assez camouflé dans l'IDE. Peut-etre qu'un bon IDE sous linux peut gerer un serveur svn mais lequel ?

On partirait dans quelle direction ? fork de openVPN ou on part de rien ??

----------

## El_Goretto

Ok pour l'IDE, mais je me suis toujours limité à Jext.. qui est juste un éditeur avancé. Donc j'en connais pas.  :Smile: 

Je pensais plutôt repartir de 0, en incorporant des bouts de code d'OpenVPN au besoin (par exemple les interactions avec TUN/TAP si c'est possible, voire l'authentification SSL à terme), histoire d'avoir une archi logicielle "simple" qu'on maitrise. Par exemple, pour la partie authentification niveau serveur, j'aimerais pouvoir en disposer de plusieurs (protocole SRP au minimum, apres on peut penser à clés ssh/putty et certifs SSL), contrairement à OpenVPN.

Hors, j'ai bien peur qu'on passe trop de temps à comprendre une archi très complète (OpenVPN) qu'il nous faudra "casser" ou adapter. Genre pour pour mon ancien sniffer IPsec, partir de FreeSWAN était suicidaire... Par contre prendre une de leur très ancienne versions plus simple niveau archi était malin (c'était pas moi à l'initiative  :Smile: ), car il suffisait de reporter leurs améliorations quand le besoin s'en faisait sentir.

Ceci dit, je dis çà sans avoir mis le nez dans le code d'OpenVPN. A mons avis, il faut déjà définir les fonctionnalités de notre projet (je vais tenter çà ce Week end), puis apres on peut voir si OpenVPN est "récupérable" en globalilté.

Question: ça dérange quelqu'un si j'essaie de faire çà en anglais directement, histoire de gagner du temps au moment inévitable de traduire nos docs pour la communauté?  :Smile: 

----------

## CryoGen

Pas de problème pour l'anglais ^^

Pour l'IDE, Eclipse semble tres bien et gère le SVN  :Smile: 

----------

## El_Goretto

Ok, va pour eclipse alors.  :Smile: 

Sinon, pour la partie communication "entre nous", on pourra toujours se faire un thread sur le forum, faute de site web centralisateur,  mais sinon, pour les parties "en live", j'ai un serveur TeamSpeak (VoIP) qui tourne 24/24, donc on pourrait ainsi gagner pas mal de temps si on doit prendre des décisions à plusieurs. Enfin, c'est qu'une idée, sinon ya Skype, hein  :Smile: 

----------

## CryoGen

Ben pour le VoIP c'est pas possible pour le moment... je n'arrive pas à faire fonctionner l'entrée casque sous linux :'( nforce5   :Evil or Very Mad: 

----------

## PabOu

Je pense que vous (nous) aurez (aurons) besoin d'un wiki pour pouvoir mettre nos idées à plat et bien les définir auparavant.

C'est un projet qui, moi aussi, m'intéresse beaucoup !

----------

## El_Goretto

 *PabOu wrote:*   

> Je pense que vous (nous) aurez (aurons) besoin d'un wiki pour pouvoir mettre nos idées à plat et bien les définir auparavant.
> 
> C'est un projet qui, moi aussi, m'intéresse beaucoup !

 

Ok très bonne idée... Tu t'en charges?  :Smile: 

Effectivement, un wiki pour les discussions + les docs + les sources. Mais je n'y connais pas grand chose (installation du wiki et conf).

--

edit: normalement, le projet ne devait pas tomber sous le coup de cette salo...e de DADVSI, vu que la technologie "pair à pair" développée ne permet pas en elle même d'échanger des fichiers, mais de sécuriser des flux (c'est à dire ce que fait un VPN classique). Mais si qqn est plus au courant de ses choses, un avis peut être intéressant.

----------

## Ey

 *Poischack wrote:*   

> Bonsoir,
> 
> je suis entrain de réfléchir à comment mettre en place une sorte de VPN distribué, j'explique:
> 
> j'aimerais créer un réseau privé virtuel permettant de crypter les communications entre plusieurs hôtes,
> ...

 

Oui en gros ce que tu veux faire c'est un réseau overlay chiffré. Regarde du côté de TOR.

----------

## El_Goretto

Quelqu'un a déjà créé un projet sur sourceforge? ya des choses à savoir?

J'ai été voir ce qui est proposé, çà a l'air interessant, même si je ne connais pas les détails: http://sourceforge.net/docman/display_doc.php?docid=753&group_id=1

----------

## El_Goretto

Bon, on va faire un thread de lancement au moins ici sur la section french. Ca nous servira au moins à trouver un nom...  :Smile: 

----------

## Poischack

Pour suivre la conversation: https://forums.gentoo.org/viewtopic-t-486913.html

----------

