installer un VPN avec Yunohost et OpenVPN sous Debian

Un mémo sur comment installer un VPN avec Yunohost et OpenVPN sous Debian 8 Jessie.

Cet article décrit étapes par étapes l’installation et la configuration d’un serveur OpenVPN avec Yunohost sur un serveur VPS sous Debian Jessie.

Voici les caractéristiques du futur serveur OpenVPN :

  • tunnel chiffré en 2048 bit (rapide)
  • auth-nocache
  • cipher AES-256-CBC
  • auth SHA512
  • tls-version-min 1.2
  • tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
  • Signature HMAC
  • Clé DH en 4096 bits

Activer l’interface réseau TUN/TAP sur un VPS

  • La première étape consiste à vérifier/activer dans le panel d’administration l’interface réseau TUN/TAP :
  • vps-tun_tap

  • Ensuite, vérifier que le système d’exploitation du VPS prend en charge le module « tun » :
  • lsmod | grep tun

    Si aucune réponse, comme dans mon cas alors suivre les étapes suivantes sinon aller directement au chapitre « Installation de Yunohost ».

  • Charger le module tun :
  • modprobe tun
  • Redémarrer le VPS :
  • reboot

Installation de Yunohost

  • Mise à jour et installation des paquets git et dialog (si pas installés) :
  • apt update && apt upgrade
    apt install git dialog
    
  • Clone du script d’installation de Yunohost et installation :
  • git clone https://github.com/YunoHost/install_script /tmp/install_script
    cd /tmp/install_script && ./install_yunohost
    
  • Un message d’avertissement :
  • yunohost-01

  • Post installation de Yunohost :
    A la fin de l’installation de Yunohost, l’installateur propose directement de passer à l’étape de post-installation pour configurer le domaine par défaut et le compte administrateur.

    • Demande de confirmation pour exécuter de suite le script de post-install :
    • yunohost-02

    • Renseigner le domaine et le mot de passe administrateur pour Yunohost :
    • yunohost-03

Configuration de Yunohost pour préparer l’arrivée d’OpenVPN

  • Éditer le fichier /etc/hosts afin d’ajouter le futur FQDN associé à l’adresse public du VPS :
  • nano /etc/hosts
    1.2.3.4 vpn.domaine.tld

Pour la configuration du Yunohost, j’utilise ici la moulinette de Yunohost (L’inerface web d’administration est très simple à comprendre).

  • Ajout du sous domaine vpn.domaine.tld
  • yunohost domain add vpn.domaine.tld
  • Ajout d’un utilisateur
  • yunohost user create fred

    yunohost-user-create

Installation d’OpenVPn avec Yunohost

