Notre réseau privé virtuel
Dans mon premier billet, je vais vous parler de ce petit VPN que nous avons mis en place entre Grumpy (le serveur dédié) et quelques autres machines.
Mais avant tout, quelques points d’explications, pour ne pas perdre ceux qui n’ont jamais entendu parler de cette formidable technologie.
Virtual Private Network (Réseau privé virtuel), qu’est ce que c’est ?
On parle de réseau privé virtuel, ou VPN, lorsque deux machines, se trouvant sur deux réseaux différents, établissent un tunnel. Ce tunnel est le plus souvent chiffré, afin qu’une personne écoutant la communication ne soit pas en mesure d’en comprendre le contenu. Ces deux machines sont alors à même de communiquer l’une avec l’autre, comme si un simple câble les reliait.
Ça à l’air sympa, mais à quoi ça sert un VPN ?
Voyons maintenant quelques cas communs où des VPNs sont mis en place.
Le cas typique: l’entreprise et ses employés travaillant à distance
Imaginons que vous soyez un chef d’entreprise soucieux de la productivité de vos employés (comme beaucoup de PDG je suppose :-)). Ceux-ci sont souvent en déplacement mais ont tout de même besoin d’accéder au réseau local (LAN, Local Area Network) de l’entreprise et à ses ressources (serveur de fichiers, intranet, …).
Vous allez donc demander à votre administrateur réseau de mettre en place une solution VPN qui va permettre aux employés de se connecter à distance au LAN de l’entreprise. Concrètement, vous aurez un serveur VPN, écoutant sur l’Internet, attendant la requête d’un client VPN de l’un de vos employé, connecté à l’autre bout du monde. Un fois la connexion établie, celui-ci pourra communiquer avec une partie, ou l’ensemble des machines du LAN de l’entreprise, tout dépend de la configuration de celui-ci.
Connectons les bureaux !
Toujours dans un soucis de productivité, vous désirez connecter les deux bureaux, espacés d’environ 300 Km. Vous n’allez pas tirer un câble ! (si une fibre, pourquoi ? :-/). Vous allez connecter les deux réseaux à l’aide d’un lien VPN, et au final, tout sera comme si tout était physiquement connecté, et la secrétaire de la ville A pourra sans problème accéder au fichiers du serveur de la ville B.
Point d’accès Wifi, la protection radicale
Cette technique est souvent employée dans les collectivités, par exemple dans les universités, car elle simplifie grandement la gestion des points d’accès aux réseaux sans-fil. Plutôt que de chiffrer le réseau avec les techniques habituelles (clé WEP, chiffrage WPA/WPA2, …), le point d’accès est laissé sans protection. N’importe-qui donc, peut s’y connecter. Seulement, une fois connecté, la seule machine à laquelle on peut parler, est une machine hébergeant un serveur VPN ! Rien d’autre n’est accessible sur ce réseau, pas moyen de router son trafic vers l’Internet.
En revanche, les personnes ayant un accès VPN seront à même de s’y connecter, et ainsi d’ouvrir un tunnel sécurisé avec elle. Ils pourront ainsi communiquer avec le reste du réseau, et souvent avec le reste du monde.
La gestion des utilisateurs est ainsi grandement simplifiée, puisqu’il suffit d’ajouter et de supprimer des comptes sur le serveur VPN suivant le besoins. Si l’administrateur devait changer le mot de passe WPA à chaque fois qu’un utilisateur est supprimé, et le recommuniquer à tout les autres utilisateurs, je vous laisse imaginer la galère (sans compter le manque de traçabilité des utilisateurs, …)
Maintenant que vous avez quelques exemples d’utilisations, je vais rentrer un peu dans le détail et notamment, comment mettre en place un VPN de manière simple.
Les différentes solutions de VPN
Il existe plusieurs solutions pour créer son VPN. Et comme toujours, certaines sont payantes, d’autres gratuites :-).
Exemple de solutions matérielles payantes
Et évidemment, lorsqu’on parle de VPNs professionnels, on ne peut pas passer à côté du géant Cisco [1], qui fabrique entre autres des solutions VPN matérielles (c’est-à-dire, une machine, souvent dans un rack, dédiée à cette tâche). Ils sont bien entendu très performant, mais aussi très onéreux (disons qu’il faut avoir l’utilité d’une bête pareille pour se la payer).
Il existe d’autres constructeurs de matériels réseaux professionnels dans ce genre comme par exemple Juniper Networks [2], l’un de leurs fervents concurrents.
Il faut bien comprendre ici que ces entreprises fabriquent du matériel dédié à cette tâche. C’est donc du matériel extrêmement performant mais qui ne fait que ça. C’est pour celà que l’on parle de VPN matériel (hardware).
Et maintenant, ce dont nous (petits particuliers), nous disposons
Bien entendu, lorsque avec Division-par-zero, nous nous sommes posés la question d’un VPN, nous n’allions certainement pas nous tourner vers le genre d’engins vus dans le paragraphe précédent. Déjà, nous n’avons qu’un serveur à notre disposition, et certainement pas les fonds nécessaires, ni le besoin pour acquérir un tel monstre. Donc, que nous reste-t-il ?
Hé bien ! Le monde du libre est encore une fois passé par là ! Et je vais vous présenter tout de suite OpenVPN [3]. OpenVPN fourni une solution VPN sous licence GPL-2 (entre autres), et permet de déployer son réseau VPN de manière simple et efficace. Il tourne sous Linux, xBSD, Windows et surement d’autres :-).
La différence fondamentale avec les exemples précédents, c’est qu’ici, nous allons installer notre serveur VPN sur une machine quelconque, possédant un OS qui pourrait aussi bien faire tourner un serveur web, un traitement de texte ou Quake 3. Nous parlons alors de VPN logiciel (software).
C’est cette solution que nous avons retenu pour mettre en place notre VPN.
Et bien d’autres…
En effet, je suis loin de tous les connaitre, il doit exister un tas d’autres solutions. Je citerai par exemple Hamachi, très simple à mettre en œuvre et souvent utilisé par les joueurs qui veulent faire comme si ils étaient en Lan :-). Ou encore des solutions L2TP+IPSec, plus compliquées à mettre en place, mais plus « standard » qu’une solution OpenVPN. En effet, OpenVPN parle un langage bien à lui, et il faut un client OpenVPN pour se connecter à un serveur OpenVPN. Avec des solutions L2TP+IPSec, votre réseau à plus de chance d’être « interopérable ». Un exemple bête, Windows, les iPhones, et les téléphones tournant sous Android supportent nativement ce genre de VPNs.
Une présentation de notre infrastructure
Je vais maintenant rapidement vous présenter notre petite infrastructure. Je dois l’avouer, si elle a vu le jour, c’est plus par challenge et par engouement pour le sujet que pour répondre à un réel besoin. Néanmoins aujourd’hui, nous aurions du mal à nous en passer, j’expliquerai à la fin l’utilité que j’en ai tous les jours.
Pour remettre les choses dans le contexte, nous disposons d’un serveur dédié (Grumpy), hébergé chez OVH, allumé 24h/24, avec une IP fixe. Donc lui, peut importe où l’on se trouve, à priori, il est toujours joignable (pour peu d’avoir une connexion Internet fonctionnelle ;-)). Ensuite, nous disposons de nos routeurs respectifs (donc chez nous) :
- Moi (Sékoïa), mon routeur s’appelle Happy, c’est une board Soekris net4801 [4], sur laquelle je rédigerai certainement un billet plus tard 🙂
- Division-par-zero, son routeur s’appelle Sleepy, et c’est un vieux PC avec une distribution de Linux appelée IPCop [5], spécialisée dans le routage, firewalling.
Ceux sont eux (à quelques intermédiaires prêt), qui nous relis à l’Internet.
Hé bien ! Pourquoi ne pas connecter tout ce joyeux monde ? Voici donc un petit schéma pour éclaircir les esprits.
Voici donc l’infrastructure dans sa forme la plus simple, pas de VPN, rien. Le nuage représente le reste du monde, en gros l’Internet, Grumpy et nos routeurs respectifs y sont connectés, et nous avons nos réseau locaux respectifs, nommés pour l’occasion lan_happy et lan_sleepy. Jusqu’ici donc, rien d’exceptionnel, vous avez certainement une installation similaire chez vous, à l’aide du box quelconque.
Regardons maintenant le résultat si on crée une connexion VPN entre Happy et Grumpy, et une autre entre Sleepy et Grumpy:
Les deux routeurs sont maintenant connectés à Grumpy par un lien VPN. Il y a une adresse IP à chaque bout, et chacun peut communiquer avec Grumpy comme si ils y étaient reliés par un cable. Mais cette infrastructure a un défaut, Happy et Sleepy ne peuvent pas communiquer entre eux par le biais du VPN. Voici donc une modification de l’architecture afin de palier à ce problème:
Cette fois-ci, nous créons un pont (bridge) entre les deux interfaces du VPN sur Grumpy (tap0 et tap1 sur le schéma précédent). Si vous ne savez pas ce qu’est un pont, cela permet en gros de faire comme si les interfaces dans le pont étaient connectées à un même switch. Ici le pont s’appelle br0, et il contient tap0 et tap1. Un sous-réseau est alors créé (lan_vpn) et Happy et Sleepy peuvent communiquer :-).
Une fois les tables de routage correctement configurées sur chacun des routeurs, toutes les machines du réseau lan_happy peuvent communiquer avec celles du réseau lan_sleepy et vice-versa !
Vous allez me dire, pourquoi Grumpy sert d’intermédiaire ici ? Happy et Sleepy pourraient très bien négocier leur lien VPN tout seuls ! C’est vrai, mais ce schéma a l’avantage d’être facilement extensible. Avant, un autre routeur nommé Sneeze (tiens dont ! :-D) était lui aussi connecté au réseau lan_vpn, on comprend alors mieux l’intérêt d’avoir un point « central » de communication. Sneeze est maintenant déconnecté mais qui sait, peut-être qu’un jour un autre nain viendra rejoindre la famille.
Mais nous sommes allé plus loin ! En effet, nous voulions permettre à d’autres machines, n’ayant rien à voir avec ce schéma, de se connecter au réseau. C’est pourquoi nous avons mis en place un autre sous-réseau que voici :
Ce sous-réseau (lan_cert_vpn), permet à quiconque étant connecté, de pouvoir communiquer avec le reste du réseau VPN, c’est à dire toutes les machines des réseaux lan_happy et lan_sleepy. Pour se connecter, il suffit d’avoir un certificat valide (chaque client a un certificat différent). Nous pouvons donc ouvrir un accès à quiconque est connecté à l’Internet !
Vous aurez remarqué que pour l’occasion, Grumpy est devenu un routeur, il doit en effet router le trafic entre lan_cert_vpn et le reste du réseau.
Quelques cas pratiques d’utilisations
Car en effet, au delà de pouvoir dire « oui ! je l’ai fait 🙂 », ce réseau peut avoir une certaine utilité. En voici une liste non exhaustive, inspirée de mon utilisation quotidienne :
- Lorsque je suis à l’extérieur (par exemple au travail), je me connecte au vpn lan_cert_vpn et j’ai à tout moments accès à mon PC à mon domicile. Si celui-ci est éteint, je me connecte à Happy et je lance une requête wake on lan sur le réseau lan_happy et il s’allume tout seul 🙂
- Étant relié à Grumpy par un sous-réseau « privilégié », je peux me servir du serveur SMTP de celui-ci pour envoyer des mails. Le serveur SMTP est configuré pour ne pas accepter de transférer des mails arrivants de l’Internet, et dont la destination finale n’est pas lui-même. En gros, il ne peut donc que recevoir des mails. Cela est indispensable pour ne pas servir de relai de spam. Mais les machines connectées au VPN ont le droit de l’utiliser comme relai :-).
- Je peux jouer avec Division-par-zero à des jeux en réseau à peu près comme si on était en Lan Party. Pas exactement car nous ne sommes pas sur le même sous-réseau, donc les options du genre « rechercher les serveurs LAN » dans les jeux ne fonctionnent pas. Néanmoins, en spécifiant l’IP manuellement, pas de problème, et cela nous évite la tâche fastidieuse d’avoir à rediriger les ports sur nos routeurs respectifs.
- Nous pouvons aussi très facilement nous échanger des fichiers comme nos photos de vacances.
J’en oublie surement. Comme vous le voyez, cette infrastructure crée un véritable réseau local, mais virtuel 🙂 et surtout très sécurisé.
Et maintenant ?
Vous avez maintenant une vue d’ensemble de l’infrastructure mise en place. Dans ce billet, je ne suis volontairement pas rentré dans les détails. J’ai voulu resté très général, le but étant de montrer ce qu’il est possible de faire et les services offerts par une telle infrastructure.
Celle-ci n’est certainement pas parfaite, et il y a bien entendu d’autres moyens de faire. Le but était avant tout de le faire pour apprendre, et je suis aujourd’hui à même de vous faire partager ce que j’ai appris :-). J’espère que ce billet vous donnera des idées. N’hésitez pas à les partager ensuite !
Références
[1] http://www.cisco.com [2] http://www.juniper.net [3] http://www.openvpn.net/index.php/open-source/overview.html [4] http://www.soekris.com/net4801.htm [5] http://sourceforge.net/apps/trac/ipcop/wiki
2 Comments
Très bon article. Je connaissais la techno mais une piqure de rappel ne fait jamais de mal. Ça doit être super sympa de pouvoir se connecter sur son ordi à distance 😉
Un article bien complet oui ! J’ajouterais que j’utilise le VPN tous les jours pour lire mes courriels, et part moment pour me connecter via des outils de prise de contrôle à distance comme VNC ouvert uniquement sur les ips du VPN !
Et comme il existe des outils pour se connecter à OpenVPN, et VNC sur Android, c’est possible de partout 🙂