feigned

Installer et configurer un client OpenVPN sur un routeur OpenWrt

Le Crabe

  • 05/02/18 : ajout de détails concernant la mise à jour des DNS + ajout des logs.

Vous l’attendiez tous, le voici : le tutoriel pour installer un client OpenVPN sur un routeur équipé du firmware OpenWrt 🤩 ! L’objectif est de chiffrer la totalité des communications entre notre réseau local et Internet via un tunnel VPN sécurisé : nos activités sur Internet seront totalement masquées, notre anonymat respecté.

Auparavant, pour communiquer avec le serveur VPN de votre fournisseur (ExpressVPN, NordVPN, Trust.Zone…) vous deviez installer un client VPN sur chaque appareil de votre réseau local : sur vos PC Windows, sur vos téléphones Android… En installant un client VPN directement sur votre routeur, vous pouvez oublier cette corvée : le client OpenVPN du routeur va se charger de faire passer tout le trafic Internet de tous vos appareils dans le tunnel VPN sécurisé ! 👍 Plus besoin d’installer le programme de votre fournisseur de VPN (qui est un client OpenVPN personnalisé) sur chacun de vos équipements 😎

Vous êtes prêt ? C’est parti ! 🤘

Prérequis

  1. Un routeur (★ TP-Link Archer C7) sur lequel vous avez installé le firmware OpenWrt.
    Routeur TP-Link Archer C7
  2. Un abonnement (★ ExpressVPN) auprès d’un fournisseur de VPN, cf. les meilleurs VPN payants.

Étape 1 : préparer les fichiers de configuration .ovpn

Pour que le client OpenVPN de notre routeur puisse établir un tunnel sécurisé avec le serveur VPN de notre fournisseur, nous avons besoin des fichiers de configuration .ovpn du fournisseur, lesquels contiennent les paramètres nécessaires à la connexion au serveur VPN. Un fichier de configuration .ovpn est spécifique à une localisation. Vous trouverez donc un fichier .ovpn pour chaque localisation : Sweden.ovpn, Netherlands.ovpn…

L’objectif est de récupérer – auprès de votre fournisseur de VPN – les fichiers de configuration .ovpn des localisations qui vous intéressent (Sweden, Netherlands…) et d’y inclure les clés et certificats du fournisseur, généralement fournis séparément.

Quelles localisations choisir ?

L’objectif est de choisir les localisations où se trouvent les serveurs les plus rapides. D’une manière générale, ce sont les serveurs les plus proches géographiquement de vous. Pour connaitre les serveurs les plus rapides, vous pouvez vous aider des services fournis par votre fournisseur de VPN.

Par exemple, Private Internet Access propose une page Web « Speed up » qui référence toute son infrastructure (localisation, nombre de serveurs, bande passante) et qui permet d’effectuer un test de vitesse sur chacun de ses serveurs :

Mieux encore, le programme de bureau (Windows/macOS/Linux) fourni par ExpressVPN permet de tester la vitesse de connexion sur tous les serveurs disponibles et ce, en un clic.

Votre mission est simple : choisir au moins trois localisations parmi les plus rapides ! 😉

Après avoir choisi les localisations les plus rapides, téléchargez le fichier de configuration .ovpn de ces localisations depuis le site Web de votre fournisseur. A titre d’exemple, voici comment faire avec les fournisseurs ExpressVPN et Private Internet Access :

  • ExpressVPN :
    1. expressvpn.com > Mon compte > Installer ExpressVPN > Configuration manuelle.
    2. Copiez l’identifiant et le mot de passe de connexion.
    3. Téléchargez les fichiers de configuration .ovpn des localisations qui vous intéressent.
    4. Pas besoin de télécharger les clés et certificats, ils sont déjà intégrés dans les fichiers de configuration .ovpn.
  • Private Internet Access :
    1. privateinternetaccess.com > Téléchargements et assistance de membre > Guides Avancés D’utilisation OpenVPN SSL (en bas de la page).
    2. Cliquez sur Fichiers de configuration d’OpenVPN (par défaut recommandé) pour télécharger les fichiers de configuration de toutes les localisations disponibles et vos certificats.
    3. Décompressez l’archive openvpn.zip.
    4. Chez Private Internet Access, le certificat (CA) et la liste de révocation de certificats (CRL) ne sont pas inclus dans les fichiers .ovpn, ils sont disponibles dans des fichiers séparés (ca.crt et crl.pem). Nous allons donc copier le contenu des fichiers ca.crt et crl.pem dans les fichiers de configuration .ovpn :
      • Ouvrez le fichier de configuration .ovpn d’une des localisations qui vous intéresse, par exemple Sweden.ovpn (utilisez Notepad++ pour plus de confort).
      • Supprimez les lignes crl-verify (ligne 17) et ca (ligne 18).
      • Ouvrez le fichier ca.crt dans un nouvel onglet et copiez le contenu du fichier en appuyant successivement sur les touches Ctrl + A puis Ctrl + C.
      • Retournez sur le fichier Sweden.ovpn, ajoutez à la fin du fichier les balises <ca> et </ca> sur deux lignes et collez le contenu du fichier ca.crt.
      • Ouvrez le fichier crl.pem dans un nouvel onglet et copiez le contenu du fichier en appuyant successivement sur les touches Ctrl + A puis Ctrl + C.
      • Retournez sur le fichier Sweden.ovpn, ajoutez à la fin du fichier les balises <crl-verify> et </crl-verify> sur deux lignes et collez le contenu du fichier crl.pem.
      • Enregistrez le fichier Sweden.ovpn en appuyant sur les touches Ctrl + S. Votre fichier de configuration .ovpn est prêt !
      • Répétez les mêmes opérations pour les fichiers de configuration .ovpn des autres localisations qui vous intéressent.

