Installer openVPN sur un Raspberry Pi (Debian Wheezy)

openvpn logo

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 tun

ca ca.crt
cert myvpn.crt
key myvpn.key
dh dh1024.pem
tls-auth ta.key 0
cipher AES-256-CBC

server 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 120

user 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 :

openvpn conf

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-CBC

ca 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à.

About Alexandre Nogard

Check Also

Owncloud 9.X : Sécurisez votre serveur avec Fail2Ban sur Centos 7.X – Part3

Dans ce tuto, nous allons voir comment protéger Owncloud 9.X des brutes-forces sur les tentatives …

OpenVAS : Configuration & Utilisation sur CentOs 7 – Part 2

OpenVAS est installé sur notre CentOs 7, nous allons maintenant aborder la partie configuration et …

Fortigate Fortinet

Fortinet : Redistribution de static routes au travers de l’OSPF

  Vos différents sites interconnectés, vous voudrez peut être propager des routes statics au travers …

31 comments

  1. Un grand merci pour ce tuto … Je suis impatient de lire la suite pour connecter mon android sur l’openvpn .. ;-)

  2. 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

  3. 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 “)”)

  4. 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 ^^

  5. “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 :)

  6. 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.

  7. Tu peux faire un “sudo su” avant de taper ta commande, ça fonctionnera.

  8. 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 ?

  9. 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.

  10. Un tres bon tuto sur openvpn sur raspberry pi !
    Merci beaucoup

  11. 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

  12. 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.

  13. 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.

  14. 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

  15. 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

  16. 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

  17. 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

  18. salut
    si tu pouvais nous aidé stp
    cordialement

  19. salut
    c encore moi j’aimerai vraiment testé ton tutos mais y faudrait un peu d’aide

    stp

  20. 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

  21. bon je bloque des le départ a la suite des tutos

  22. 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 !

Leave a Reply

Your email address will not be published. Required fields are marked *