VPN site à site : comment le configurer avec OpenVPN ?


  • Français

  • Apprenez à créer un VPN site à site avec OpenVPN, qui vous permet de relier deux ou plusieurs sites distants via Internet, en toute sécurité.


    Apprenez à créer un VPN site à site avec OpenVPN, qui vous permet de relier deux ou plusieurs sites distants via Internet, en toute sécurité et simplicité.

    Un VPN site à site est un type de réseau privé virtuel (VPN) qui permet de connecter deux ou plusieurs sites distants entre eux via Internet. Un VPN site à site offre plusieurs avantages, tels que :

    • La sécurisation des communications entre les sites grâce au chiffrement et à l’authentification.
    • L’extension du réseau local (LAN) d’un site à l’autre, ce qui facilite le partage de ressources et de services.
    • L’amélioration des performances et de la fiabilité du réseau en évitant les congestions et les pertes de paquets.
    • La réduction des coûts de connexion en utilisant des liens Internet existants au lieu de lignes louées ou de liaisons dédiées.

    Exemple d’un VPN site à site

    Un exemple concret de VPN site à site est celui d’une entreprise qui dispose de plusieurs bureaux dans différentes villes ou pays, et qui souhaite les relier entre eux via Internet. En utilisant un VPN site à site, l’entreprise peut créer un réseau privé virtuel qui permet aux employés des différents bureaux de communiquer et de collaborer comme s’ils étaient sur le même réseau local.

    Par exemple, ils peuvent accéder aux fichiers partagés, aux imprimantes, aux serveurs, aux applications, etc. Le VPN site à site offre également une sécurité renforcée, car les données échangées entre les bureaux sont chiffrées et authentifiées, ce qui empêche les écoutes ou les intrusions.

    Le VPN site à site permet également de réduire les coûts de connexion, car il utilise les liens Internet existants au lieu de lignes louées ou de liaisons dédiées.

    Pour mettre en place un VPN site à site, il existe plusieurs solutions possibles, mais l’une des plus populaires et des plus efficaces est d’utiliser OpenVPN. OpenVPN est un logiciel libre et open source qui permet de créer et de gérer des VPN basés sur le protocole SSL/TLS. OpenVPN offre une grande flexibilité et une forte sécurité, tout en étant facile à configurer et à utiliser.

    Nous allons vous expliquer comment configurer un VPN site à site avec OpenVPN, en utilisant un exemple concret. Nous allons supposer que vous disposez de deux sites, A et B, qui ont chacun un serveur Linux avec OpenVPN installé, et que vous souhaitez les connecter via Internet. Voici le schéma de notre scénario :

    
    +-----------------+        +-----------------+
    | Site A          |        | Site B          |
    |                 |        |                 |
    | +-------------+ |        | +-------------+ |
    | | Serveur A   | |        | | Serveur B   | |
    | | 192.168.1.1 | |        | | 192.168.2.1 | |
    | +-------------+ |        | +-------------+ |
    |       |         |        |       |         |
    |       |         |        |       |         |
    | +-------------+ |        | +-------------+ |
    | | Routeur A   | |        | | Routeur B   | |
    | | 10.0.0.1    |----------| 10.0.0.2    | |
    | +-------------+ |        | +-------------+ |
    |       ^         |        |       ^         |
    |       ||        Internet  ||      ||        |
    |       ||        +-----+   ||      ||        |
    |       ||        ||ISP||   ||      ||        |
    |       ||        +-----+   ||      ||        |
    |       v         +-----+   v      v         |
    +-----------------+     +-----------------+
    

    Nous allons donc configurer un VPN site à site entre les serveurs A et B, en utilisant les adresses IP 10.0.0.1 et 10.0.0.2 comme adresses VPN, et en permettant aux machines des deux sites de communiquer entre elles via le VPN.

    Étape 1 : Générer les clés et les certificats

    Apprenez à créer un VPN site à site avec OpenVPN, qui vous permet de relier deux ou plusieurs sites distants via Internet, en toute sécurité et simplicité.

    La première étape consiste à générer les clés et les certificats nécessaires pour établir le VPN. OpenVPN utilise le protocole SSL/TLS pour assurer la confidentialité, l’intégrité et l’authentification des communications entre les deux sites. Pour cela, il faut créer une autorité de certification (CA) qui va signer les certificats des serveurs A et B, ainsi qu’une clé secrète partagée qui va servir à chiffrer les données.

    Pour simplifier la procédure, nous allons utiliser le script easy-rsa fourni avec OpenVPN, qui permet de gérer facilement les clés et les certificats. Nous allons exécuter ce script sur le serveur A, mais vous pouvez le faire sur n’importe quel serveur Linux avec OpenVPN installé.

    Commencez par copier le répertoire easy-rsa dans le répertoire /etc/openvpn :

    
    sudo cp -r /usr/share/easy-rsa /etc/openvpn
    

    Ensuite, éditez le fichier /etc/openvpn/easy-rsa/vars, et modifiez les variables suivantes selon vos besoins :

    
    export KEY_COUNTRY="FR"
    export KEY_PROVINCE="IDF"
    export KEY_CITY="Paris"
    export KEY_ORG="Mon entreprise"
    export KEY_EMAIL="admin@monentreprise.com"
    export KEY_OU="VPN site à site"
    

    Ces variables vont servir à remplir les champs des certificats que vous allez générer. Vous pouvez également modifier les variables KEY_SIZE et CA_EXPIRE pour définir la taille des clés et la durée de validité du certificat de la CA, respectivement.

    Une fois que vous avez modifié le fichier vars, exécutez les commandes suivantes pour initialiser le répertoire des clés et des certificats :

    
    cd /etc/openvpn/easy-rsa
    source vars
    ./clean-all
    

    La dernière commande va supprimer tous les fichiers existants dans le répertoire keys, si vous en aviez déjà créés auparavant.

    Maintenant, vous pouvez générer le certificat et la clé de la CA, en exécutant la commande suivante :

    
    ./build-ca
    

    Cette commande va vous demander de confirmer les valeurs des variables que vous avez définies dans le fichier vars, ou de les modifier si besoin. Vous pouvez appuyer sur Entrée pour accepter les valeurs par défaut. À la fin, vous devriez avoir deux fichiers dans le répertoire keys : ca.crt et ca.key. Le premier est le certificat de la CA, et le second est sa clé privée.

    Ensuite, vous pouvez générer le certificat et la clé du serveur A, en exécutant la commande suivante :

    
    ./build-key-server serverA
    

    Cette commande va vous demander de confirmer ou de modifier les valeurs des variables, ainsi qu’un mot de passe pour protéger la clé du serveur A. Vous pouvez laisser ce champ vide si vous ne voulez pas de mot de passe. Vous devrez également répondre “y” aux deux questions suivantes, qui demandent si vous voulez signer le certificat du serveur A avec la CA, et si vous voulez lui attribuer un statut de certificat valide. À la fin, vous devriez avoir deux fichiers supplémentaires dans le répertoire keys : serverA.crt et serverA.key. Le premier est le certificat du serveur A, et le second est sa clé privée.

    De la même manière, vous pouvez générer le certificat et la clé du serveur B, en exécutant la commande suivante :

    
    ./build-key-server serverB
    

    Cette commande va créer deux fichiers : serverB.crt et serverB.key.

    Enfin, vous pouvez générer une clé secrète partagée qui va servir à chiffrer les données entre les deux sites, en exécutant la commande suivante :

    
    ./build-dh
    

    Cette commande va créer un fichier : dh2048.pem.

    À ce stade, vous avez généré tous les fichiers nécessaires pour configurer le VPN site à site. Vous devez maintenant copier ces fichiers sur les serveurs A et B, en respectant les règles suivantes :

    • Sur le serveur A, vous devez avoir les fichiers ca.crt, serverA.crt, serverA.key et dh2048.pem.
    • Sur le serveur B, vous devez avoir les fichiers ca.crt, serverB.crt, serverB.key et dh2048.pem.
    • Vous ne devez jamais divulguer ou transférer les fichiers ca.key, serverA.key et serverB.key à quiconque.

    Pour copier les fichiers sur les serveurs A et B, vous pouvez utiliser la commande scp (secure copy), qui permet de transférer des fichiers via SSH. Par exemple, pour copier le fichier ca.crt du serveur A vers le serveur B, vous pouvez exécuter la commande suivante sur le serveur A :

    
    scp /etc/openvpn/easy-rsa/keys/ca.crt root@10.0.0.2:/etc/openvpn
    

    Cette commande va vous demander le mot de passe du compte root du serveur B, puis copier le fichier ca.crt dans le répertoire /etc/openvpn du serveur B. Vous devez répéter cette opération pour les autres fichiers, en adaptant les noms et les adresses IP selon le cas.

    Étape 2 : Configurer les serveurs OpenVPN

    La deuxième étape consiste à configurer les serveurs OpenVPN sur les serveurs A et B, en utilisant les fichiers que vous avez générés et copiés à l’étape précédente. Nous allons utiliser le mode “tun” d’OpenVPN, qui permet de créer un tunnel IP entre les deux sites, et de leur attribuer des adresses IP virtuelles dans le même sous-réseau.

    Commencez par créer un fichier de configuration pour le serveur A, en éditant le fichier /etc/openvpn/serverA.conf avec votre éditeur de texte préféré. Copiez-y le contenu suivant :

    
    # Fichier de configuration du serveur A
    port 1194 # Port d'écoute d'OpenVPN
    proto udp # Protocole utilisé (udp ou tcp)
    dev tun # Mode de fonctionnement (tun ou tap)
    ca /etc/openvpn/ca.crt # Chemin vers le certificat de la CA
    cert /etc/openvpn/serverA.crt # Chemin vers le certificat du serveur A
    key /etc/openvpn/serverA.key # Chemin vers la clé du serveur A
    dh /etc/openvpn/dh2048.pem # Chemin vers la clé secrète partagée
    server 10.0.0.0 255.255.255.0 # Sous-réseau VPN attribué aux clients
    ifconfig-pool-persist ipp.txt # Fichier pour conserver les associations IP-client
    push "route 192.168.2.0 255.255.255.0" # Route à ajouter aux clients pour accéder au site B
    keepalive 10 120 # Intervalle et durée des messages de vérification de la connexion
    comp-lzo # Compression des données
    persist-key # Conservation de la clé en cas de redémarrage
    persist-tun # Conservation du tunnel en cas de redémarrage
    status openvpn-status.log # Fichier de journalisation du statut
    log openvpn.log # Fichier de journalisation des événements
    verb 3 # Niveau de verbosité des logs (de 1 à 9)
    

    Ce fichier définit les paramètres principaux du serveur OpenVPN, tels que le port d’écoute, le protocole utilisé, les fichiers de clés et de certificats, le sous-réseau VPN attribué aux clients, la route à ajouter aux clients pour accéder au site B, etc. Vous pouvez consulter la documentation d’OpenVPN pour plus de détails sur ces paramètres.

    Ensuite, créez un fichier de configuration pour le serveur B, en éditant le fichier /etc/openvpn/serverB.conf avec votre éditeur de texte préféré. Copiez-y le contenu suivant :

    
    # Fichier de configuration du serveur B
    port 1194 # Port d'écoute d'OpenVPN
    proto udp # Protocole utilisé (udp ou tcp)
    dev tun # Mode de fonctionnement (tun ou tap)
    ca /etc/openvpn/ca.crt # Chemin vers le certificat de la CA
    cert /etc/openvpn/serverB.crt # Chemin vers le certificat du serveur B
    key /etc/openvpn/serverB.key # Chemin vers la clé du serveur B
    dh /etc/openvpn/dh2048.pem # Chemin vers la clé secrète partagée
    server 10.0.0.0 255.255.255.0 # Sous-réseau VPN attribué aux clients
    ifconfig-pool-persist ipp.txt # Fichier pour conserver les associations IP-client
    push "route 192.168.1.0 255.255.255.0" # Route à ajouter aux clients pour accéder au site A
    keepalive 10 120 # Intervalle et durée des messages de vérification de la connexion
    comp-lzo # Compression des données
    persist-key # Conservation de la clé en cas de redémarrage
    persist-tun # Conservation du tunnel en cas de redémarrage
    status openvpn-status.log # Fichier de journalisation du statut
    log openvpn.log # Fichier de journalisation des événements
    verb 3 # Niveau de verbosité des logs (de 1 à 9)
    

    Ce fichier est très similaire au précédent, à la différence près qu’il utilise les fichiers du serveur B, et qu’il ajoute une route pour accéder au site A.

    Une fois que vous avez créé les fichiers de configuration, vous pouvez démarrer les serveurs OpenVPN sur les serveurs A et B, en exécutant les commandes suivantes :

    
    sudo systemctl start openvpn@serverA # Sur le serveur A
    sudo systemctl start openvpn@serverB # Sur le serveur B
    

    Ces commandes vont lancer les services OpenVPN en utilisant les fichiers de configuration que vous avez créés. Vous pouvez vérifier le statut des services avec la commande suivante :

    
    sudo systemctl status openvpn@serverA # Sur le serveur A
    sudo systemctl status openvpn@serverB # Sur le serveur B
    

    Vous devriez voir que les services sont actifs et en cours d’exécution. Vous pouvez également consulter les fichiers de logs (/etc/openvpn/openvpn.log) pour voir les messages d’OpenVPN.

    Étape 3 : Tester le VPN site à site

    générez un tweet original et accrocheur pour cet article dans la limite max de caractères en ajoutant cette url à la fin :

    La dernière étape consiste à tester le VPN site à site que vous venez de configurer, en vérifiant que les serveurs A et B peuvent communiquer entre eux via le VPN, et que les machines des deux sites peuvent également communiquer entre elles via le VPN.

    Pour tester la communication entre les serveurs A et B, vous pouvez utiliser la commande ping, qui permet d’envoyer des paquets ICMP (Internet Control Message Protocol) à une adresse IP et de mesurer le temps de réponse. Par exemple, sur le serveur A, vous pouvez exécuter la commande suivante :

    
    ping 10.0.0.2 # Adresse VPN du serveur B
    

    Cette commande va envoyer des paquets ICMP à l’adresse VPN du serveur B, et afficher le temps de réponse en millisecondes. Vous devriez voir quelque chose comme ceci :

    
    PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
    64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=12.3 ms
    64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=11.7 ms
    64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=11.9 ms
    64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=11.8 ms
    

    Cela signifie que le serveur A peut joindre le serveur B via le VPN, avec un temps de réponse moyen d’environ 12 ms.

    Vous pouvez faire la même chose sur le serveur B, en exécutant la commande suivante :

    
    ping 10.0.0.1 # Adresse VPN du serveur A
    

    Vous devriez obtenir un résultat similaire, qui confirme que le VPN site à site fonctionne correctement entre les deux serveurs.

    Pour tester la communication entre les machines des deux sites, vous devez d’abord configurer les routeurs A et B pour qu’ils redirigent les paquets destinés au sous-réseau VPN vers les serveurs OpenVPN respectifs. Pour cela, vous devez ajouter une règle de routage sur chaque routeur, qui indique l’adresse IP du serveur OpenVPN comme passerelle pour le sous-réseau VPN. Par exemple, sur le routeur A, vous pouvez exécuter la commande suivante :

    
    ip route add 10.0.0.0/24 via 192.168.1.1 # Adresse LAN du serveur A
    

    Cette commande va ajouter une règle de routage qui indique que pour joindre le sous-réseau VPN 10.0.0.0/24, il faut passer par le serveur A, dont l’adresse LAN est 192.168.1.1.

    De la même manière, sur le routeur B, vous pouvez exécuter la commande suivante :

    
    ip route add 10.0.0.0/24 via 192.168.2.1 # Adresse LAN du serveur B
    

    Cette commande va ajouter une règle de routage qui indique que pour joindre le sous-réseau VPN 10.0.0.0/24, il faut passer par le serveur B, dont l’adresse LAN est 192.168.2.1.

    Une fois que vous avez configuré les routeurs A et B, vous pouvez tester la communication entre les machines des deux sites, en utilisant la commande ping comme précédemment. Par exemple, sur une machine du site A, vous pouvez exécuter la commande suivante :

    
    ping 192.168.2.x # Adresse LAN d'une machine du site B
    

    Cette commande va envoyer des paquets ICMP à l’adresse LAN d’une machine du site B, et afficher le temps de réponse en millisecondes. Vous devriez voir quelque chose comme ceci :

    
    PING 192.168.2.x (192.168.2.x) 56(84) bytes of data.
    64 bytes from 192.168.2.x: icmp_seq=1 ttl=63 time=13.4 ms
    64 bytes from 192.168.2.x: icmp_seq=2 ttl=63 time=12.8 ms
    64 bytes from 192.168.2.x: icmp_seq=3 ttl=63 time=13.1 ms
    64 bytes from 192.168.2.x: icmp_seq=4 ttl=63 time=13.0 ms
    

    Cela signifie que la machine du site A peut joindre la machine du site B via le VPN, avec un temps de réponse moyen d’environ 13 ms.

    Vous pouvez faire la même chose sur une machine du site B, en exécutant la commande suivante :

    
    ping 192.168.1.x # Adresse LAN d'une machine du site A
    

    Vous devriez obtenir un résultat similaire, qui confirme que le VPN site à site permet aux machines des deux sites de communiquer entre elles.

    Conclusion

    Dans cet article, nous avons vu comment configurer un VPN site à site avec OpenVPN, en utilisant un exemple concret de deux sites distants qui souhaitent se connecter via Internet.

    Nous avons vu les étapes suivantes :

    • Générer les clés et les certificats nécessaires pour établir le VPN.
    • Configurer les serveurs OpenVPN sur les serveurs A et B.
    • Tester le VPN site à site en vérifiant la communication entre les serveurs et les machines des deux sites.

    Nous avons ainsi pu créer un réseau privé virtuel sécurisé et performant, qui permet d’étendre le réseau local d’un site à l’autre, et de faciliter le partage de ressources et de services.

    OpenVPN est une solution de VPN libre et open source, qui offre une grande flexibilité et une forte sécurité, tout en étant facile à configurer et à utiliser.

    Si vous souhaitez approfondir le sujet ou découvrir d’autres fonctionnalités d’OpenVPN, vous pouvez consulter la documentation officielle sur https://openvpn.net/.

    Houssen Moshinaly

    Pour contacter personnellement le taulier :

    Laisser un commentaire

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

    Copy code