Tinc est un démon de réseau privé virtuel (VPN) open source doté de fonctions utiles telles que le cryptage, la compression optionnelle et le routage automatique de maillage qui peut opportunément acheminer le trafic VPN directement entre les serveurs. Ces caractéristiques différencient Tinc des autres solutions de VPN, et en font un bon choix pour créer un VPN à partir de nombreux petits réseaux géographiquement distribués.
Dans ce tutoriel, nous allons voir comment utiliser Tinc pour créer un VPN sécurisé sur lequel vos serveurs peuvent communiquer comme s’ils étaient sur un réseau local. Nous montrerons également comment utiliser Tinc pour créer un tunnel sécurisé vers un réseau privé. Nous utiliserons des serveurs Ubuntu 18.04, mais les configurations peuvent être adaptées pour être utilisées avec n’importe quel autre système d’exploitation.
Afin de couvrir des cas d’utilisation multiples, ce tutoriel explique comment connecter un nœud client au VPN via une interface de réseau privé et un autre via une interface publique. Vous pouvez toutefois adapter ce dispositif à vos propres besoins. Il vous suffit de planifier la manière dont vous souhaitez que vos serveurs accèdent les uns aux autres et d’adapter les exemples présentés dans ce tutoriel à vos propres besoins. Si vous l’adaptez à votre propre configuration, veillez à remplacer les valeurs mises en évidence dans les exemples par vos propres valeurs. Cependant, il peut être dans votre intérêt de suivre d’abord le tutoriel tel qu’il est écrit pour vous assurer que vous comprenez les composants et les processus impliqués avant de modifier ces instructions.
Pour simplifier les choses, ce tutoriel fera référence aux serveurs comme ceci :
Remarque : Tinc lui-même ne fait pas de différence entre les serveurs (machines qui hébergent et fournissent des services VPN) et les clients (les machines qui se connectent au réseau privé sécurisé et l’utilisent), mais il peut être utile de comprendre et de visualiser le fonctionnement de Tinc en pensant à vos serveurs de cette manière.
Voici un schéma du VPN que nous voulons mettre en place :
La case bleue représente notre VPN et la rose représente le réseau privé sous-jacent. Les trois serveurs peuvent communiquer sur le VPN, même si le réseau privé est par ailleurs inaccessible au client 02.
Si vous souhaitez suivre ce tutoriel à la lettre, mettez à disposition deux serveurs Ubuntu 18.04 (server-01 et client-01) dans le même centre de données et autorisez la mise en réseau privée sur chacun d’eux. Ensuite, créez un autre serveur Ubuntu 18.04 (client-02) dans un centre de données séparé. Chaque serveur doit être doté d’un utilisateur administratif et d’un pare-feu configuré avec ufw
. Pour le mettre en place, suivez notre guide de configuration initiale du serveur pour Ubuntu 18.04.
De plus, plus loin dans ce tutoriel, nous aurons besoin de transférer quelques fichiers entre chaque machine en utilisant scp
. Pour cette raison, vous devrez générer des clés SSH sur chacun de vos serveurs, ajouter à la fois les clés SSH du client 01 et du client 02 au fichier authorized_keys
du serveur 01, puis ajouter la clé SSH du serveur 01 aux fichiers authorized_keys du client 01 et du client 02
. Pour obtenir de l’aide pour la mise en place, consultez notre guide sur la mise en place des clés SSH sur Ubuntu 18.04.
Tinc est disponible à partir des dépôts APT par défaut d’Ubuntu, ce qui signifie que nous pouvons l’installer avec seulement quelques commandes.
Si vous ne l’avez pas fait récemment, exécutez la commande suivante sur chaque serveur pour mettre à jour leurs index de package respectifs :
- sudo apt update
Installez ensuite Tinc sur chaque serveur en exécutant la commande suivante :
- sudo apt install tinc
En faisant cela, vous avez installé Tinc sur chacun de vos serveurs. Cependant, vous devrez apporter quelques modifications à la configuration de Tinc sur chaque machine afin de rendre votre VPN opérationnel. Commençons par mettre à jour server-01.
Tinc exige que chaque machine qui fera partie du VPN ait les trois éléments de configuration suivants :
tinc.conf
, qui définit le nom du réseau, le périphérique réseau sur lequel le VPN fonctionnera, et d’autres options VPN ;tinc-up
, un script qui active le périphérique réseau défini dans tinc.conf
après le démarrage de Tinc ;tinc-down
, qui désactive l’appareil du réseau lorsque Tinc s’arrête.Tinc utilise un nom de réseau pour distinguer un VPN Tinc d’un autre. Cela est utile dans les cas où vous souhaitez mettre en place plusieurs VPN, mais il est recommandé d’utiliser un nom de réseau même si vous ne prévoyez de configurer qu’un seul VPN. Vous pouvez donner à votre VPN le nom de réseau que vous souhaitez, mais pour plus de simplicité, nous l’appellerons VPN nom de réseau
.
Sur le server-01, créez la structure du répertoire de configuration pour le VPN :
- sudo mkdir -p /etc/tinc/netname/hosts
Utilisez votre éditeur de texte préféré pour créer un fichier tinc.conf
. Ici, nous utiliserons le nano
:
- sudo nano /etc/tinc/netname/tinc.conf
Ajoutez les lignes suivantes au fichier vide. Celles-ci configurent un noeud Tinc nommé server_01
avec une interface réseau appelée tun0
qui utilisera IPv4 :
Name = server_01
AddressFamily = ipv4
Interface = tun0
Avertissement : notez que la valeur après la directive Name
comprend un tiret bas (_
) plutôt qu’un trait d’union (-
). C’est important, car Tinc exige que la valeur de Name
ne contienne que des caractères alphanumériques ou de soulignement. Si vous utilisez un trait d’union ici, vous rencontrerez une erreur lorsque vous essaierez de lancer le VPN plus loin dans ce guide.
Enregistrez et fermez le fichier après avoir ajouté ces lignes. Si vous avez utilisé nano
, faites-le en appuyant sur CTRL+X
, Y
, puis ENTER
.
Ensuite, créez un fichier de configuration de l’hôte nommé server_01
dans le sous-répertoire hosts
. En fin de compte, les nœuds clients utiliseront ce fichier pour communiquer avec le server-01 :
- sudo nano /etc/tinc/netname/hosts/server_01
Encore une fois, notez que le nom de ce fichier contient un tiret bas plutôt qu’un trait d’union. Ainsi, il s’aligne sur la directive Name
du fichier tinc.conf
, ce qui permettra à Tinc d’ajouter automatiquement la clé RSA publique du serveur à ce fichier lorsque nous le générerons ultérieurement.
Ajoutez les lignes suivantes au fichier, en veillant à inclure l’adresse IP publique du server-01 :
Address = server-01_public_IP_address
Subnet = 10.0.0.1/32
Le champ Address
spécifie comment les autres nœuds se connecteront à ce serveur, et Subnet
spécifie quel sous-réseau ce démon desservira. Enregistrez et fermez le fichier.
Ensuite, générez une paire de clés RSA publiques et privées pour cet hôte avec la commande suivante :
- sudo tincd -n netname -K4096
Après avoir exécuté cette commande, vous serez invité à saisir des noms de fichiers où Tinc enregistrera les clés RSA publiques et privées :
Output. . .
Please enter a file to save private RSA key to [/etc/tinc/netname/rsa_key.priv]:
Please enter a file to save public RSA key to [/etc/tinc/netname/hosts/server_01]:
Appuyez sur ENTER
pour accepter les emplacements par défaut à chaque message-guide ; cela indiquera à Tinc de stocker la clé privée dans un fichier nommé rsa_key.priv
et d’ajouter la clé publique au fichier de configuration de l’hôte server_01
.
Ensuite, créez tinc-up
, le script qui s’exécutera à chaque fois que le VPN netname
est lancé :
- sudo nano /etc/tinc/netname/tinc-up
Ajoutez les lignes suivantes :
#!/bin/sh
ip link set $INTERFACE up
ip addr add 10.0.0.1/32 dev $INTERFACE
ip route add 10.0.0.0/24 dev $INTERFACE
Voici ce que fait chacune de ces lignes :
ip link ...
: définit le statut de l’interface de réseau virtuel de Tinc comme activé
ip addr ...
: ajoute l’adresse IP 10.0.0.1
avec un masque de réseau de 32
à l’interface réseau virtuelle de Tinc, ce qui fera que les autres machines sur le VPN verront l’adresse IP du server-01 comme étant 10.0.0.1
ip route ...
: ajoute un itinéraire (10.0.0.0/24
) qui peut être atteint sur l’interface du réseau virtuel de TincEnregistrez et fermez le fichier après avoir ajouté ces lignes.
Ensuite, créez un script pour supprimer l’interface de réseau virtuel lorsque votre VPN est arrêté :
- sudo nano /etc/tinc/netname/tinc-down
Ajoutez les lignes suivantes :
#!/bin/sh
ip route del 10.0.0.0/24 dev $INTERFACE
ip addr del 10.0.0.1/32 dev $INTERFACE
ip link set $INTERFACE down
Ces lignes ont les effets opposés à ceux du script tinc-up
:
ip route ...
: supprime l’itinéraire 10.0.0.0/24
ip addr ...
: supprime l’adresse IP 10.0.0.1
de l’interface réseau virtuelle de Tincip link ...
: définit le statut de l’interface de réseau virtuel de Tinc comme down
Enregistrez et fermez le fichier, puis rendez ces deux nouveaux scripts réseau exécutables :
- sudo chmod 755 /etc/tinc/netname/tinc-*
Pour terminer la configuration du server-01, ajoutez une règle de pare-feu qui autorisera le trafic par le port 655
, le port par défaut de Tinc :
- sudo ufw allow 655
Le server-01 est maintenant entièrement configuré et vous pouvez passer à la configuration de vos nœuds clients.
Vos deux machines clientes nécessiteront une configuration légèrement différente de celle du serveur, bien que le processus soit généralement assez similaire.
En raison de la configuration que nous souhaitons réaliser dans ce guide, nous allons configurer client-01 et client-02 de manière presque identique, avec seulement quelques légères différences entre eux. Par conséquent, de nombreuses commandes données dans cette étape doivent être exécutées sur les deux machines. Notez, cependant, que si client-01 ou client-02 nécessite une commande spécifique ou une configuration spéciale, ces instructions seront affichées dans un bloc de commande, respectivement bleu ou rouge.
Sur client-01 et client-02, reproduisez la structure de répertoire que vous avez créée sur le server-01 :
- sudo mkdir -p /etc/tinc/netname/hosts
Créez ensuite un fichier tinc.conf
:
- sudo nano /etc/tinc/netname/tinc.conf
Ajoutez les lignes suivantes au fichier, sur les deux machines :
Name = node_name
AddressFamily = ipv4
Interface = tun0
ConnectTo = server_01
Veillez à remplacer node_name
par le nom du nœud client correspondant. Encore une fois, assurez-vous que ce nom utilise un tiret bas (_
) plutôt qu’un trait d’union.
Notez que ce fichier contient une directive ConnectTo
pointant sur server_01
, alors que le fichier tinc.conf de server-01
n’incluait pas cette directive. En n’incluant pas de déclaration ConnectTo
sur server-01, cela signifie que server-01 n’écoutera que les connexions entrantes. Cela fonctionne pour notre installation, puisqu’elle ne se connectera à aucune autre machine.
Enregistrez et fermez le fichier.
Ensuite, créez un fichier de configuration de l’hôte sur chaque nœud client. Encore une fois, assurez-vous que le nom du fichier contient un tiret bas au lieu d’un trait d’union :
- sudo nano /etc/tinc/netname/hosts/node_name
Pour client-01, ajoutez cette ligne :
Subnet = 10.0.0.2/32
Pour client-02, ajoutez cette ligne :
Subnet = 10.0.0.3/32
Notez que chaque client possède un sous-réseau différent que Tinc desservira. Enregistrez et fermez le fichier.
Ensuite, générez les paires de clés sur chaque machine cliente :
- sudo tincd -n netname -K4096
Comme vous l’avez fait pour server-01, lorsque vous êtes invité à sélectionner des fichiers pour stocker les clés RSA, appuyez sur ENTER
pour accepter les choix par défaut.
Ensuite, créez le script de démarrage de l’interface réseau sur chaque client :
- sudo nano /etc/tinc/netname/tinc-up
Pour client-01, ajoutez ces lignes :
#!/bin/sh
ip link set $INTERFACE up
ip addr add 10.0.0.2/32 dev $INTERFACE
ip route add 10.0.0.0/24 dev $INTERFACE
Pour client-02, ajoutez ce qui suit :
#!/bin/sh
ip link set $INTERFACE up
ip addr add 10.0.0.3/32 dev $INTERFACE
ip route add 10.0.0.0/24 dev $INTERFACE
Enregistrez et fermez chaque fichier.
Ensuite, créez le script d’arrêt de l’interface réseau sur chaque client :
- sudo nano /etc/tinc/netname/tinc-down
Sur client-01, ajoutez le contenu suivant au fichier vide :
#!/bin/sh
ip route del 10.0.0.0/24 dev $INTERFACE
ip addr del 10.0.0.2/32 dev $INTERFACE
ip link set $INTERFACE down
Sur client-02, ajoutez ce qui suit :
#!/bin/sh
ip route del 10.0.0.0/24 dev $INTERFACE
ip addr del 10.0.0.3/32 dev $INTERFACE
ip link set $INTERFACE down
Enregistrez et fermez les fichiers.
Rendez les scripts réseau exécutables en exécutant la commande suivante sur chaque machine cliente :
- sudo chmod 755 /etc/tinc/netname/tinc-*
Enfin, ouvrez le port 655
sur chaque client :
- sudo ufw allow 655
À ce stade, les nœuds clients sont presque, mais pas tout à fait, mis en place. Ils ont encore besoin de la clé publique que nous avons créée sur server-01 dans l’étape précédente pour authentifier la connexion au VPN.
Chaque nœud qui souhaite communiquer directement avec un autre nœud doit avoir échangé des clés publiques, qui se trouvent dans les fichiers de configuration de l’hôte. Dans notre cas, server-01 doit échanger des clés publiques avec les autres nœuds.
Sur client-01, copiez son fichier de configuration de l’hôte sur server-01. Etant donné que client-01 et server-01 se trouvent tous les deux dans le même centre de données et qu’ils ont tous les deux un réseau privé activé, vous pouvez utiliser l’adresse IP privée de server01 :
- scp /etc/tinc/netname/hosts/client_01 sammy@server-01_private_IP:/tmp
Cliquez ensuite sur server-01 et copiez le fichier de configuration de l’hôte de client-01
dans le répertoire /etc/tinc/netname/hosts/
:
- sudo cp /tmp/client_01 /etc/tinc/netname/hosts/
Ensuite, toujours sur server-01, copiez son fichier de configuration de l’hôte sur client-01 :
- scp /etc/tinc/netname/hosts/server_01 user@client-01_private_IP:/tmp
Sur client-01, copiez le fichier server-01 à l’emplacement approprié :
- sudo cp /tmp/server_01 /etc/tinc/netname/hosts/
Sur client-01, éditez le fichier de configuration de l’hôte de server-01 de sorte que le champ Address
soit réglé sur l’adresse IP privée de server-01. Ainsi, client-01 se connectera au VPN par l’intermédiaire du réseau privé :
- sudo nano /etc/tinc/netname/hosts/server_01
Modifiez la directive Address
de façon à pointer vers l’adresse IP privée de server-01 :
Address = server-01_private_IP
Subnet = 10.0.0.1/32
Enregistrez et quittez. Passons maintenant à notre noeud restant, client-02.
Sur client-02, copiez son fichier de configuration de l’hôte sur server-01 :
- scp /etc/tinc/netname/hosts/client_02 sammy@server-01_public_IP:/tmp
Ensuite, sur server-01, copiez le fichier de configuration de l’hôte de client-02
à l’emplacement approprié :
- sudo cp /tmp/client_02 /etc/tinc/netname/hosts/
Puis, copiez le fichier de configuration de l’hôte de server-01 sur client-02 :
- scp /etc/tinc/netname/hosts/server_01 user@client-02_public_IP:/tmp
Sur client-02, copiez le fichier server-01 à l’emplacement approprié :
- sudo cp /tmp/server_01 /etc/tinc/netname/hosts/
En supposant que vous ne mettiez en place que deux nœuds clients, vous avez fini de distribuer des clés publiques. Si, toutefois, vous créez un VPN plus important, c’est le bon moment pour échanger les clés entre ces autres nœuds. N’oubliez pas que si vous souhaitez que deux nœuds communiquent directement entre eux (sans serveur de transfert entre eux), ils doivent avoir échangé leurs clés/fichiers de configuration des hôtes et pouvoir accéder aux véritables interfaces réseau de l’autre. Il est également possible de copier le fichier de configuration de chaque hôte sur chaque nœud du VPN.
Sur chaque noeud, en commençant par server-01, lancez Tinc avec la commande suivante :
- sudo tincd -n netname -D -d3
Cette commande inclut le drapeau -n
, qui désigne le nom de réseau pour votre VPN, netname
. C’est utile si vous avez mis en place plus d’un VPN et que vous devez préciser lequel vous souhaitez lancer. Elle comporte aussi le drapeau -D
, qui empêche Tinc de s’enfoncer et de se détacher, et désactive le mécanisme de redémarrage automatique de Tinc. Enfin, elle comprend le drapeau -d
, qui ordonne à Tinc de fonctionner en mode débogage, avec un niveau de débogage de 3
.
Remarque : en ce qui concerne le démon Tinc, un niveau de débogage de 3
affichera chaque requête échangée entre deux des serveurs, y compris les demandes d’authentification, les échanges de clés et les mises à jour de la liste de clés Des niveaux de débogage plus élevés donnent plus d’informations sur le trafic réseau, mais pour l’instant nous ne nous préoccupons que de savoir si les nœuds peuvent communiquer entre eux, donc un niveau de 3
suffira. Dans un scénario de production, cependant, vous souhaiteriez passer à un niveau de débogage inférieur afin de ne pas remplir les disques avec des fichiers journaux.
Vous pouvez en savoir plus sur les niveaux de débogage de Tinc en consultant la documentation officielle.
Après le démarrage du démon sur chaque nœud, vous devriez voir la sortie avec les noms de chaque nœud lorsqu’ils se connectent à server-01. Testons maintenant la connexion via le VPN.
Dans une fenêtre séparée, envoyez un ping sur client-02 avec l’adresse IP de VPN de client-01. Nous lui avons attribué la valeur de 10.0.0.2
plus tôt :
- ping 10.0.0.2
Le ping devrait fonctionner correctement, et vous devriez voir une sortie de débogage dans les autres fenêtres concernant la connexion sur le VPN. Cela indique que client-02 peut communiquer via le VPN via server-01 vers client-01. Appuyez sur CTRL+C
pour arrêter le pinging.
Vous pouvez également utiliser les interfaces VPN pour effectuer toute autre communication réseau, comme les connexions d’apps, la copie de fichiers et le SSH.
Sur chaque fenêtre de débogage de démon Tinc, fermez le démon en appuyant sur CTRL+\
.
Les serveurs Ubuntu utilisent systemd
comme gestionnaire de système par défaut pour commander les processus de démarrage et de fonctionnement. Par conséquent, nos pouvons autoriser le VPN netname
à démarrer automatiquement lors de la mise en marche avec une commande systemctl
unique.
Exécutez la commande suivante sur chaque noeud pour permettre au VPN Tinc de démarrer à chaque mise en marche des machines :
- sudo systemctl enable tinc@netname
Tinc est configuré pour démarrer à chaque mise en marche sur chacune de vos machines, et vous pouvez le contrôler avec la commande systemctl
. Si vous souhaitez le démarrer maintenant, exécutez la commande suivante sur chacun de vos nœuds :
- sudo systemctl start tinc@netname
Remarque : si vous avez plusieurs VPN, vous devez activer ou démarrer chacun d’entre eux en même temps, comme ceci :
- sudo systemctl start tinc@natename_01 tinc@netname_02 … tinc@netname_n
Grâce à cette manipulation, votre VPN Tinc est entièrement configuré et fonctionne sur chacun de vos nœuds.
Maintenant que vous avez suivi ce tutoriel, vous devriez avoir une bonne base pour construire votre VPN afin qu’il réponde à vos besoins. Tinc est très flexible, et tout nœud peut être configuré pour se connecter à n’importe quel autre nœud (auquel il peut accéder par le réseau) afin qu’il puisse agir comme un VPN maillé sans dépendre d’un nœud individuel.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!