Attention : OpenVPN ne fait pas encore parti des applications officielles maintenues par Yunohost, suivre dans l’ordre les étapes suivantes :

  • Création d’un sous domaine chez votre registrar : vpn 8600 IN CNAME domaine.tld.
    nb : domaine.tld est le domaine du yunohost.

  • Ajout du sous domaine vpn.domaine.tld dans yunohost
  • yunohost domain add vpn.domaine.tld

    nb : Ne pas encore installer les certificats Let’s Encrypt !

  • Copier tous fichiers dans /etc/yunohost/certs/vpn.domain.tld vers /etc/yunohost/certs/vpn.domain.tld.Autosign :
  • cp -r /etc/yunohost/certs/vpn.domain.tld/ /etc/yunohost/certs/vpn.domain.tld.Autosign/
  • Installer le certificat Let’s Encrypt pour le sous domaine vpn.domaine.tld :
  • yunohost domain cert-install vpn.domane.tld
  • Installer OpenVPN :
  • yunohost app install https://github.com/YunoHost-Apps/openvpn_ynh

    nb : il est possible d’installer OpenVPN via l’interface web d’administration de Yunohost :

    nb2 : indiquer bien l’adresse IP public du serveur Yunohost, sinon le script d’installation n’aboutit pas.

  • Créer la clé Dilf Helmann en 4096 bits :
  • openssl dhparam -out /etc/yunohost/certs/vpn.domain.tld.Autosign/dh.pem 4096

    nb : changer vpn.domain.tld par le votre

  • Éditer le fichier de configuration du serveur OpenVPN :
    nano /etc/openvpn/yunohost.conf
    • Modifier comme suit :
    • ca /etc/yunohost/certs/vpn.domain.tld.Autosign/ca.pem
      cert /etc/yunohost/certs/vpn.domain.tld.Autosign/crt.pem
      key /etc/yunohost/certs/vpn.domain.tld.Autosign/key.pem
      dh /etc/yunohost/certs/vpn.domain.tld.Autosign/dh.pem
      

      nb : changer vpn.domain.tld par le votre

  • Modifier le fichier /etc/openvpn/handler.sh en commentant les lignes 36 à 39 et 42 :
  •     public_ip4=$(get_ip 3)
    #    if [ -n "$public_ip4" ]; then
    #        $SUDO iptables -t nat -A PREROUTING -d $public_ip4 -j DNAT --to-destination $private_ip4
    #        $SUDO iptables -t nat -A POSTROUTING -s ${private_ip4}/32 ! -d ${private_ip4}/32 -j SNAT --to-source $public_ip4
    #    else
            iface=$(ip r|awk '/default/ { print $5 }')
            $SUDO iptables -t nat -A POSTROUTING -s $private_ip4 -o "${iface}" -j MASQUERADE
    #    fi
    
    

    nb : je fais cette modification, car dans mon cas j’obtiens un problème de routage au niveau du NAT via iptables et le serveur n’est plus joignable.

  • Rendre ce script exécutable :
  • chmod +x /etc/openvpn/handler.sh
  • Redémarrer le serveur OpenVPN :
  • yunohost service stop openvpn
    yunohost service start openvpn
    
  • Ajouts droits rw pour other sur les log d’openvpn :
  • chmod 666 /var/log/openvpn/*.log

    Profiter du cache DNS de Yunohost pour la connetcion VPN

    A ce stade le VPN est fonctionnel mais les requêtes DNS passent encore par le fournisseur de la connexion Internet, si pas modifié par un perso comme Unbound par exemple.

    Par défaut, sur le serveur Yunohost la gestion DNS se fait via DNSMasq, mais ce dernier ne fait qu’office de cache DNS. L’équipe de Yunohost à quand même bien fait les choses, car ils ont choisi des serveur DNS neutres et ça c’est top !
    La liste des serveurs DNS configuré dans un Yunohost :

    cat /etc/resolv.dnsmasq.conf
    nameserver 91.239.100.100
    nameserver 85.214.20.141
    nameserver 89.233.43.71
    nameserver 89.234.186.18
    nameserver 84.200.69.80
    nameserver 141.255.128.101
    nameserver 141.255.128.100
    nameserver 213.73.91.35
    nameserver 89.234.141.66
    nameserver 80.67.188.188
    nameserver 80.67.169.12
    nameserver 80.67.169.40
    nameserver 84.200.70.40
    

    Donc l’idée dans cette partie de ce tutoriel est de configurer DNSmasq pour qu’il écoute aussi sur l’interface réseau du VPN et configurer le serveur VPN pour qu’il fournisse comme serveur DNS le Yunohost chez le client.

    Configuration de DNSmasq

  • Éditer le fichier de configuration /etc/dnsmasq.conf :
  • nano /etc/dnsmasq.conf
  • Ajouter :
  • listen-address=10.8.0.1
  • Redémarrer le service de DNSmasq :
  • systemctl restart dnsmasq

Configurer le serveur OPenVPN pour utiliser DNSmasq

  • Partie serveur :
    • Éditer le fichier de configuration du serveur OpenVPN :
    • nano /etc/openvpn/yunohost.conf
    • Dé commenter la ligne (supprimer le ; devant la ligne):
    • push "dhcp-option DNS 10.8.0.1"
    • Redémarrer le serveur OpenVPN :
    • yunohost service stop openvpn
      yunohost service start openvpn
  • Partie client :
    • Éditer le fichier client .ovpn :
    • nano /var/www/openvpn/vpn.domiane.tld.ovp
    • Ajouter :
    • dhcp-option DNS
      up /etc/openvpn/update-resolv-conf
      down /etc/openvpn/update-resolv-conf
      

      nb : sur le distribution GNU/Linux installer le paquet openvpn-update-resolv-conf

Test de connexion au serveur OpenVPN de Yunohost

  • Ouvrir un navigateur internet, saisir l’url de son serveur Yunohost et se connecter :
  • yunohost-panel-01

  • Cliquer sur le gros bouton carré « Op » :
  • yunohost-panel-02

  • Cliquer sur le troisième lien pour télécharger le fichier client d’OpenVPN :
  • yunohost-panel-03

  • Enregistrer le fichier client .ovpn
  • yunohost-panel-04

  • Se rendre dans le répertoire ou se trouve le fichier client et se connecter au serveur OpenVPN :
  • sudo openvpn vpn.domaine.tld.ovpn
  • Renseigner l’utilisateur et son mot de passe authoriser à se conencter au serveur OpenVPN :
  • Enter Auth Username: ****
    Enter Auth Password: ***********
    
  • Si tout c’est bien passé, le message suivant s’affiche tout à la fin : Initialization Sequence Completed
  • Vérifier la résoltion DNS :
  • drill @10.8.0.1 memo-linux.com

Ressource

10 Comments

  1. J’adore Yunohost, Je le mis sur mon serveur dédié. Maintenant je peu aussi profiter de OPENVPN. Merci.
    Si un se jour t’arrive faire un tuto pour faire cohabiter Yunohoste et EMBY (https://emby.media/), Tu ferras pleins de heureux. C’est un super mediacenter, sauf la gestion des port de yunohost fout le bazar. Donc impossible de l’utiliser les deux. Sauf si qq sais comment les configurer.

  2. Salut tonton79,
    je prend de plus en plus goût à Yunohost, c’est vraiment un produit sympa mais certains choix sont discutable comme DNSmasq ou des certificats limites… Après je me doute que ce n’est pas évident un tel projet et qu’il faut prendre des décisions…

    Concernant EMBY, je ne connaissais pas… je vais voir comment tourne ce soft :-)

  3. Hello,
    Merci pour le chouette tuto!
    En effet kload (l’actuel mainteneur de l’app, à moins de temps pour s’en occuper), je viens d’intégrer tes modifs dans openvpn_ynh via la pull-request là: https://github.com/YunoHost-Apps/openvpn_ynh/pull/18 (comme ça tout le monde peut bénéficier des modifs).

    Surtout n’hésite pas à soumettre des patchs/modifications! Thx!

  4. merci Fred
    voili voilou pourquoi openvpn ne se lançait pas sur mon client malgré l ensemble des parametres ok….
    …………pas de TUN lancer sur le vps…..
    un reboot aura suffit

  5. Bonjour,

    voulant utiliser openvpn sur mon serveur yunohost, je suis tombé sur votre tuto et j’aurai aimé avoir une précision.
    Une fois la commande « openssl dhparam -out /etc/yunohost/certs/vpn.domain.tld.Autosign/dh.pem 4096 » lancé, combien de temps faut-il pour qu’elle génère la clé ? cela va faire 24h qu’elle tourne et elle n’a pas fini.
    c’est pour vérifier que ça ne tourne pas dans le vide à cause d’une éventuel problème.

    cordialement,
    merci

  6. Bonjour ma’og,
    24h ça fait un peu long ! chez moi c’est environ 20 minutes
    A savoir : j’ai actualisé certaines actions pour être compatible avec la nouvelle version de Yunohost

  7. Bonjour Fred !

    Merci pour ce super tuto !
    Toujours heureux de lire tes articles, comme d’habitude.

    J’ai une question : l’appli OpenVPN pour yunohost semble être abandonnée ? Pas de mise a jour depuis plus d’un an.

    Des nouvelles ? Elle fonctionne toujours ?

    Merci beaucoup et bonne continuation

  8. Bonjour Damien,
    chez moi c’est toujours en production et ça fonctionne :)
    Je l’ai installé de nouveau sur une nouvelle instance de yunohost, faut faire un peu de débugage pour que ça fonctione… j’ai essayé ici de décrire les étapes pour que ça fonctionne du premier coup…

  9. Bonjour,

    Pour mon installation j’ai du en plus
    – installer pip
    – faire un « chmod go+w /var/log/openvpn »
    – ajouter
    « dhcp-option DNS
    up /etc/openvpn/update-resolv-conf
    down /etc/openvpn/update-resolv-conf »
    à « /var/www/openvpn/vpn.domiane.tld.conf » car j’utilise network-manager pour gérer mes connexions

    Mais sinon ça marche bien
    Merci pour ce tuto !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.