J’ai fait acquisition d’un Raspberry Pi la semaine passée, je me suis donc mis dans l’idée de mettre un VPN en place sur mon RPI pour surfer en toute tranquillité dans des lieux publics :). Je me suis donc essayé à OpenVPN, qui est un outils open-source. Il s’appuie sur la librairie openSSL, la clé privée est partagé entre les pairs, il offre un bon niveau de sécurité, et le client est disponible sur une multitude de plateformes. Voici la marche à suivre pour installer OpenVPN sur un Raspberry PI (sur Debian Wheezy).
Installer OpenVPN
Nous installerons OpenVPN à partir des sources, en version 2.3.0 (puisque la version disponible pour debian Wheezy est 2.2.1).
Téléchargez openvpn et décompressez le :
# wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.0.tar.gz
# tar xvzf openvpn-2.3.0.tar.gz
# cd openvpn-2.3.0
On télécharge les dépendances :
# apt-get install libpam0g-dev git
# apt-get install liblzo2-dev
On passe à l’installation d’openvpn :
# ./configure
# make
# make install
On télécharge “easy-rsa”, plus disponible de base dans openvpn 2.3 :
# cd /root
# git clone https://github.com/OpenVPN/easy-rsa
On crée notre dossier openvpn :
# mkdir /etc/openvpn
On copie les fichiers nécessaires à la génération de nos jeux de clés, puis renommons le dossier :
# cp -r /root/easy-rsa/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
# cd /etc/openvpn/
Configuration d’OpenVPN
Nous modifions notre fichier vars qui nous permettra de gagner du temps dans la génération de nos clés :
# cd easy-rsa
# vi vars// On modifie notre fichier avec nos paramètres :
# These are the default values for fields
# which will be placed in the certificate.
# Don’t leave any of these fields blank.
export KEY_COUNTRY=”FR”
export KEY_PROVINCE=”NPDC”
export KEY_CITY=”Lille”
export KEY_ORG=”Alexnogard”
export KEY_EMAIL=”alexnogard@alexnogard.com”
On nettoie notre dossier, puis générons de nouveaux jeux de clés :
# source ./vars
# ./clean-all# ./build-dh // il y en a pour au moins 15-20 minutes
# ./pkitool –initca
# ./pkitool –server server
# openvpn –genkey –secret keys/ta.key
# cp keys/ca.crt keys/ta.key keys/myvpn.crt keys/myvpn.key keys/dh1024.pem /etc/openvpn/
Nous retournons dans notre dossier /etc/openvpn puis créons notre fichier de configuration :
# cd /etc/openvpn
# mkdir /etc/openvpn/jail
# mkdir /etc/openvpn/clientconf
# vi myvpn.conf// on y insère :
mode server
proto tcp
port 443
dev tunca ca.crt
cert myvpn.crt
key myvpn.key
dh dh1024.pem
tls-auth ta.key 0
cipher AES-256-CBCserver 10.8.0.0 255.255.255.0
push “redirect-gateway def1 bypass-dhcp”
push “dhcp-option DNS 8.8.8.8”
push “dhcp-option DNS 8.8.4.4”
keepalive 10 120user nobody
group nogroup
chroot /etc/openvpn/jail
persist-key
persist-tun
comp-lzo
verb 3
mute 20
status openvpn-status.log
log-append /var/log/openvpn.log
Pour valider la bonne création de notre fichier de configuration ainsi que de nos clés, nous lançons la commande suivante :
# openvpn myvpn.conf
vous devriez avoir un résultat comme ceci :
Une fois ceci fait, il nous faut mettre en place l’ip forwarding et créer une règle iptables :
# sh -c ‘echo 1 > /proc/sys/net/ipv4/ip_forward’
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# sh -c “iptables-save > /etc/iptables.rules”
On modifie maintenant l’ip_forward dans le fichier /etc/sysctl.conf :
# vi /etc/sysctl.conf
// dé-commenter la ligne suivante :
net.ipv4.ip_forward = 1
Puis /etc/network/interfaces :
# vi /etc/network/interfaces
// Ajouter la ligne ci-dessous après ” iface eth0 inet dhcp” :
pre-up iptables-restore < /etc/iptables.rules
On recharge notre interface ainsi que sysctl :
# sysctl -p
# /etc/init.d/networking reload
OpenVPN est maintenant installé sur votre Raspberry PI, en version 2.3.0. Pour pouvoir l’utiliser, il nous faut maintenant créer nos utilisateurs ainsi que leurs certificats.
Création de clients
Chaque client à besoin d’un certificat pour fonctionner avec OpenVPN.
D’un côté nous aurons la clé côté client, de l’autre le certificat côte server.
Nous allons créer un certificat pour notre téléphone Android ;) :
# cd /etc/openvpn/easy-rsa
# source vars
# ./build-key androalexnogard
Nous exportons nos 3 fichiers créés a l’aide de la commande build-key :
# mkdir /etc/openvpn/easy-rsa/androalexnogard
# cp /etc/openvpn/ca.crt /etc/openvpn/ta.key /etc/openvpn/keys/androalexnogard.key /etc/openvpn/keys/androalexnogard.crt /etc/openvpn/clientconf/androalexnogard/
Puis créons un fichier de configuration qui sera chargé par le client OpenVPN. Vous pouvez soit nommer l’extension en : *.conf pour les clients sur Linux / Mac ou *.ovpn pour Windows / Android.
# vim /etc/openvpn/clientconf/androalexnogard/myconf.ovpn
// on y insére les lignes suivantes :
client
dev tun
proto tcp-client
remote 0.0.0.0 443 // votre IP Publique ici
resolv-retry infinite
cipher AES-256-CBCca ca.crt
cert androalexnogard.crt
key androalexnogard.key
tls-auth ta.key 1
nobind
persist-key
persist-tun
comp-lzo
verb 3
Il ne vous reste plus qu’à récupérer ces fichiers de configuration et de les insérer dans votre client OpenVPN !
Pour savoir comment utiliser OpenVPN sur Android, cliquez juste ;).
Si vous avez aimé cet article, n’hésitez pas à partager avec les boutons ci-dessous, et pour toute question / remarque, les commentaires sont là.
Un grand merci pour ce tuto … Je suis impatient de lire la suite pour connecter mon android sur l’openvpn .. ;-)
Hello,
Merci à toi,
Ca va arriver en cours de semaine ;)
Cordialement,
Alexandre Nogard
J’ai deux petites questions vis-à-vis de ce tuto :
– Pourquoi utiliser le port 443/TCP en lieu et place de 1194/UDP (port “OpenVPN”) ?
– Je ne vois pas bien l’intérêt d’utiliser du NAT.. (sachant que le client aura une IP dans le subnet 10.8.0.0/24 et que le forwarding est activé.. On peut donc router 10.8.0.0 LAN). Pourrais-tu m’en dire plus ?
Merci !
Hello,
Le port 443 a été choisit puisqu’il est disponible à partir de presque n importe où (Hotspot, travail ..).
Quant à ta seconde question, pourrais tu préciser ta question, je pense avoir compris mais je n’ai pas envie de te dire n’importe quoi :D.
Cordialement,
Alexandre Nogard
pi@raspberrypi ~ $ sudo wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.0.tar.gz
/usr/bin/wget: 1: /usr/bin/wget: Syntax error: word unexpected (expecting “)”)
C’est un problème de package Wget, supprimez le et retéléchargez le
Bonsoir,
Ce tutorial est vraiment sympa et bien fait.
Cependant, voici quelques amélioration possible après l’avoir suivit :
1) Avec mon RaspberryPi Version B J’ai du installer “libssl-dev” qui n’était pas présent par défaut et nécessaire pour l’étape “./configure” (et qui est logique d’avoir pour compiler OpenVPN ;) ).
2) Ce n’est pas “./make” mais simplement “make”
3) Pareil que pour make, ce n’est pas “./make install” mais “make install”
4) git n’est pas installé par défaut, il faut encore l’installer avec apt-get install git
5) la création de dossier ne se fait pas avec cd /etc/openvpn, il faut créer le dossier avant d’y accèder avec “mkdir /etc/openvpn”
6) idem pour le dossier “/etc/openvpn/easy-rsa”, la copie ne fonctionne pas si on ne crée par le dossier auparavant
Je n’ai pas encore fini, la génération prenant du temps et vu l’heure je vais laisser tourner pendant la nuit.
Je ne sais pas pour quel public s’adresse ce tutoriel, mais je pense que ces quelques précisions ne peuvent pas faire de mal ;)
Je rajouterais plus tard d’autres suggestions s’il me semble que cela peut aider ;)
Merci en tout cas pour ce travail, un très bon tutoriel et à jour, ça change des éternels vieux tutoriels que je retrouve depuis des années ^^
C’est ce qu’il se passe quand on veut aller trop vite :).
Imprécisions corrigées, merci
“Je ne vois pas bien l’intérêt d’utiliser du NAT.. (sachant que le client aura une IP dans le subnet 10.8.0.0/24 et que le forwarding est activé.. On peut donc router 10.8.0.0 vers le LAN). Pourrais-tu m’en dire plus ?”
Visiblement le client VPN recevra une IP dans le subnet 10.8.0.0/24
Sur le Raspberry, on active l’IP forwarding : Il sera donc en mesure de router entre le subnet VPN (10.8.0.0/24) et le subnet LAN (192.168.1.0/24 par exemple).
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Si je comprends bien cette règle, tout le traffic venant de 10.8.0.0/24 (réseau VPN) est “Natté” avec pour @ IP source l’adresse de eth0 (donc une IP du LAN, par exemple 192.168.1.2).
N’est-il pas plus judicieux de simplement activer le routing, sans faire de NAT ? (ça permettrait de faire la distinction entre les utilisateurs du réseau virtuels et ceux du réseau physique, pour du filtrage par exemple)
Merci :)
Gsecurity, merci pour tes précieux conseils! Je suis plus ou moins resté bloqué sur chacun des points que tu as corrigé! Grâce à toi j’ai pu avancer.
Pour l’instant, je suis néanmoins toujours bloqué à cd /root. Il indique “Permission Denied”. Même en lançant sudo au préalable cela ne fonctionne pas…
Ne puis-je pas télécharger easy-rsa ailleurs que dans /root ? Puisque de toute manière c’est pour le déplacer ensuite… ?
Merci.
Tu peux faire un “sudo su” avant de taper ta commande, ça fonctionnera.
Merci pour ce tuto et Gsecurity pour ces précisions.
Une question pour finir ce tuto :
Comment fait on pour lancer cela de manière automatique maintenant ?
Merci pour ce tuto qui fonctionne à merveille.
Question : dans le fichier /var/log/openvpn.log j’ai 2 heures de différences avec l’heure système du RaspBerry ce qui n’est pas le cas dans le fichier /var/log/auth.log
Exemple : dans le fichier log 12:01:43 et l’heure système est 14:01:43
Une idée ?
Du coup fail2ban ne bloque pas d’ip sur openvpn alors qu’il le fait très bien sur ssh.
Un tres bon tuto sur openvpn sur raspberry pi !
Merci beaucoup
merci pour le tuto.
“# ./configure” me renvoie l’erreur “configure: error: ssl is required but missing”
après avoir chercher sur le net, j’ai trouvé cette solution:
apt-get install libssl-dev
http://stackoverflow.com/questions/13015706/mint-13-openvpn-ipv6-patch
voilà, en esperant avoir fait avancer le schmilblick
salut
/root/easy-rsa/easy-rsa/2.0/ n’existe plus dans dans la version clonée.
mais un dossier nommé easyrsa3 existe et c’est celui-ci que j’ai copié.
est-ce une erreur?
merci de votre réponse
bon, a priori le tuto que vous avez ecrit ne s’applique pas à la nouvelle version de easyrsa.
je vais faire des recherches et voir si je ne trouve pas des solutions sur le net.
je les posterai alors ici.
mais si vous avez des idées dans l’immédiat, je suis preneur! ;-)
bon alors, au final, j’ai pas trouvé donc, j’ai pris une release 2.2.2
tout a marché jusqu’à
# cp keys/ca.crt keys/ta.key keys/myvpn.crt keys/myvpn.key keys/dh1024.pem /etc/openvpn/
pas de fichier “keys/myvpn.crt keys/myvpn.key keys/dh1024.pem” mais “keys/server.crt keys/server.key keys/dh2048.pem”.
donc j’ai pris ceux-la et est modifié le .conf en conséquence.
mais quand je le lance, rien ne se passe. T-T
toute aide est la bienvenue.
A priori c’est bien ces clés qu’il faut utiliser, vu qu’on les a générées sous le nom de server et non myvpn.
Merci pour ce tuto qui part d’une très bonne intention mais malheureusement tout est trop brouillon au point que rien ne fonctionne.
Dommage on perd juste son temps en suivant des indications qui se terminent en voie de garage.
salut a tous
c’est vraiment sympa d’avoir fait ce tutos merci encore.
mais le souci c’est qu’il y a bcp d’erreur et pas bcp de rectification c dommage.
je suis novice je debute a peine dans l’informatique est en l’occurence sur le Raspberry Pi
je n’ai pas la prétention de te faire des leçon mais c’est la galère il faut regarder les commentaire pour essayer d’y arrivé et malgré tout je bloque, comme quand tu marque qu’il faut nettoyer le dossier comment on fait ? j’ai beau chercher sur le dos de mon “ami” google. pas moyen .
s’il te plait aide nous ou moi du moins ( lol)
en tout c’est super sympa qu’il y est des gens comme toi et vive le web libre
Bonjour,
Pourriez-vous me dire à quelles étapes vous bloquez précisément ?
Le dossier est nettoyé par les commandes décrites en dessous :
# source ./vars
# ./clean-all
Cordialement,
salut et merci bcp
j’ai refait le tutos et je bloque encore au niveau
# cp -r /root/easy-rsa/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
cp: impossible d’évaluer <>: aucun fichier ou dossier de ce type
si tu pouvais m’aidé stp
salut
j’ai essayé de créer un fichier
/easy-rsa/easy-rsa/2.0/*
mais rien n’y fait donc vu que j’ai NOOBS ‘ce que je suis lol) j’ai reinstallé raspian et j’attend ton aide pour reprendre le tutos et desolé de mes réponse tardive j’ai essayé un autre tutos et je galère aussi don je suis revenu vers toi merci de ta patience
cordialement
Bonjour,
J’ai moi aussi un problème au même niveau que R50.
En fait sur la source il n’y a pas de 2.0 :/
Cordialement
salut
si tu pouvais nous aidé stp
cordialement
salut
c encore moi j’aimerai vraiment testé ton tutos mais y faudrait un peu d’aide
stp
salut tous le monde
vu qu’il n’y a pas d’aide j’ai trouvé sa je teste et je vous dis si sa marche
https://freedom-ip.com/forum/viewtopic.php?pid=29193
bon je bloque des le départ a la suite des tutos
Bonjour, merci pour ces tutos. J’avais suivi celui-ci sur openvpn et il marchait bien. Mais voilà, une mise à jour de easy-rsa qui passe en 3.0 [3.0.0-rc1 (2013/12/01) The 3.x release is a nearly complete re-write of the 2.x codebase] et cela change pas mal de choses. Et j’avoue ne pas oser m’y lancer un peu à l’aveuglette,.. Peut-être un coup d’oeil
https://github.com/OpenVPN/easy-rsa/commit/b0494ab24391d1e12ce376d461d2bb511fa3b035
D’avance merci !