Étape 2 : installer et configurer le client OpenVPN sous OpenWrt

Nous allons maintenant installer le client VPN sur notre routeur sous OpenWrt et le configurer avec les fichiers de configuration .ovpn que nous avons préparés à l’étape 1.

Installation des paquets

  1. Ouvrez Cmder.
  2. Connectez-vous en SSH à votre routeur :
    ssh [email protected]
  3. Installez les paquets nécessaires au fonctionnement d’OpenVPN :
    opkg update
    opkg install openvpn-openssl luci-app-openvpn
    opkg install libustream-openssl ca-bundle ca-certificates

Copie des fichiers de configuration .ovpn

  1. Ouvrez Cmder.
  2. Renommez vos fichiers de configuration .ovpn en respectant le format [fournisseur]_[localisation].ovpn, par exemple expressvpn_belgium.ovpn ou pia_netherlands.ovpn.
    cd /c/Users/LeCrabe/Downloads/expressvpn/
    mv my_expressvpn_belgium_udp.ovpn expressvpn_belgium.ovpn
    mv my_expressvpn_ireland_udp.ovpn expressvpn_ireland.ovpn
  3. Copiez les fichiers de configuration .ovpn vers votre routeur :
    scp LOCAL_PATH/*.ovpn [email protected]:/etc/openvpn/

    Remplacez LOCAL_PATH par le chemin d’accès de vos fichiers .ovpn, par exemple /c/Users/LeCrabe/Downloads/expressvpn/.

Connexion automatique aux serveurs VPN

  1. Ouvrez Cmder.
  2. Connectez-vous en SSH à votre routeur :
    ssh [email protected]
  3. Créez une variable VPN_PROVIDER et stockez-y le nom de votre fournisseur de VPN, par exemple expressvpn :
    VPN_PROVIDER=expressvpn
  4. Pour que la connexion au serveur VPN se fasse automatiquement, sans besoin de saisir à chaque fois notre identifiant et notre  mot de passe, nous allons stocker l’identifiant et le mot de passe de connexion dans un fichier .txt qui sera lu par les fichiers de configuration .ovpn.
    Pour ce faire, dans tous les fichiers de configuration .ovpn que nous avons transférés tout à l’heure, nous allons ajouter le paramètre auth-user-pass /etc/openvpn/${VPN_PROVIDER}_auth.conf avec la commande suivante :
    sed -i "/auth-user-pass/cauth-user-pass /etc/openvpn/${VPN_PROVIDER}_auth.txt" /etc/openvpn/${VPN_PROVIDER}_*.ovpn
    # Résultat :
    root@OpenWrt:~# tail -n +1 /etc/openvpn/*.ovpn | grep -E ".ovpn|auth-user-pass"
    ==> /etc/openvpn/expressvpn_belgium.ovpn <==
    auth-user-pass /etc/openvpn/expressvpn_auth.txt
    ==> /etc/openvpn/expressvpn_bosnia_and_herzegovina.ovpn <==
    auth-user-pass /etc/openvpn/expressvpn_auth.txt
  5. Créez le fichier /etc/openvpn/${VPN_PROVIDER}_auth.txt et inscrivez-y votre identifiant et votre mot de passe de connexion, fournis par votre fournisseur de VPN :
    touch /etc/openvpn/${VPN_PROVIDER}_auth.txt
    echo "YOUR_VPN_USER_NAME" > /etc/openvpn/${VPN_PROVIDER}_auth.txt
    echo "YOUR_VPN_PASSWORD" >> /etc/openvpn/${VPN_PROVIDER}_auth.txt
    chmod 400 /etc/openvpn/${VPN_PROVIDER}_auth.txt
    # Résultat :
    root@OpenWrt:~# cat /etc/openvpn/expressvpn_auth.txt
    YOUR_VPN_USER_NAME
    YOUR_VPN_PASSWORD

Création des instances OpenVPN

  1. Affichez vos fichiers de configuration .ovpn :
    ls -l /etc/openvpn/ | grep .ovpn
    -rw-r--r--    1 root     root          6120 Feb  3 15:40 expressvpn_belgium.ovpn
    -rw-r--r--    1 root     root          6133 Feb  3 15:40 expressvpn_bosnia_and_herzegovina.ovpn
    -rw-r--r--    1 root     root          6120 Feb  3 15:40 expressvpn_ireland.ovpn
    -rw-r--r--    1 root     root          6125 Feb  3 15:40 expressvpn_uk_berkshire.ovpn
  2. Nous allons créer une instance OpenVPN pour chaque localisation : il y a aura une instance pour se connecter au serveur VPN situé en Belgique, une autre pour l’Ireland… Pour ce faire, pour chaque localisation :
    1. Créez trois variables OPENVPN_LOCATION, VPN_PROVIDER et OPENVPN_INAME en spécifiant la localisation et le fournisseur, par exemple belgium et expressvpn (prenez garde à bien respecter l’orthographe) :
      OPENVPN_LOCATION=belgium
      VPN_PROVIDER=expressvpn
      OVPN_INAME="$VPN_PROVIDER"_"$OPENVPN_LOCATION"
    2. Créez une instance OpenVPN en spécifiant le fichier .ovpn de la localisation :
      uci set openvpn."$OVPN_INAME"=openvpn
      uci set openvpn."$OVPN_INAME".enabled='0'
      uci set openvpn."$OVPN_INAME".config=/etc/openvpn/"$OVPN_INAME".ovpn
      # Résultat :
      root@OpenWrt:~# uci show openvpn.expressvpn_belgium
      openvpn.expressvpn_belgium=openvpn
      openvpn.expressvpn_belgium.enabled='0'
      openvpn.expressvpn_belgium.config='/etc/openvpn/expressvpn_belgium.ovpn'

Mise à jour des DNS

  1. Pour utiliser les DNS de notre fournisseur de VPN, nous devons mettre à jour le fichier /tmp/resolv.conf.auto et y inscrire les DNS du fournisseur. Ce fichier est utilisé par le système pour savoir quels DNS utiliser pour résoudre les noms de domaine.
    Pour ce faire, nous aurons besoin de deux scripts : /etc/openvpn/updns et /etc/openvpn/downdns. Ces scripts seront exécutés respectivement après la connexion et après la déconnexion au serveur VPN. Créez ces scripts en saisissant les commandes suivantes :
    Astuce : copiez toutes les lignes ci-dessous et collez-les dans Cmder en appuyant sur les touches Shift (⇧) + Insert ou en faisant un clic droit !
    cat <<EOF > /etc/openvpn/updns
    #!/bin/sh
    mv /tmp/resolv.conf.auto /tmp/resolv.conf.auto.hold
    echo $foreign_option_1 | sed -e 's/dhcp-option DOMAIN/domain/g' -e 's/dhcp-option DNS/nameserver/g' > /tmp/resolv.conf.auto
    echo $foreign_option_2 | sed -e 's/dhcp-option DOMAIN/domain/g' -e 's/dhcp-option DNS/nameserver/g' >> /tmp/resolv.conf.auto
    echo $foreign_option_3 | sed -e 's/dhcp-option DOMAIN/domain/g' -e 's/dhcp-option DNS/nameserver/g' >> /tmp/resolv.conf.auto
    EOF
    cat <<EOF > /etc/openvpn/downdns
    #!/bin/sh
    mv /tmp/resolv.conf.auto.hold /tmp/resolv.conf.auto
    EOF
    chmod +x /etc/openvpn/updns
    chmod +x /etc/openvpn/downdns
    # Résultat :
    # root@OpenWrt:/tmp# ls -l /etc/openvpn/ | grep -E 'updns|downdns'
    # -rw-r--r--    1 root     root            62 Feb  4 13:27 downdns
    # -rw-r--r--    1 root     root           435 Feb  4 13:24 updns
  2. Pour que ces scripts soient exécutés, il faut ajouter les paramètres suivants à nos fichiers de configuration .ovpn :
    script-security 2
    up /etc/openvpn/updns
    down /etc/openvpn/downdns

    Pour ce faire, exécutez la commande suivante :

    sed -i '/auth-user-pass*/a script-security 2nup /etc/openvpn/updnsndown /etc/openvpn/downdns' /etc/openvpn/*.ovpn

