Changes between Initial Version and Version 1 of Realisations/2006-2007/Projet/ServiceVPN


Ignore:
Timestamp:
Mar 14, 2007, 9:29:54 AM (18 years ago)
Author:
legoff
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Realisations/2006-2007/Projet/ServiceVPN

    v1 v1  
     1== Service VPN ==
     2
     3Le service de réseau privé virtuel (VPN - Virtual Private Network) OpenVPN est proposé par [wiki:Groupe1Core2 Groupe 3]. Il permet à toute personne authentifiée par un certificat précédemment signé de pouvoir accéder à notre réseau, à condition de pouvoir établir un tunnel entre sa machine et le port 1194 de la gate VPN. La signature doit être réalisé par un membre du groupe 3.
     4
     5Ce service est proposé dans un AS virtuel, l'AS 20 (associé au préfixe 10.70.0.0/16). Cet AS est client de l'AS 65003, et est annoncé sur le reste du réseau par cet AS.
     6
     7De l'extérieur et depuis la gate-net, Il est accessible via la machine humulus.core2 (10.30.253.1).
     8
     9== Topologie ==
     10
     11L'intégration du réseau du VPN dans l'AS 3 est détaillé sur le schéma suivant :
     12
     13[[Image(integration_vpn.png)]]
     14
     15On distingue le serveur OpenVPN, connecté au réseau de l'AS3 via l'IP 10.30.253.1 et les clients, dans le réseau 10.70.0.0/16 qui peuvent rejoindre tout le reste du réseau visible par le routeur 2 de l'AS 3.
     16
     17== Mise en oeuvre d'un client ==
     18
     19Avant de commencer cette section, je tiens à préciser que toutes les informations relatives à la configuration d'OpenVPN proviennent de cette page : [http://www.section6.net/wiki/index.php/Setting_up_Routed_OpenVPN_in_FreeBSD Setting up Routed OpenVPN in FreeBSD].
     20
     21=== Fichiers utiles ===
     22
     23  * openvpn.conf (pour le client) [attachement:openvpn.conf]
     24  * Clé de l'autorité de certification (cakey.pm dans le fichier ci-dessus) [attachement:cakey.pem]
     25
     26Attention, le fichier de configuration suppose que vous disposez d'un utilisateur non privilégié nobody, dans le groupe nobody. Si ces derniers n'existent pas (vérifier dans /etc/passwd pour l'utilisateur et /etc/group pour le groupe), il faut les remplacer par un utilisateur et ou groupe existant (ou les créer sur le système) :)
     27
     28=== Génération de la requête de certificat ===
     29
     30  * Documentation : man 1 req
     31  * Particularité : clé privée de 2048 bits
     32
     33{{{
     34openssl req -newkey rsa:2048 -nodes -new -keyout client_asX_numeroN.key -out client_asX_numeroN.csr
     35}}}
     36
     37Attention à bien remplir tous les champs (et particulièrement la section "Common Name (eg, YOUR name)" avec le nom de votre machine, il doit être unique sinon ça posera des problèmes au moment de la signature par le CA).
     38
     39Cette commande génère donc une clé privée RSA de 2048 bits (.key) et la clé publique RSA liée (.csr). Vous ne devez communiquer votre clé privée à personne (.key) (ni même votre binôme) car elle vous authentifie sur le VPN.
     40
     41=== Signature par le CA ===
     42
     43  * Documentation : man 1 ca
     44
     45Cette partie ne concerne que les mainteneur du service VPN. Vous pouvez (Florian) me mailler votre certificat pour que je le signe avec le CA utilisé dans notre serveur OpenVPN.
     46
     47{{{
     48openssl ca -out client_asX_numeroN.crt -in client_asX_numeroN.csr -policy policy_anything
     49}}}
     50
     51Cette commande génère le .crt que vous devrez utiliser dans votre client OpenVPN. Il s'agit en fait de votre clé publique (qui était contenue dans le .csr) plus la signature du CA.
     52
     53
     54=== Connexion au démon OpenVPN ===
     55
     56Cette partie est un peu acrobatique... mais je n'ai pas trouvé plus simple.
     57
     58  * Il faut donc tout d'abord installer un client OpenVPN (il y en a [[http://www.google.com/search?q=openvpn%20clients|plein sur le net]]) pour votre système, puis créer le fichier cakey.pem avec le contenu listé ci-dessus, et adapter le fichier de configuration à votre système.
     59
     60  * Deuxième étape: ouvrir une connexion directe entre le serveur OpenVPN et votre machine. Une manière de le faire est de se connecter sur la machine gate-net (via le firewall du laboratoire), dans un premier temps, puis créer un tunnel via un Port Forwarding de ssh, pour relier une machine votre vers celle du laboratoire.
     61
     62Exemple, en supposant qu'il y a une machine chez vous '81.56.26.3x' avec un serveur ssh écoutant sur le port '22', et sur laquelle vous pouvez vous connecter avec l'utilisateur 'florian' :
     63
     64{{{
     65 gate-net$ ssh -u florian -p22 -R1194:10.30.253.1:1194 81.56.26.3x
     66}}}
     67
     68Cela permet de créer un tunnel reliant le port TCP 1194 de la machine distance vers celui de la machine locale '10.30.253.1'.
     69
     70Si vous ne savez pas comment vous connecter sur le port 22 de votre machine personnelle, consultez la documentation de votre routeur ou de votre modem pour créer un port forwarding (le but étant de forwarder le port 22 de votre interface WAN vers le port 22 de l'IP privée de votre machine côté NAT), ou placez votre machine dans la DMZ.
     71
     72  * Une fois connecté à votre machine locale, vérifiez le bon fonctionnement en tentant un "telnet localhost 1194" et en vérifiant que OpenVPN vous écrit quelques grossièretés. Si vous arrivez à vous y connecter, c'est gagné.
     73
     74  * Vous pouvez alors spécifier dans votre client OpenVPN le serveur "localhost" (si 81.56.26.3x était la machine que vous utilisez actuellement) et le port 1194. Une fois la connexion lancée, OpenVPN devrait pusher quelques routes dans votre table de routage.
     75
     76  * Validez le fonctionnement en tentant un ping 10.30.254.9.
     77
     78Vous pouvez également utiliser le modeste script shell suivant afin de rendre la tache un peu moins lourde - il existe 3 options:
     79  * skel qui crée un squelette(répertoire, clé publique du serveur, fichier de configuration standard, paire clé publique/privée)
     80  * cert qui crée une requête de certification (à soumettre à Florian)
     81  * connect (comportement par défaut) vous connecte au VPN selon les paramètres entrés dans les variables
     82Veillez à bien "personnaliser" les variables avant de lancer le script
     83
     84== Annonce d'origine ==
     85
     86{{{
     87Hello,
     88
     89Je viens de finir [15 minutes de configuration serveur, 4 minutes de
     90configuration client, 2h30 de prise de tête sur les certificats et
     91OpenSSL] de mettre en place un petit serveur OpenVPN sur notre réseau.
     92
     93A ce titre, j'ai créé un nouvel AS (AS20) et un nouveau préfixe
     94(10.70.0.0/16) qui vous est annoncé par notre AS (AS3) sur vos réseaux
     95par BGP (sinon, pensez à le défiltrer !).
     96
     97L'AS path doit se terminer par 3 20 i car nous le routons.
     98
     99Côté plate-forme, ça débouche sur 10.70.0.1, pensez à vérifier que vous
     100pouvez joindre cette interface. Côté monde le démon écoute sur l'IP
     10110.30.253.1 (accessible depuis la gate) et sur le port 1194.
     102
     103=> Ca veut dire que vous pouvez vous y connecter presque directement.
     104Par exemple, un simple forwarding de ports depuis gate-net vers une
     105machine chez vous.
     106
     107    ssh -v -R1194:10.30.253.1:1194 madflo@rutabaga.poxx.net
     108
     109(?) Ca connecte directement le port de la machine 1194 de la machine sur
     110laquelle vous vous connectez vers le port 1194 de l'IP 10.30.253.1.
     111
     112=> Puis de configurer un openvpn avec en particulier les options
     113suivantes [1]
     114
     115    "client
     116    dev tun
     117    proto tcp
     118    remote localhost 1194"
     119
     120Je vous ai mis mon client.key + la clef du CA utilisé en pièce jointe.
     121
     122/!\ Mais attention Il faut également que vous génériez un certificat
     123(2048 bits) et que vous me l'envoyez pour que je signe avec mon CA.
     124Référence [2], mais seulement la partie certificat. J'ai déjà un CA de
     125mon côté (cf pièce jointe cakey.pem).
     126
     127Pensez bien à générer un certificat de _2048_ bits.
     128
     129[1] :
     130http://www.section6.net/wiki/index.php/Setting_up_Routed_OpenVPN_in_FreeBSD##A_sample_client.conf_.28for_FreeBSD_or_Linux.29
     131[2] :
     132http://www.section6.net/wiki/index.php/Basics_of_using_OpenSSL#Making_a_new_Certificate
     133
     134A titre d'information, il y a un client Windows très bien, suffit de
     135chercher un peu sur Google.
     136
     137Au niveau du software, sur la machine, j'ai utilisé OpenVPN comme
     138serveur (sur FreeBSD), chez moi, OpenVPN des Macports (sous
     139MacOSX/Darwin). Pour l'AS 20, c'est annoncé par un OpenBGPd sur FreeBSD.
     140
     141Petit aperçu sexy (depuis ma machine chez moi, comme si j'étais en
     142local... pratique pour utiliser les interfaces web) :
     143
     144-------o<----------------------------o<------------
     145
     146* Ma table de routage à la maison, avec les préfixes de la plateforme :
     147
     148humuluslupulus ~ $ netstat -nr | grep '/16'
     14910.10/16           10.70.0.5          UGSc        0        0   tun0
     15010.20/16           10.70.0.5          UGSc        0        0   tun0
     15110.30/16           10.70.0.5          UGSc        0        0   tun0
     15210.40/16           10.70.0.5          UGSc        0        0   tun0
     153
     154* Mes paquets se baladent joyeusement entre nos routeurs :
     155
     156humuluslupulus ~ $ traceroute -I 10.20.1.2
     157traceroute to 10.20.1.2 (10.20.1.2), 64 hops max, 60 byte packets
     158 1  10.70.0.1 (10.70.0.1)  14.232 ms  13.797 ms  13.741 ms
     159 2  10.30.253.10 (10.30.253.10)  23.717 ms  18.503 ms  20.171 ms
     160 3  10.30.254.2 (10.30.254.2)  15.119 ms  14.645 ms  15.332 ms
     161 4  10.20.1.2 (10.20.1.2)  15.923 ms  14.444 ms  15.170 ms
     162
     163* J'accède même aux services web :
     164
     165humuluslupulus ~ $ telnet 10.30.253.11 80
     166Trying 10.30.253.11...
     167Connected to 10.30.253.11.
     168Escape character is '^]'.
     169GET / HTTP/1.0
     170
     171HTTP/1.0 302 Found
     172
     173-------o<----------------------------o<------------
     174
     175J'aime \o/
     176
     177--
     178Florian Le Goff
     179}}}