Service VPN
Le service de réseau privé virtuel (VPN - Virtual Private Network) OpenVPN est proposé par 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.
Ce 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.
De l'extérieur et depuis la gate-net, Il est accessible via la machine humulus.core2 (10.30.253.1).
Topologie
L'intégration du réseau du VPN dans l'AS 3 est détaillé sur le schéma suivant :
On 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.
Mise en oeuvre d'un client
Avant de commencer cette section, je tiens à préciser que toutes les informations relatives à la configuration d'OpenVPN proviennent de cette page : Setting up Routed OpenVPN in FreeBSD.
Fichiers utiles
- openvpn.conf (pour le client) openvpn.conf
- Clé de l'autorité de certification (cakey.pm dans le fichier ci-dessus) cakey.pem
Attention, 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) :)
Génération de la requête de certificat
- Documentation : man 1 req
- Particularité : clé privée de 2048 bits
openssl req -newkey rsa:2048 -nodes -new -keyout client_asX_numeroN.key -out client_asX_numeroN.csr
Attention à 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).
Cette 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.
Signature par le CA
- Documentation : man 1 ca
Cette 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.
openssl ca -out client_asX_numeroN.crt -in client_asX_numeroN.csr -policy policy_anything
Cette 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.
Connexion au démon OpenVPN
Cette partie est un peu acrobatique... mais je n'ai pas trouvé plus simple.
- Il faut donc tout d'abord installer un client OpenVPN (il y en a 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.
- 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.
Exemple, 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' :
gate-net$ ssh -u florian -p22 -R1194:10.30.253.1:1194 81.56.26.3x
Cela 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'.
Si 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.
- 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é.
- 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.
- Validez le fonctionnement en tentant un ping 10.30.254.9.
Vous pouvez également utiliser le modeste script shell suivant afin de rendre la tache un peu moins lourde - il existe 3 options:
- skel qui crée un squelette(répertoire, clé publique du serveur, fichier de configuration standard, paire clé publique/privée)
- cert qui crée une requête de certification (à soumettre à Florian)
- connect (comportement par défaut) vous connecte au VPN selon les paramètres entrés dans les variables
Veillez à bien "personnaliser" les variables avant de lancer le script
Annonce d'origine
Hello, Je viens de finir [15 minutes de configuration serveur, 4 minutes de configuration client, 2h30 de prise de tête sur les certificats et OpenSSL] de mettre en place un petit serveur OpenVPN sur notre réseau. A ce titre, j'ai créé un nouvel AS (AS20) et un nouveau préfixe (10.70.0.0/16) qui vous est annoncé par notre AS (AS3) sur vos réseaux par BGP (sinon, pensez à le défiltrer !). L'AS path doit se terminer par 3 20 i car nous le routons. Côté plate-forme, ça débouche sur 10.70.0.1, pensez à vérifier que vous pouvez joindre cette interface. Côté monde le démon écoute sur l'IP 10.30.253.1 (accessible depuis la gate) et sur le port 1194. => Ca veut dire que vous pouvez vous y connecter presque directement. Par exemple, un simple forwarding de ports depuis gate-net vers une machine chez vous. ssh -v -R1194:10.30.253.1:1194 madflo@rutabaga.poxx.net (?) Ca connecte directement le port de la machine 1194 de la machine sur laquelle vous vous connectez vers le port 1194 de l'IP 10.30.253.1. => Puis de configurer un openvpn avec en particulier les options suivantes [1] "client dev tun proto tcp remote localhost 1194" Je vous ai mis mon client.key + la clef du CA utilisé en pièce jointe. /!\ Mais attention Il faut également que vous génériez un certificat (2048 bits) et que vous me l'envoyez pour que je signe avec mon CA. Référence [2], mais seulement la partie certificat. J'ai déjà un CA de mon côté (cf pièce jointe cakey.pem). Pensez bien à générer un certificat de _2048_ bits. [1] : http://www.section6.net/wiki/index.php/Setting_up_Routed_OpenVPN_in_FreeBSD##A_sample_client.conf_.28for_FreeBSD_or_Linux.29 [2] : http://www.section6.net/wiki/index.php/Basics_of_using_OpenSSL#Making_a_new_Certificate A titre d'information, il y a un client Windows très bien, suffit de chercher un peu sur Google. Au niveau du software, sur la machine, j'ai utilisé OpenVPN comme serveur (sur FreeBSD), chez moi, OpenVPN des Macports (sous MacOSX/Darwin). Pour l'AS 20, c'est annoncé par un OpenBGPd sur FreeBSD. Petit aperçu sexy (depuis ma machine chez moi, comme si j'étais en local... pratique pour utiliser les interfaces web) : -------o<----------------------------o<------------ * Ma table de routage à la maison, avec les préfixes de la plateforme : humuluslupulus ~ $ netstat -nr | grep '/16' 10.10/16 10.70.0.5 UGSc 0 0 tun0 10.20/16 10.70.0.5 UGSc 0 0 tun0 10.30/16 10.70.0.5 UGSc 0 0 tun0 10.40/16 10.70.0.5 UGSc 0 0 tun0 * Mes paquets se baladent joyeusement entre nos routeurs : humuluslupulus ~ $ traceroute -I 10.20.1.2 traceroute to 10.20.1.2 (10.20.1.2), 64 hops max, 60 byte packets 1 10.70.0.1 (10.70.0.1) 14.232 ms 13.797 ms 13.741 ms 2 10.30.253.10 (10.30.253.10) 23.717 ms 18.503 ms 20.171 ms 3 10.30.254.2 (10.30.254.2) 15.119 ms 14.645 ms 15.332 ms 4 10.20.1.2 (10.20.1.2) 15.923 ms 14.444 ms 15.170 ms * J'accède même aux services web : humuluslupulus ~ $ telnet 10.30.253.11 80 Trying 10.30.253.11... Connected to 10.30.253.11. Escape character is '^]'. GET / HTTP/1.0 HTTP/1.0 302 Found -------o<----------------------------o<------------ J'aime \o/ -- Florian Le Goff
Attachments (3)
- cakey.pem (1.7 KB) - added by legoff 18 years ago.
- openvpn.conf (205 bytes) - added by legoff 18 years ago.
- integration_vpn.png (119.0 KB) - added by legoff 18 years ago.
Download all attachments as: .zip