Activation des logs

  1. Il est important d’utiliser des journaux d’événements (logs) afin de garder des traces de l’activité de notre client OpenVPN. Pour activer les logs, il faut ajouter les paramètres suivants à nos fichiers de configuration .ovpn :
    log-append /var/log/openvpn.log
    status /var/log/openvpn-status.log
    

    Pour ce faire, exécutez la commande suivante :

    sed -i '/auth-user-pass*/a log-append /var/log/openvpn.lognstatus /var/log/openvpn-status.log' /etc/openvpn/*.ovpn

Configuration de l’interface réseau et du pare-feu

  1. Créez une interface pour les instances OpenVPN :
    uci set network."$VPN_PROVIDER"_vpn=interface
    uci set network."$VPN_PROVIDER"_vpn.proto='none'
    uci set network."$VPN_PROVIDER"_vpn.ifname='tun0'
    uci set network."$VPN_PROVIDER"_vpn.metric='10'
    # Résultat :
    # root@OpenWrt:~# uci show network.expressvpn_vpn
    # network.expressvpn_vpn=interface
    # network.expressvpn_vpn.proto='dhcp'
    # network.expressvpn_vpn.ifname='tun0'
    # network.expressvpn_vpn.metric='10'
  2. Créez une nouvelle zone « vpn » dans le pare-feu et placez-y l’interface que nous venons de créer :
    uci add firewall zone
    uci set firewall.@zone[-1].name='vpn'
    uci set firewall.@zone[-1].input='REJECT'
    uci set firewall.@zone[-1].output='ACCEPT'
    uci set firewall.@zone[-1].forward='REJECT'
    uci set firewall.@zone[-1].masq='1'
    uci set firewall.@zone[-1].mtu_fix='1'
    uci add_list firewall.@zone[-1].network="$VPN_PROVIDER"_vpn
    # Résultat :
    # root@OpenWrt:~# uci show firewall.@zone[-1]
    # firewall.cfg1edc81=zone
    # firewall.cfg1edc81.name='vpn'
    # firewall.cfg1edc81.input='REJECT'
    # firewall.cfg1edc81.output='ACCEPT'
    # firewall.cfg1edc81.forward='REJECT'
    # firewall.cfg1edc81.masq='1'
    # firewall.cfg1edc81.mtu_fix='1'
    # firewall.cfg1edc81.network='expressvpn_vpn'
  3. Activez la redirection de la zone LAN vers la zone VPN :
    uci add firewall forwarding
    uci set firewall.@forwarding[-1].src='lan'
    uci set firewall.@forwarding[-1].dest='vpn'
    # Résultat :
    # root@OpenWrt:~# uci show firewall.@forwarding[-1]
    # firewall.cfg20ad58=forwarding
    # firewall.cfg20ad58.src='lan'
    # firewall.cfg20ad58.dest='vpn'
  4. Validez les changements et redémarrez les services firewall, network et openvpn :
    uci commit
    /etc/init.d/firewall reload
    /etc/init.d/network restart
    /etc/init.d/openvpn restart

Protection contre les fuites DNS

Pour protéger notre connexion VPN contre les fuites DNS[1], nous allons définir les DNS d’OpenDNS et de Google sur les interfaces LAN et WAN.

  1. Ajoutez les DNS d’OpenDNS et de Google sur l’interface lan :
    uci add_list dhcp.lan.dhcp_option='6,208.67.222.222,208.67.220.220'
    uci add_list dhcp.lan.dhcp_option='6,8.8.8.8,8.8.4.4'
  2. Ajoutez les DNS d’OpenDNS et de Google sur les interfaces par lesquelles vous passez pour accéder à Internet :
    uci set network.wan.peerdns='0' # Désactive les DNS fournis par DHCP
    uci del network.wan.dns # Supprime les DNS existants s'ils existent
    uci add_list network.wan.dns='208.67.222.222'
    uci add_list network.wan.dns='208.67.220.220'
    uci add_list network.wan.dns='8.8.8.8'
    uci add_list network.wan.dns='8.8.4.4'

    Remplacez wan par le nom de l’interface par laquelle vous passez pour accéder à Internet, par exemple wlan (connexion ADSL/fibre via Wi-Fi) ou wwan (connexion LTE).

  3. Validez les changements et redémarrez le service network et openvpn :
    uci commit
    /etc/init.d/network restart
    /etc/init.d/network openvpn

[1] Protection contre les fuites DNS (DNS Leak Protection) ^

Petit rappel sur les DNS. Un DNS est un serveur qui contient les annuaires de tous les sites Internet.

Lorsque vous tapez « www.google.fr » dans votre navigateur, de base, votre PC ne sait pas où se trouve « www.google.fr ». Votre PC est une machine, et pour communiquer avec d’autres machines, elle a besoin d’avoir sa propre adresse IP (du type 86.201.69.8) et de connaitre celles des autres machines. Lorsque vous tapez « www.google.fr », votre PC envoie donc une demande aux serveurs DNS (ceux de votre FAI généralement) pour savoir quelle est l’adresse IP de « www.google.fr » pour pouvoir s’y connecter. Les serveurs DNS répondent alors qu’il peut trouver « www.google.fr » à l’adresse IP 216.58.211.67. Votre navigateur peut alors établir une connexion avec le serveur où est hébergé « www.google.fr ».

Vous l’avez compris, il y a deux phases : la connexion aux serveurs DNS puis au site Internet. Même si vous êtes connecté à un serveur VPN, votre système d’exploitation (ex. : Windows, OpenWrt…) peut continuer à utiliser les serveurs DNS par défaut (ceux de votre FAI) au lieu des serveurs DNS anonymes de votre VPN. C’est une très grosse faille de sécurité, étant donné que toutes les requêtes vers les serveurs DNS de votre FAI ne sont pas chiffrées et peuvent donc êtes analysées. La protection contre les fuites DNS (DNS Leak Protection) permet de s’assurer que l’ensemble de votre connexion passe exclusivement dans le tunnel sécurisé du VPN et non dans celui non sécurisé de votre connexion Internet habituelle.

Étape 3 : se connecter au serveur VPN

  1. Ouvrez votre navigateur Web et entrez l’adresse Web http://192.168.1.1/ pour vous connecter à l’interface d’administration d’OpenWrt.
  2. Rendez-vous sur la page Services > OpenVPN. Toutes les instances OpenVPN que vous avez créées dans l’étape 2 se trouvent ici :
  3. Activez l’instance OpenVPN qui vous intéresse en cochant la case Enabled puis en cliquant sur le bouton Save & Apply. Puis, cliquez sur le bouton Start pour lancer la connexion au serveur VPN.
    Sur la page Network > Interfaces, vous trouverez l’interface de votre instance OpenVPN :
  4. Si vous souhaitez changer d’instance OpenVPN, procédez scrupuleusement comme ceci :
    1. Arrêtez le service openvpn : rendez-vous sur la page System > Startup pour accéder à la liste des services et cliquez sur le bouton Stop en face du service openvpn.
    2. Rendez-vous sur la page Services > OpenVPN pour accéder à la liste des instances OpenVPN.
    3. Désactivez l’ancienne instance OpenVPN en décochant la case Enabled.
    4. Activer la nouvelle instance OpenVPN en cochant la case Enabled.
    5. Cliquez sur le bouton Save & Apply.
    6. Cliquez sur le bouton Start en face de la nouvelle instance OpenVPN.
    7. Voilà, vous êtes connecté sur la nouvelle instance OpenVPN 😉

Étape 4 : vérifier la connexion au serveur VPN

  1. Ouvrez votre navigateur Web, accédez au site Web https://www.dnsleaktest.com et regardez si l’adresse IP et la localisation détectées correspondent à celles de votre instance OpenVPN :Dans la capture d’écran ci-dessus, on voit bien que le tunnel VPN est bien actif, notre adresse IP publique et notre localisation correspondent à celles d’un serveur au Royaume-Uni.
  2. Lancez un test de fuites DNS (DNS leak test) en cliquant sur le bouton Standard test ou Extended test : Ici, les DNS identifiés pour résoudre les noms de domaine sont ceux d’ExpressVPN et non ceux de notre FAI, tout va bien ! 🙂
  3. Vous pouvez également utiliser les services de vérification d’adresse IP et de test de fuite DNS de votre fournisseur de VPN. Par exemple, ceux de :

Et voilà ! Les communications entrantes et sortantes entre votre réseau local et Internet sont maintenant totalement chiffrées 👍

Profitez-en bien ! 😎

160 utilisateurs actifs
Chargement en cours